Vba 我正在尝试将多个工作簿中的值复制到一个工作表中

Vba 我正在尝试将多个工作簿中的值复制到一个工作表中,vba,excel,Vba,Excel,我试图使用宏将一个工作簿中一个工作表中的多个单元格复制到主工作表中。我使用记录工具创建了一个宏,但是当我尝试在不同的工作簿中运行它时,代码的第一部分适用于不同的工作簿,而其他部分引用回原始工作表。我看到宏一直在激活特定窗口(“Vincent…”),我想知道如何将所选工作表定义为变量,从而使用该变量执行其余的激活 Range("F4:F14").Select Selection.Copy Windows("Combined Spreadsheet.xlsx").Activate Range("B"

我试图使用宏将一个工作簿中一个工作表中的多个单元格复制到主工作表中。我使用记录工具创建了一个宏,但是当我尝试在不同的工作簿中运行它时,代码的第一部分适用于不同的工作簿,而其他部分引用回原始工作表。我看到宏一直在激活特定窗口(“Vincent…”),我想知道如何将所选工作表定义为变量,从而使用该变量执行其余的激活

Range("F4:F14").Select
Selection.Copy
Windows("Combined Spreadsheet.xlsx").Activate
Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
    , Transpose:=True
Windows("VincentCAIN107_Intra1_VD1_Rudd.xlsx").Activate
Range("H4:H14").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Combined Spreadsheet.xlsx").Activate
Range("L" & Rows.Count).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
    , Transpose:=True
Windows("VincentCAIN107_Intra1_VD1_Rudd.xlsx").Activate
Range("N4:N14").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Combined Spreadsheet.xlsx").Activate
Range("V" & Rows.Count).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
    , Transpose:=True
Windows("VincentCAIN107_Intra1_VD1_Rudd.xlsx").Activate
Range("R4:R14").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Combined Spreadsheet.xlsx").Activate
Range("AF" & Rows.Count).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
    , Transpose:=True
Windows("VincentCAIN107_Intra1_VD1_Rudd.xlsx").Activate
Range("S4:S14").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Combined Spreadsheet.xlsx").Activate
Range("AP" & Rows.Count).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=True _
    , Transpose:=True

在宏的顶部声明一个字符串

DIM BookName As String
然后给它指定书名

BookName = "VincentCAIN107_Intra1_VD1_Rudd.xlsx"
然后您可以将其与
Windows
方法一起使用

Windows(BookName).Activate
为了简化代码,请添加一个函数来处理给定正确参数的复制

Sub CopyCells(Book1 As String, Book2 As String, RngSrc As String, ColumnDest As String)
    Windows(Book1).Activate  
    Range(RngSrc).Select     
    Selection.Copy
    Windows(Book2).Activate
    Range(ColumnDest & Rows.Count).End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial _
        Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub
使用此函数将使源代码简化为

Sub CopyWorkbooks()
    Dim Book1 As String
    Dim Book2 As String

    Book1 = "VincentCAIN107_Intra1_VD1_Rudd.xlsx"
    Book2 = "Combined Spreadsheet.xlsx"

    Call CopyCells(Book1, Book2, "F4:F14", "B")
    Call CopyCells(Book1, Book2, "H4:H14", "L")
    Call CopyCells(Book1, Book2, "N4:N14", "V")
    Call CopyCells(Book1, Book2, "R4:R14", "AF")
    Call CopyCells(Book1, Book2, "S4:S14", "AP")
End Sub

在宏的顶部声明一个字符串

DIM BookName As String
然后给它指定书名

BookName = "VincentCAIN107_Intra1_VD1_Rudd.xlsx"
然后您可以将其与
Windows
方法一起使用

Windows(BookName).Activate
为了简化代码,请添加一个函数来处理给定正确参数的复制

Sub CopyCells(Book1 As String, Book2 As String, RngSrc As String, ColumnDest As String)
    Windows(Book1).Activate  
    Range(RngSrc).Select     
    Selection.Copy
    Windows(Book2).Activate
    Range(ColumnDest & Rows.Count).End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial _
        Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub
使用此函数将使源代码简化为

Sub CopyWorkbooks()
    Dim Book1 As String
    Dim Book2 As String

    Book1 = "VincentCAIN107_Intra1_VD1_Rudd.xlsx"
    Book2 = "Combined Spreadsheet.xlsx"

    Call CopyCells(Book1, Book2, "F4:F14", "B")
    Call CopyCells(Book1, Book2, "H4:H14", "L")
    Call CopyCells(Book1, Book2, "N4:N14", "V")
    Call CopyCells(Book1, Book2, "R4:R14", "AF")
    Call CopyCells(Book1, Book2, "S4:S14", "AP")
End Sub

在宏的顶部声明一个字符串

DIM BookName As String
然后给它指定书名

BookName = "VincentCAIN107_Intra1_VD1_Rudd.xlsx"
然后您可以将其与
Windows
方法一起使用

Windows(BookName).Activate
为了简化代码,请添加一个函数来处理给定正确参数的复制

Sub CopyCells(Book1 As String, Book2 As String, RngSrc As String, ColumnDest As String)
    Windows(Book1).Activate  
    Range(RngSrc).Select     
    Selection.Copy
    Windows(Book2).Activate
    Range(ColumnDest & Rows.Count).End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial _
        Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub
使用此函数将使源代码简化为

Sub CopyWorkbooks()
    Dim Book1 As String
    Dim Book2 As String

    Book1 = "VincentCAIN107_Intra1_VD1_Rudd.xlsx"
    Book2 = "Combined Spreadsheet.xlsx"

    Call CopyCells(Book1, Book2, "F4:F14", "B")
    Call CopyCells(Book1, Book2, "H4:H14", "L")
    Call CopyCells(Book1, Book2, "N4:N14", "V")
    Call CopyCells(Book1, Book2, "R4:R14", "AF")
    Call CopyCells(Book1, Book2, "S4:S14", "AP")
End Sub

在宏的顶部声明一个字符串

DIM BookName As String
然后给它指定书名

BookName = "VincentCAIN107_Intra1_VD1_Rudd.xlsx"
然后您可以将其与
Windows
方法一起使用

Windows(BookName).Activate
为了简化代码,请添加一个函数来处理给定正确参数的复制

Sub CopyCells(Book1 As String, Book2 As String, RngSrc As String, ColumnDest As String)
    Windows(Book1).Activate  
    Range(RngSrc).Select     
    Selection.Copy
    Windows(Book2).Activate
    Range(ColumnDest & Rows.Count).End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial _
        Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub
使用此函数将使源代码简化为

Sub CopyWorkbooks()
    Dim Book1 As String
    Dim Book2 As String

    Book1 = "VincentCAIN107_Intra1_VD1_Rudd.xlsx"
    Book2 = "Combined Spreadsheet.xlsx"

    Call CopyCells(Book1, Book2, "F4:F14", "B")
    Call CopyCells(Book1, Book2, "H4:H14", "L")
    Call CopyCells(Book1, Book2, "N4:N14", "V")
    Call CopyCells(Book1, Book2, "R4:R14", "AF")
    Call CopyCells(Book1, Book2, "S4:S14", "AP")
End Sub

我想你可以稍微整理一下你的代码。以下是一个例子:

Sub JoinArray()
    Dim master As Worksheet, source As Worksheet, copyCols() As Variant, pasteCols() As Variant, i As Integer

    Set master = Workbooks("Combined Spreadsheet").Worksheets(1)
    Set source = Workbooks("VincentCAIN107_Intra1_VD1_Rudd").Worksheets(1)
    copyCols = Array("F", "H", "N", "R", "S")
    pasteCols = Array("B", "L", "V", "AF", "AP")

    For i = 0 To UBound(copyCols)
        source.Range(copyCols(i) & "4:" & copyCols(i) & 14).Copy
        master.Range(pasteCols(i) & master.Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Next i
End Sub
注:

  • 预先设置对工作表的引用
  • 如果知道要从中复制和粘贴到的列,可以在数组中定义它们以供参考

  • 我想你可以稍微整理一下你的代码。以下是一个例子:

    Sub JoinArray()
        Dim master As Worksheet, source As Worksheet, copyCols() As Variant, pasteCols() As Variant, i As Integer
    
        Set master = Workbooks("Combined Spreadsheet").Worksheets(1)
        Set source = Workbooks("VincentCAIN107_Intra1_VD1_Rudd").Worksheets(1)
        copyCols = Array("F", "H", "N", "R", "S")
        pasteCols = Array("B", "L", "V", "AF", "AP")
    
        For i = 0 To UBound(copyCols)
            source.Range(copyCols(i) & "4:" & copyCols(i) & 14).Copy
            master.Range(pasteCols(i) & master.Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        Next i
    End Sub
    
    注:

  • 预先设置对工作表的引用
  • 如果知道要从中复制和粘贴到的列,可以在数组中定义它们以供参考

  • 我想你可以稍微整理一下你的代码。以下是一个例子:

    Sub JoinArray()
        Dim master As Worksheet, source As Worksheet, copyCols() As Variant, pasteCols() As Variant, i As Integer
    
        Set master = Workbooks("Combined Spreadsheet").Worksheets(1)
        Set source = Workbooks("VincentCAIN107_Intra1_VD1_Rudd").Worksheets(1)
        copyCols = Array("F", "H", "N", "R", "S")
        pasteCols = Array("B", "L", "V", "AF", "AP")
    
        For i = 0 To UBound(copyCols)
            source.Range(copyCols(i) & "4:" & copyCols(i) & 14).Copy
            master.Range(pasteCols(i) & master.Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        Next i
    End Sub
    
    注:

  • 预先设置对工作表的引用
  • 如果知道要从中复制和粘贴到的列,可以在数组中定义它们以供参考

  • 我想你可以稍微整理一下你的代码。以下是一个例子:

    Sub JoinArray()
        Dim master As Worksheet, source As Worksheet, copyCols() As Variant, pasteCols() As Variant, i As Integer
    
        Set master = Workbooks("Combined Spreadsheet").Worksheets(1)
        Set source = Workbooks("VincentCAIN107_Intra1_VD1_Rudd").Worksheets(1)
        copyCols = Array("F", "H", "N", "R", "S")
        pasteCols = Array("B", "L", "V", "AF", "AP")
    
        For i = 0 To UBound(copyCols)
            source.Range(copyCols(i) & "4:" & copyCols(i) & 14).Copy
            master.Range(pasteCols(i) & master.Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        Next i
    End Sub
    
    注:

  • 预先设置对工作表的引用
  • 如果知道要从中复制和粘贴到的列,可以在数组中定义它们以供参考

  • 用于将变量设置为工作簿:(示例)

    Option Explicit'这强制声明变量(,总是好的)
    亚MySub
    Dim Wb作为工作簿,MAIN Wb作为工作簿
    设置MainWB=Workbooks(“Combined Spreadsheet.xlsx”)“假设它已打开
    清楚
    如果工作簿尚未打开,它将抛出一个错误
    
    设置Wb=Workbooks(“WhateverName.xls”)以将变量设置为工作簿:(示例)

    Option Explicit'这强制声明变量(,总是好的)
    亚MySub
    Dim Wb作为工作簿,MAIN Wb作为工作簿
    设置MainWB=Workbooks(“Combined Spreadsheet.xlsx”)“假设它已打开
    清楚
    如果工作簿尚未打开,它将抛出一个错误
    
    设置Wb=Workbooks(“WhateverName.xls”)以将变量设置为工作簿:(示例)

    Option Explicit'这强制声明变量(,总是好的)
    亚MySub
    Dim Wb作为工作簿,MAIN Wb作为工作簿
    设置MainWB=Workbooks(“Combined Spreadsheet.xlsx”)“假设它已打开
    清楚
    如果工作簿尚未打开,它将抛出一个错误
    
    设置Wb=Workbooks(“WhateverName.xls”)以将变量设置为工作簿:(示例)

    Option Explicit'这强制声明变量(,总是好的)
    亚MySub
    Dim Wb作为工作簿,MAIN Wb作为工作簿
    设置MainWB=Workbooks(“Combined Spreadsheet.xlsx”)“假设它已打开
    清楚
    如果工作簿尚未打开,它将抛出一个错误
    
    Set Wb=Workbooks(“WhateverName.xls”)'您好,我不太明白如何实现这段代码,sub copycell(book1..)是后来在sub copycell()中使用的函数吗?因此,两者都必须放在窗口中,这只是一个函数调用另一个函数。我已经重命名了其中一个以帮助解决任何混淆。您好,我真的不知道如何实现此代码,sub copycell(book1..)是后来在sub copycell()中使用的函数吗?因此,两者都必须放在窗口中,这只是一个函数调用另一个函数。我已经重命名了其中一个以帮助解决任何混淆。您好,我真的不知道如何实现此代码,sub copycell(book1..)是后来在sub copycell()中使用的函数吗?因此,两者都必须放在窗口中,这只是一个函数调用另一个函数。我已经重命名了其中一个以帮助解决任何混淆。您好,我真的不知道如何实现此代码,sub copycell(book1..)是后来在sub copycell()中使用的函数吗?因此,两者都必须放在窗口中,这只是一个函数调用另一个函数。我已经重新命名了其中一个,以帮助解决任何困惑。太好了!这几乎奏效了。最近我尝试了一种定义范围的方法,但我不确定如何使用粘贴功能。我想知道在这段代码中哪里可以实现特殊的粘贴选项?试着保留
    源.Range(copyCols(I)&“4:”©Cols(I)&14)。复制
    行,删除
    目的地:=…
    代码,然后在下面添加新行:
    master.Range(pasteCols(I)&master.Rows.Count)。结束(xlUp)。偏移量(1,0).Paste特殊粘贴:=xlAll,操作:=xlNone,skipblank:=F