web-dev-qa-db-ja.com

VBAコードを使用してデータをコピーして貼り付ける

スプレッドシートにボタンがあり、このボタンを押すと、ユーザーがファイルを開き、スプレッドシート「データ」の列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
13
spookymodem

PasteSpecialメソッドを使用します。

sht.Columns("A:G").Copy
Range("A1").PasteSpecial Paste:=xlPasteValues

しかし、大きな問題は、ActiveSheetを「データ」に変更し、元に戻さないことです。私のコードのように、アクティブ化と選択を行う必要はありません(これは、コピー先のシートにボタンがあることを前提としています)。

21
Lance Roberts

「だから、この議論から、これがコードになるはずだと思っています。

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。

1
D1g1t4Lnrg