2012-10-29 156 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 

但是,你應該考慮使用布拉德斯建議太;)

有些人可能會建議使用工作表選擇一個動態的解決方案。我沒有使用一個,因爲你明確地說過,只會有一個工作表。但無論如何,你當然可以使其動態或使用表的實際名稱而不是1 - 無論你的需要。

+0

+1,你說得對。工作簿沒有.Range。 –

+0

感謝您的建議!向工作表添加引用的建議完美運行。單元格(i,2)= currentWkbk.worksheets(1).Range(「A1」)。Value。聲明一個destWorksheet進行復制時,我仍然遇到一些錯誤。我會在這方面努力。非常感謝您的幫助! –

相關問題