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

时间:2012-10-29 14:16:48

标签: excel-vba vba excel

我有一个文件夹,每个员工都有一个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

3 个答案:

答案 0 :(得分:2)

Brad确实有一点意见,但我认为你的错误更可能是由于缺少指定的工作表 - 尝试使用它:

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

而不是

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

但是,您也应该考虑使用Brads建议;)

有些人可能会建议使用动态解决方案来选择工作表。我没有使用过,因为你明确说过,只会有一个工作表。但无论如何,您当然可以将其设置为动态或使用工作表的实际名称而不是1 - 无论您的需求是什么。

答案 1 :(得分:0)

您需要完全限定范围参考。由于您引用了两个工作簿,因此无法使用cells(i,2)之类的术语,因为它默认引用通常不是您想要的活动工作簿,在这种情况下尤其是当您使用{{1}打开新文件时它变成了活跃的工作簿。

在日常工作开始时尝试这样的事情

Set currentWkbk = Excel.Workbooks.Open(FOLDER & fileName)

然后像

一样使用它
Dim destWorksheet as Worksheet
Set destWorksheet = Thisworkbook.Sheets("Name of sheet")

答案 2 :(得分:0)

我遇到了一个新挑战,我们收到了100个excel文件,在单元格A3:A3中的文件中有文件名的请求者。 因此,我只需要为特定的请求者加载数据,数据就从单元格A35中的文件开始。

enter image description here

我现在为该循环中的每个循环创建了一个,我将文件名和工作表名称保存到变量中,并在从变量中读取数据时使用该变量。 现在,我创建了另一个变量,并在表达式中使用了语法:“ SELECT” +“ [” + @ [User :: SheetName] +“ A3:A3]” +“。F1” +“ AS COL1 FROM” +“ [“ + @ [User :: SheetName] +” A3:A3]“

enter image description here

现在设置ResultSet = Single Row并将结果集分配给另一个变量P_id。 现在在优先约束中,我们将变量等同于变量,如果值匹配,它将通过流程,否则我们可以根据以下条件移动或删除该文件:

enter image description here