2012-10-29 4 views
2

각 직원마다 하나의 Excel 통합 문서가 포함 된 폴더가 있습니다 (통합 문서에 하나의 워크 시트 만 있음). 직원 워크 북을 열어 $ A $ 1로 셀을 읽고 다른 워크 시트에 씁니다. 궁극적으로, 각 통합 문서의 모든 $ A $ 1 셀을 포함하는 워크 시트를 갖게됩니다. 다음 코드를 작성했지만 표시된 줄은 어떤 이유로 작동하지 않습니다. 이 방법을 제안 할 수 있습니까? 감사합니다Excel 파일에서 셀 값을 읽는 방법

Private Sub CommandButton1_Click() 
Const FOLDER As String = "c:\Junk\Employee Files\" 

On Error GoTo ErrorHandler 

Dim i As Integer 
i = 0 

Dim fileName As String 

fileName = Dir(FOLDER, vbDirectory) 
    Do While Len(fileName) > 0 

    If Right$(fileName, 4) = "xlsx" Then 
     i = i + 1 

     Dim currentWkbk As Excel.Workbook 
     Set currentWkbk = Excel.Workbooks.Open(FOLDER & fileName) 
     Cells(i, 1) = "Employee " & 1 
     'The line above works perfectly 
     Cells(i, 2) = currentWkbk.Range("A1").Value 
     'The line doesn't work. above works perfectly 
    End If 
    fileName = Dir 
    Loop 

ProgramExit: 
    Exit Sub 
ErrorHandler: 
    MsgBox Err.Number & " - " & Err.Description 
    Resume ProgramExit 

End Sub 

답변

0

범위 참조를 완전하게 한정해야합니다. 두 개의 통합 문서를 참조하고 있기 때문에 cells(i,2)과 같은 용어를 사용할 수 없습니다. 활성 문서를 참조하는 것이 기본값이며 보통이 경우에는 Set currentWkbk = Excel.Workbooks.Open(FOLDER & fileName)이라는 새 파일을 열 때 활성 통합 문서가되므로 특히 유용합니다.

처럼 사용하는 그런 일상

Dim destWorksheet as Worksheet 
Set destWorksheet = Thisworkbook.Sheets("Name of sheet") 

의 시작 부분에 대신 이런 식으로 뭔가를 시도

If Right$(fileName, 4) = "xlsx" Then 
    i = i + 1 

    Dim currentWkbk As Excel.Workbook 
    Set currentWkbk = Excel.Workbooks.Open(FOLDER & fileName) 
    destWorksheet.Cells(i, 1) = "Employee " & 1 
    'The line above works perfectly 
    destWorksheet.Cells(i, 2) = currentWkbk.Range("A1").Value 
    'The line doesn't work. above works perfectly 
End If 
2

브래드 포인트를 가지고,하지만 난 당신의 오류로 인해 가능성이 높습니다 생각 지정된 워크 시트가 부족합니다. 다음을 사용하십시오.

Cells(i, 2) = currentWkbk.worksheets(1).Range("A1").Value 

Cells(i, 2) = currentWkbk.Range("A1").Value 

그러나, 당신은 너무 Brads 제안을 사용하는 방법에 대해 생각해야한다)

일부 워크 시트 선택을위한 동적 솔루션을 사용하는 것이 좋습니다 수 있습니다. 당신이 명시 적으로 말했기 때문에 나는 하나를 사용하지 않았습니다. 단지 하나의 워크 시트 만있을 것입니다. 그러나 상관없이, 당신은 물론 그것을 동적으로 만들거나 1 대신에 시트의 실제 이름을 사용할 수 있습니다 - 당신의 필요에 맞는.

+0

+1, 맞아. 통합 문서에는 .Range가 없습니다. –

+0

제안 해 주셔서 감사합니다. 참조를 워크 시트에 추가하라는 제안은 완벽하게 작동했습니다. 셀 (i, 2) = 현재 Wkbk.worksheets (1). 범위 ("A1"). 값. 복사 할 destWorksheet를 선언 할 때 여전히 오류가 발생합니다. 나는 이것에 대해 연구 할 것이다. 도움을 많이 주셔서 감사합니다! –

관련 문제