• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel vba 実行エラー1004)

Excel VBA実行エラー1004の対処方法とは?

このQ&Aのポイント
  • Excel VBAを使用してアクティブブックの名前を取得し、別のブックを開く際にエラー1004が発生しています。
  • エラー1004の原因は、開こうとしているファイルが存在しないか、アクセス権限がないことです。
  • ファイルが存在し、アクセス権限もあるのにエラーが発生する場合は、ファイル名の指定方法やパスの正確さを確認してください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

Replece関数の文字比較がバイナリーで行われている為、変換元ファイルは既にオープン なのでエラーになります。 テキストモード指定にすれば大文字・小文字関係なしの比較になり、変換できると思います のでお試しください。 Range("b2").Formula = Replace(bb, "b.CSV", "k.CSV", , , vbTextCompare)

tonkotu1101
質問者

お礼

教えていただいた方法でできました。ありがとうございます。 またもう一つChDriveとChdirを指定する事でできました。←他人は使用できない・・・ ですのでとても助かりました。ありがとうございました。

その他の回答 (1)

noname#158634
noname#158634
回答No.1

だって >Workbooks.Open Filename:=kbn の時点で kbn に入っている名前のファイルはないんでしょう?そりゃエラーになりますよ。 これはVBAに限らず、「新規ファイルを任意のファイル名で開く」という動作は普通できません。あきらめてください。というか、新規ファイルを特定の名前で開く理由がわからない。よかったら理由を聞かせてほしいです。 で。 いちばん近いのは「新規ファイルを開いて任意の名前で保存する」ことでしょう。addメソッドで新規にブックを作り、saveメソッドで名前を付けて保存。 ところで、希望の動作と実際のコードがかみ合ってないのはなぜでしょう?「シート名を取得する」で一切シート名に触れてないとか…… もうちょっと基本から勉強することをお勧めしますよ。 (1) >bb = ActiveWorkbook.Name >Cells(2, "O").Value = ActiveWorkbook.Name >Cells(3, "O").Value = ActiveWorkbook.Name なぜ変数に入れておきながらわざわざ2回とも取得しなおしてる? bb = ActiveWorkbook.Name [O2:O3].Value = bb (2) >Range("O2").Formula = Replace(bb, "b.CSV", "k.CSV") >kb = Range("O2") 値を入れているのになぜFormulaプロパティ? そしてなぜセルに値を入れてから取得? kb = Replace(bb, "b.CSV", "k.CSV") [O2].Value = kb (3)は上記のとおりなので割愛。 >Dim bbs As String >bbs = Left(bb, 10) >Cells(4, "O").Value = bbs >Dim kbs As String >kbs = Left(kb, 10) >Cells(5, "O").Value = kbs これは何? (4)(5) With WorkBooks("1234567b.CSV") .[D1] = WorkBooks(kb).[A1] .[E1] = WorkBooks(kb).[F1] End With ところで、ここまで書いておきながらいまさら気づいたけど、今の質問者さんのレベルで「CSVをExcelで開いてVBAで編集」なんてことは無謀ですよ。ほかの方法を考えたほうが多分早い。

tonkotu1101
質問者

お礼

最近VBAをいじり始めたばかりの初心者でして、独学でゆっくりと勉強している最中でございます。 こうなれば便利だな。こういうのを作ってみたいなと思い、その都度ちょっとずつ勉強していってます。 シート名はブック名から拡張子を除いた文字列だった為、使わないセルにブック1の名前、ブック2の名前とそれぞれ必要なシート名を挿入して、そこの文字から参照して開けないか?という方法で考えました。 えと誤解があったようですので、新規ファイルではなくCSV出力した時にできた複数のブックを参考にしたいという事です。 何分初心者ですので、わかりにく説明でございました。ご容赦ください。