- ベストアンサー
Excel VBA実行エラー1004の対処方法とは?
- Excel VBAを使用してアクティブブックの名前を取得し、別のブックを開く際にエラー1004が発生しています。
- エラー1004の原因は、開こうとしているファイルが存在しないか、アクセス権限がないことです。
- ファイルが存在し、アクセス権限もあるのにエラーが発生する場合は、ファイル名の指定方法やパスの正確さを確認してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Replece関数の文字比較がバイナリーで行われている為、変換元ファイルは既にオープン なのでエラーになります。 テキストモード指定にすれば大文字・小文字関係なしの比較になり、変換できると思います のでお試しください。 Range("b2").Formula = Replace(bb, "b.CSV", "k.CSV", , , vbTextCompare)
その他の回答 (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で編集」なんてことは無謀ですよ。ほかの方法を考えたほうが多分早い。
お礼
最近VBAをいじり始めたばかりの初心者でして、独学でゆっくりと勉強している最中でございます。 こうなれば便利だな。こういうのを作ってみたいなと思い、その都度ちょっとずつ勉強していってます。 シート名はブック名から拡張子を除いた文字列だった為、使わないセルにブック1の名前、ブック2の名前とそれぞれ必要なシート名を挿入して、そこの文字から参照して開けないか?という方法で考えました。 えと誤解があったようですので、新規ファイルではなくCSV出力した時にできた複数のブックを参考にしたいという事です。 何分初心者ですので、わかりにく説明でございました。ご容赦ください。
お礼
教えていただいた方法でできました。ありがとうございます。 またもう一つChDriveとChdirを指定する事でできました。←他人は使用できない・・・ ですのでとても助かりました。ありがとうございました。