2

我有一个文件夹,其中包含每个员工的一个 Excel 工作簿(工作簿中只有一个工作表)。我想打开每个员工工作簿并读取 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
4

3 回答 3

2

布拉德确实有一点,但我认为您的错误更有可能是由于缺少指定的工作表 - 尝试使用这个:

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

而不是这个

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

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

有些人可能会建议对工作表选择使用动态解决方案。我没有使用一个,因为您明确说过,只有一个工作表。但无论如何,您当然可以使其动态化或使用工作表的实际名称来代替1- 任何适合您需要的名称。

于 2012-10-29T14:26:18.913 回答
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
于 2012-10-29T14:22:48.710 回答
0

我遇到了一个新的挑战,我们收到了 100 个 excel 文件,在单元格 A3:A3 的文件中有文件名请求者。所以我必须只为特定的请求者加载数据,并且数据从 Cell A35 的文件开始。

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

于 2019-09-13T05:21:12.420 回答