dポイントプレゼントキャンペーン実施中!

タイトルにあるとおりダイアログボックスでcsvファイルを選択して、そのファイル内のシートをコピーして持ってくるマクロを作ってみたのですが、思っていた動きと違っています。

csvファイルは開くのですが、そのシートをコピーしておらず、どこから持ってきたのかわからないシートが挿入されてきます。

どこが間違っているかお教えいただけると幸いです。

Sub

Dim wb As Workbook
Set wb = ActiveWorkbook

Dim OpenFileName As String
OpenFileName = Application.GetOpenFileName(“Microsoft Excelブック,*.csv”)
Workbooks.Open OpenFileName

ThisWorkbook.Sheets(1).Copy After:wb.Sheets(1)

End Sub


よろしくお願いいたします。

A 回答 (3件)

ご存知のとおり、ActiveWorkbookは今開いていてアクティブになっているWorkbookを指します。



3行目に、Set wb = ActiveWorkbook とありますが、この時点でアクティブになっているのは自分(このブック)だけなので、wb の中身は自分(このブック)です。Workbooks.Open OpenFileName の後にこのコードを移動してください。

>ThisWorkbook.Sheets(1).Copy After:wb.Sheets(1)

シートをコピーするときは、左側にコピー元、右側にコピー先を指定します。また、シートの挿入位置は After: ではなく After:= で指定します。
まとめると、こうなります。

wb.Sheets(1).Copy After:=ThisWorkbook.Sheets(1)


下は修正後のコードです
---------------------------
Sub test()

Dim wb As Workbook
Dim OpenFileName As String

OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.csv")
Workbooks.Open OpenFileName

Set wb = ActiveWorkbook

wb.Sheets(1).Copy After:=ThisWorkbook.Sheets(1)

End Sub
    • good
    • 0

こんにちは



>どこから持ってきたのかわからないシートが挿入されてきます。
実行時の状況がイマイチわかりませんが、コードに記載されている通りに処理されているものと思います。

>ThisWorkbook.Sheets(1).Copy After:wb.Sheets(1)
なので、ThisWorkbook(=マクロの記述されているブック)の最初のシートが、wb(=実行時のアクティブブック)の2番目のシートとしてコピー追加されていませんか?

もしかすると、ThisWorkbookとwbは同じブックになっているかもしれませんね。
    • good
    • 0

Thisworkbookの意味を理解されていないかと

    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A