2017-04-13 1 views
0

문제가 있습니다. 세 개의 개별 워크 시트 사용 (원본 1, 원본 2, 템플릿) 원본 파일에서 데이터를 가져 와서 열에 따라 템플릿에 붙여 넣어야합니다. 이름. 즉, 소스 1의 첫 번째 세 열은 템플리트의 이름과 일치하고 템플리트의 네 번째 행은 네 번째 행과 소스 2의 네 번째 열이 일치합니다.Excel VBA - 열 이름에 따라 데이터 복사

여기까지 가야 할 부분입니다 (불완전합니다). 다른 스레드 검사 예제의 "파생"을 만들었지 만 여전히 작동하지 못합니다. 또는 측면에서 너무 "모호한"(이것은 내 첫 번째 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)를 얻을 수 있지만 하나 너무 복잡하다 그 그들은, O, X는 변수 이름으로 b를 ... 어떤 도움이 크게 감사합니다 :) 사용

답변

1

변경이에 오류가있는 라인 :

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

+0

이 답변 주셔서 감사합니다! – Powdertrail