13

スプレッドシートにボタンがあり、押すとユーザーがファイルを開いて、スプレッドシート「データ」の列AGをコピーし、それらの列のデータを現在のシートに貼り付けることができます。

コードに論理エラーがあります。実行されますが、選択範囲が間違った場所に貼り付けられます。

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
4

2 に答える 2

21

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

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

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

于 2011-07-21T16:02:10.140 に答える
1

「それで、この議論から、私はこれがその時のコードであるべきだと思っています。

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

'これが正しいか、ステップが失敗したかを教えてください。どうも。

于 2016-01-09T06:54:24.913 に答える