スプレッドシートにボタンがあり、このボタンを押すと、ユーザーがファイルを開き、スプレッドシート「データ」の列A〜Gをコピーし、現在のシートのそれらの列からデータを貼り付けることができます。
コードに論理エラーがあります。実行されますが、選択範囲を間違った場所に貼り付けます。
2つのワークブックの参照に問題があります。
ここに私のコードがあります:
Sub Button1_Click()
Dim Excel As Excel.Application
Dim wb As Excel.Workbook
Dim sht As Excel.Worksheet
Dim f As Object
Set f = Application.FileDialog(3)
f.AllowMultiSelect = False
f.Show
Set Excel = CreateObject("Excel.Application")
Set wb = Excel.Workbooks.Open(f.SelectedItems(1))
Set sht = wb.Worksheets("Data")
sht.Activate
sht.Columns("A:G").Select
Selection.Copy
Range("A1").Select
ActiveSheet.Paste
wb.Close
End Sub
PasteSpecialメソッドを使用します。
sht.Columns("A:G").Copy
Range("A1").PasteSpecial Paste:=xlPasteValues
しかし、大きな問題は、ActiveSheetを「データ」に変更し、元に戻さないことです。私のコードのように、アクティブ化と選択を行う必要はありません(これは、コピー先のシートにボタンがあることを前提としています)。
「だから、この議論から、これがコードになるはずだと思っています。
Sub Button1_Click()
Dim Excel As Excel.Application
Dim wb As Excel.Workbook
Dim sht As Excel.Worksheet
Dim f As Object
Set f = Application.FileDialog(3)
f.AllowMultiSelect = False
f.Show
Set Excel = CreateObject("Excel.Application")
Set wb = Excel.Workbooks.Open(f.SelectedItems(1))
Set sht = wb.Worksheets("Data")
sht.Activate
sht.Columns("A:G").Copy
Range("A1").PasteSpecial Paste:=xlPasteValues
wb.Close
End Sub
「これが正しいか、ステップを逃したかを教えてください。 THX。