2017-04-13 4 views
0

問題があります:3つのワークシート(ソース1、ソース2、テンプレート)を使用するソースファイルからデータを取り出し、列に応じてテンプレートに貼り付ける必要があります名前。 I.ソース1の最初の3つの列の名前はテンプレートの名前と一致し、テンプレートの4番目の行はソース4の4番目の行と一致します。Excel VBA - 列名に応じてデータをコピーする

これは私がこれまでに得たものです(不完全です)。 他のスレッドのチェック例の "派生"を作ったが、それでも動作させることはできない。私は近い例が多少あります)Copy_Columns内のコメント(でマークされた行に

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 

をランタイムエラー9を得るが、彼らはその用語のいずれか複雑すぎ(これは、VBAを使用して、私の最初の時間である)、またはあまりにも「あいまい」です彼らは、O、xは、変数名であるB ... すべてのヘルプは大歓迎:)使用

答えて

1

変更し、これにエラーとライン:

Set Source1 = Workbooks("Source 1").Sheets("Sheet1")

+0

は、あなたの答えをありがとう! – Powdertrail

関連する問題