- ベストアンサー
エクセルマクロ ファイル名を変更したとき
マクロ初心者です。 データファイルからシートを複写挿入するマクロです。 コピー先ファイル名を都度変更したいのですが、その場合マクロにコピー先ファイル名が入っているのでエラーになります。名前が変わっても実行できるようにするにはどうしたらよいのでしょう? なお、複写元のデータファイルは複写後に閉じます。 Workbooks.Open Filename:="データファイル.xls" Sheets("Sheet1").Copy Before:=Workbooks("コピー先ファイル名.xls").Sheets(1)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >昨日からマクロ始めたばかりで いきなり実務に結び付けたいのでしたら、「逆引き辞典」とか、「VBAマクロ集」とか買って、それをそのまま写したほうがよいです。昨日・今日、始めたばかりで、他のプログラミングの経験者でなければ、掲示板で聞いたところで、勉強以前に混乱してしまうはずです。 掲示板で聞くのは、ある程度勉強してからのほうがよいですね。勉強の仕方にもよりますが、記録マクロでは上達しません。我慢して自分で解決しようとしたほうがよいですね。人に聞く癖をつけると、いつもでも上達してきません。 掲示板で、昨日・今日始めたばかりの人に、どう教えるのも、ちょっと厳しいと思います。 ただ、私が書かなくても、誰かが解答してしまいす。 GetOpenFilename というのは、敷居が高いのですが、ファイル名を取るには、良いのです。しかし、ファイル名を取得しているだけです。 Application.Dialogs(xlDialogOpen).Show はファイルを開けるには楽なのですが、ファイル名が取れないので、後者はファイルの動きが見えていないとできません。 どちらも、昨日・今日の人には無理かなって思います。 '-------------------------------------- Sub SampleTest() Dim FileName As String Dim NewBook As Workbook FileName = Application.GetOpenFilename("Excel(*.xls),*.xls") If FileName = "False" Then Exit Sub Set NewBook = Workbooks.Open(FileName) ThisWorkbook.Worksheets("Sheet1").Copy Before:=NewBook.Worksheets(1) Set NewBook = Nothing End Sub
その他の回答 (2)
- hondamssaf
- ベストアンサー率25% (1/4)
>ホントに恥ずかしいのですが、昨日からマクロ始めたばかりで 別に恥ずかしいことではないですよ。 >コピー先ファイル名を都度変更したいのですが 「ファイルを開く」ダイアログボックスでファイルを選択して その後の処理を行う方法もあります。 [GetOpenFilenameメソッド]を調べてみてはいかがでしょうか。
補足
ありがとうございます。 [GetOpenFilenameメソッド]も知らない用語でした。調べてみると大切なことのようです。 ファイルを開いてファイル名を取得するところまではできました。 そのあと、どうしたらコピー先のファイル名に反映させられるかかがわかりません。 もう少し頑張ってみます。
- fujillin
- ベストアンサー率61% (1594/2576)
>名前が変わっても実行できるようにするにはどうしたらよいのでしょう? コピー先のファイルは開いているものとして、その名前はVBAで取得できて いるのですよね? (どれだかわからないブックにコピーはしないはずなので) >Sheets("Sheet1").Copy Before:=Workbooks("コピー先ファイル名.xls").Sheets(1) の"コピー先ファイル名.xls"の部分を、文字列変数にして、その文字列変数の値を↑の(取得できている)コピー先ファイル名にしておけば良いでしょう。 (ブックを変数で特定できていればworkbokks(~)をそのブック(変数)で指定しても同様です)
補足
早速の回答ありがとうございます。 ホントに恥ずかしいのですが、昨日からマクロ始めたばかりで 「その名前はVBAで取得できているのですよね?」 の意味がわかりませんでした。 でも、前進した気分で嬉しいです。 もう少し勉強してみます。
お礼
ありがとうございました。 この方式で完成させる事ができます。 解答を頂きながら、ご報告が遅れて申し訳ありません。 これからは自分でも勉強するよう頑張ります。 感謝、感謝です。