当所有三个范围都不同于使用命令按钮的原始范围时,将三列从一个工作簿复制到另一个工作簿

Copy Three Columns from one workbook into another when all three ranges are different than the original ranges using Command Button

我正在尝试使用命令按钮将工​​作簿 1 中的 A、B 和 C 列复制到工作簿 2 中的 B、C 和 G 列,而无需打开目标工作簿。此处,WB1 的 A 列转到 B WB2 列,WB1 的 B 列转到 C WB2 列,WB1 的 C 列转到 G WB2 列。

我已经能够使用以下代码将 A 和 B 复制并粘贴到 B 和 C 中,但无法弄清楚如何在不使用不同的命令按钮的情况下将 C 放入 G 中。 我需要按钮在单击时完全更新目标工作表中的列。 这就是我处理前两列的方式:

Private Sub CommandButton1_Click()
    ActiveSheet.Range("A2:B250").Copy
    Workbooks.Open Filename:="C:\Users\og677\Desktop\N
\Matlab\VehicleList1.xlsx"
    ActiveSheet.Cells(2, 2).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, skipblanks:=False, Transpose:=False
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    Application.CutCopyMode = False
    
End Sub

我想我可能需要设置范围,所以我尝试了这样的事情,但我不知道如何设置 wb2 并且在尝试设置 wb2 时出错。

Private Sub CommandButton1_Click()
    
    Dim O As Workbook
    
    Dim wb2 As Workbook
    
    Dim ESN As Worksheet
    Dim List As Worksheet
    
    Dim I As Integer
    Dim n As Integer
    
    
    Set O = ThisWorkbook
    Set wb2 = Workbooks("C:\Users.xlsx")
    
    Set ESN = O.Sheets("ESN Regression")
    Set List = VehicleList.Sheets("Sheet1")
     
    
    n = 2
    
    For I = 2 To WorksheetFunction.CountA(O.Columns.EntireColumn(1))
    
       
        If Cells(I, "I").Value = "Yes" Then
    
            List.Cells(n, "B").Value = ESN.Cells(I, "A")
            List.Cells(n, "C").Value = ESN.Cells(I, "B")
            List.Cells(n, "G").Value = ESN.Cells(I, "C")
            
           
            n = n + 1
    
        End If
    
    Next
    
End Sub

如果可以的话,我希望能够保留我的第一次尝试,但我愿意接受任何更改。

您可以指定要粘贴的范围。 这就是我在宏中从 wbTarget 列 A 复制到 wbThis 列 B

的方式
wbTarget.Sheets("sheet1").Range("A14:A100").Copy
wbThis.Activate
wbThis.Sheets("Sheet1").Range("B14:B100").PasteSpecial Paste:=xlPasteValues

将copy/paste拆分为同一命令调用的更多步骤,以便将A和B粘贴到A和B,而将C粘贴到G

试试这个代码。

Private Sub CommandButton1_Click()
Workbooks.Open Filename:="enter file name.xlsx"
'Column A
Windows("Workbook1.xlsm").Activate
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("Workbook2.xlsx").Activate
Range("B1").Select
ActiveSheet.Paste
'Column B
Windows("Workbook1.xlsm").Activate
Range("B1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("Workbook2.xlsx").Activate
Range("C1").Select
ActiveSheet.Paste
'Column C
Windows("Workbook1.xlsm").Activate
Range("C1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("Workbook2.xlsx").Activate
Range("G1").Select
ActiveSheet.Paste
Range("A1").Select
End Sub

这是我想出的:

    Private Sub CommandButton1_Click()
ActiveSheet.Range("A2:B250").Copy
Workbooks.Open Filename:="C:\Users\og677\Desktop\N\Matlab\VehicleList.xlsx"
ActiveSheet.Cells(2, 2).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, skipblanks:=False, Transpose:=False
Application.CutCopyMode = False

ThisWorkbook.Activate
ActiveSheet.Range("C2:C250").Copy
Windows("VehicleList.xlsx").Activate
ActiveSheet.Cells(2, 7).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, skipblanks:=False, Transpose:=False
Application.CutCopyMode = False

ActiveWorkbook.Save

End Sub