如何从excel文件中读取单元格值
我有一个文件夹,每个员工都有一个excel工作簿(工作簿中只有一个工作表)。我想打开每个员工工作簿,读取$A$1中的单元格,然后写入另一个工作表。最后,我将有一个工作表,其中将包含工作簿中的所有$a$1单元格。我写了下面的代码,但我指出的行由于某种原因不起作用。你能建议怎么做吗?谢谢如何从excel文件中读取单元格值,excel,vba,Excel,Vba,我有一个文件夹,每个员工都有一个excel工作簿(工作簿中只有一个工作表)。我想打开每个员工工作簿,读取$A$1中的单元格,然后写入另一个工作表。最后,我将有一个工作表,其中将包含工作簿中的所有$a$1单元格。我写了下面的代码,但我指出的行由于某种原因不起作用。你能建议怎么做吗?谢谢 Private Sub CommandButton1_Click() Const FOLDER As String = "c:\Junk\Employee Files\" On Error GoTo ErrorH
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
您需要完全限定范围引用。由于您引用的是两个工作簿,因此不能使用诸如
单元格(i,2)
之类的术语,因为这默认为引用活动工作簿,而活动工作簿通常不是您想要的,在这种情况下,尤其是当您使用Set currentWkbk=Excel.workbooks.open(文件夹和文件名)打开新文件时
它成为活动工作簿
在你的日常生活开始时,试着做类似的事情
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
Brad确实有道理,但我认为您的错误更可能是由于缺少指定的工作表-尝试使用以下方法:
Cells(i, 2) = currentWkbk.worksheets(1).Range("A1").Value
而不是这个
Cells(i, 2) = currentWkbk.Range("A1").Value
但是,您也应该考虑使用Brads建议;)
有些人可能建议对工作表选择使用动态解决方案。我没有使用一个,因为您明确地说,只有一个工作表。但不管怎样,您当然可以将其动态化或使用工作表的实际名称,而不是
1
——任何适合您需要的内容。我遇到了一个新的挑战,我们收到了100个excel文件,在单元格A3:A3的文件中有文件名的请求者。
因此,我必须只加载特定请求者的数据,数据从单元格A35的文件开始
现在我已经为该循环中的每个循环创建了一个,我将文件名和工作表名保存到变量中,并在从变量读取数据时使用该变量。
现在我已经创建了另一个变量,并且在表达式中使用了以下语法:“选择“+”[“+@[User::SheetName]+”A3:A3]“+”.F1“+”作为“+”[“+@[User::SheetName]+”A3:A3]”中的COL1
现在设置ResultSet=Single行,并将结果集分配给p_id,p_id是另一个变量。
现在在优先约束中,我们将该变量相等,如果值与匹配,它将通过流,否则我们可以根据条件移动或删除该文件:
谢谢你的建议!将参考添加到工作表中的建议非常有效。单元格(i,2)=当前WKBK.工作表(1).范围(“A1”).值。在声明要复制的工作表时,我仍然会遇到一些错误。我会努力的。非常感谢你们两位的帮助!