1つだけ過去を変えられるとしたら?

(1)アクティブブックの名前を取得してセルO2に貼り付けた。ex. 1234567b.CSV

(2)VBAを使って1234567k.CSV におきかえた。

(3)(2)のセルに入力された内容でブックを開きたいが、エラー1004が出て開けない。

(4)開けたとして、そのブックのA1セルを 元のブックをアクティブにして D1に 貼り付けたい。

(5)またさっきのブックに戻ってF1セルを 元のブックをアクティブにして E1セルに貼り付けたい。

というようなVBAを組みたいと思っています。
現在(1)(2)はできましたが(3)でエラーが出たため止まっていますし、その後もわかりません。

Dim bb As String
Dim kb As String


bb = ActiveWorkbook.Name
Cells(2, "O").Value = ActiveWorkbook.Name
Cells(3, "O").Value = ActiveWorkbook.Name

Range("O2").Formula = Replace(bb, "b.CSV", "k.CSV")
kb = Range("O2")


'シート名を取得する

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



'コピーして貼り付ける
kbn = Cells(2, 15)
Workbooks.Open Filename:=kbn
Range("F1").Select
Range("F1").Copy

として作ってるんですが、
Workbooks.Open Filename:=kbn
でエラーが出てブックが開けません。
ご指導お願いします。

A 回答 (2件)

Replece関数の文字比較がバイナリーで行われている為、変換元ファイルは既にオープン


なのでエラーになります。
テキストモード指定にすれば大文字・小文字関係なしの比較になり、変換できると思います
のでお試しください。

Range("b2").Formula = Replace(bb, "b.CSV", "k.CSV", , , vbTextCompare)
    • good
    • 0
この回答へのお礼

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

ですのでとても助かりました。ありがとうございました。

お礼日時:2011/12/27 08:43

だって


>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で編集」なんてことは無謀ですよ。ほかの方法を考えたほうが多分早い。
    • good
    • 0
この回答へのお礼

最近VBAをいじり始めたばかりの初心者でして、独学でゆっくりと勉強している最中でございます。

こうなれば便利だな。こういうのを作ってみたいなと思い、その都度ちょっとずつ勉強していってます。

シート名はブック名から拡張子を除いた文字列だった為、使わないセルにブック1の名前、ブック2の名前とそれぞれ必要なシート名を挿入して、そこの文字から参照して開けないか?という方法で考えました。

えと誤解があったようですので、新規ファイルではなくCSV出力した時にできた複数のブックを参考にしたいという事です。

何分初心者ですので、わかりにく説明でございました。ご容赦ください。

お礼日時:2011/12/27 08:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!