Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从excel文件中读取单元格值_Excel_Vba - Fatal编程技术网

如何从excel文件中读取单元格值

如何从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

我有一个文件夹,每个员工都有一个excel工作簿(工作簿中只有一个工作表)。我想打开每个员工工作簿,读取$A$1中的单元格,然后写入另一个工作表。最后,我将有一个工作表,其中将包含工作簿中的所有$a$1单元格。我写了下面的代码,但我指出的行由于某种原因不起作用。你能建议怎么做吗?谢谢

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”).值。在声明要复制的工作表时,我仍然会遇到一些错误。我会努力的。非常感谢你们两位的帮助!