For 循环从多个工作簿的特定单元格中提取数据

问题描述 投票:0回答:1

我正在尝试访问特定文件夹中的多个不同工作簿,并从每个工作簿上的预先确定的单元格中提取数据。所有工作簿都是测试日志,因此它们的格式相同,我使用的单元 ID 也相同。

我知道您可以使用公式

='[File_Name]Sheet1'!R1C1
从该特定文件的单元格 A1 中提取日期。我找到了一个基本脚本,可以检索特定文件夹中所有文件的名称。

Dim FSO As Object
Dim Folder As Object
Dim File As Object
Dim i As Integer

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Folder = FSO.GetFolder("C:\Users\Callum\Documents\Test Logs")

For Each File In Folder.Files

    Sheets("Data").Select

    Cells(i + 1, 1) = File.Name

    i = i + 1

Next File

End Sub

计划是将两者结合起来,以便脚本检索文件名,将其保存为变量,然后使用文件名变量打印方程。理论上,这应该打印源工作簿上请求的单元格中的值,找到文件夹中的下一个文件,将其设置为文件名变量,然后重复打印过程,列出每个工作簿中单元格 A1 中的所有值文件夹。

Dim FSO As Object
Dim Folder As Object
Dim File As Object
Dim Name As String
Dim i As Integer

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Folder = FSO.GetFolder("C:\Users\Callum\Documents\Test Logs")

For Each File In Folder.Files

    Name = File.Name

    Sheets("Data").Select

    Cells(i + 1, 1) =  "='[Name]Sheet1'!R4C2"

    i = i + 1

Next File

End Sub

相反,在打印公式时似乎没有注册保存文件名的变量,因此每次运行脚本时,它都会要求您手动选择要使用的文件。

excel vba for-loop data-retrieval
1个回答
2
投票

问题:

  • VBA 不进行变量扩展。常见的方法是连接
  • 您需要完整的文件路径,而不仅仅是文件名。
  • 考虑使用与
    Name
    不同的变量名称,因为它会隐藏
    Name
    语句。但这里甚至不需要变量。
  • 最好明确说明您正在此处编写 R1C1 样式的公式:
Dim path As String
path = "C:\Users\Callum\Documents\Test Logs\" ' note the ending backslash

Set Folder = FSO.GetFolder(path)
For Each File In Folder.Files
    Dim f As String
    f = "='" & path & "[" & File.Name & "]Sheet1'!R4C2"

    ThisWorkbook.Worksheets("Data").Cells(i + 1, 1).FormulaR1C1 = f
    i = i + 1
Next File
© www.soinside.com 2019 - 2024. All rights reserved.