Excel VBA-根据列名复制数据

Excel VBA-根据列名复制数据,excel,runtime-error,copy-paste,vba,Excel,Runtime Error,Copy Paste,Vba,我有一个问题:使用三个单独的工作表Source 1、Source 2和Template,我必须从源文件中获取数据并将其粘贴到模板上,具体取决于列名。 即,源1的前三列名称与模板上的名称匹配,模板的第四行与源2的第四行匹配 这是我到目前为止得到的,它是不完整的。 检查其他线程时,我对一个示例进行了派生,但仍然无法使其工作。我在Copy_列中用注释标记的行中得到运行时错误9 Sub MasterCopy() Open_Files Copy_Columns End Sub Sub

我有一个问题:使用三个单独的工作表Source 1、Source 2和Template,我必须从源文件中获取数据并将其粘贴到模板上,具体取决于列名。 即,源1的前三列名称与模板上的名称匹配,模板的第四行与源2的第四行匹配

这是我到目前为止得到的,它是不完整的。 检查其他线程时,我对一个示例进行了派生,但仍然无法使其工作。我在Copy_列中用注释标记的行中得到运行时错误9

Sub MasterCopy()

    Open_Files
    Copy_Columns

End Sub

Sub Open_Files()
    Application.Workbooks.Open Filename:="C:Source 1.xls"
    Application.Workbooks.Open Filename:="C:Source 2.xls"
    Application.Workbooks.Open Filename:="C:Template.xls"
End Sub

Sub Copy_Columns()

    Dim Source1 As Worksheet
    Source1 = Application.Workbooks("C:Source 1.xls").Worksheets("Sheet1") 'here is where the error appears
    Source1.Select

    Dim columnToBeCopied As Integer
    columnToBeCopied = getColumnName("Source1", "columnToBeCopied")

    Dim template As Worksheet
    template = Application.Workbooks("C:Template.xls").Worksheets("Data")
    template.Activate

    Dim columnToBePasted As Integer
    columnToBePasted = getColumnName("template", "columnToBePasted")

    Sheets("Source1").Columns(columnToBeCopied).Copy Sheets("template").Columns(columnToBePasted)

End Sub

Public Function getColumnName(ByVal sheetName As String, ByVal columnName As String)

    Dim lastColumn As Integer
    lastColumn = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Column

    Dim iterator As Integer
    iterator = 0
    While (iterator <= lastColumn)
        If (LCase(Sheets(sheetName).Range(1, iterator)) = LCase(columnName)) Then
            getColumnName = iterator
        Else: iterator = iterator + 1
        End If
    Wend
    If IsEmpty(getColumnName) Then getColumnName = 0

End Function
有一些比较接近的例子,但它们要么太复杂,这是我第一次使用VBA,要么太模糊,因为它们使用a、o、x、b作为变量名。。。
非常感谢您的帮助:

将出现错误的行更改为:


Set Source1=workbooksource 1.SheetsSheet1

谢谢您的回答!