2012-10-29 113 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进行复制时,我仍然遇到一些错误。我会在这方面努力。非常感谢您的帮助! –

相关问题