【问题标题】:VBA to open Excel file based on cell value WITHIN that fileVBA根据该文件内的单元格值打开Excel文件
【发布时间】:2021-04-20 15:28:46
【问题描述】:

我一直在网上寻找这个问题的答案。我看到许多关于基于不在该文件中的单元格值打开 excel 文件的博客和帖子。

我的问题:是否可以根据我要打开的文件中的单元格值打开文件?另一种说法是:VBA 是否可以在文件中搜索未打开的单元格值,然后在找到该单元格值时打开该文件?

进一步说明:

我将系统中的报告保存到一个文件夹中,并且这些保存的文件具有一个通用名称(报告、报告 (1)、报告 (2)、报告 (3).....)。但是,报告中的数据是不同的。它们都有一个共同的单元格(单元格 A7),用于指定报告的用途。我想使用 VBA 代码根据单元格 A7 中的值打开其中一个文件。这甚至可能吗?

在此先感谢您的任何指导。

【问题讨论】:

  • 谢谢@TimWilliams
  • 您可以考虑使用反映内容的文件名,即使它以“报告”开头。
  • 是的。这是我试图避免的一个额外步骤。但是,在查看 Tim 的链接时,我认为这项任务超出了我的知识范围。我不知道如何在我拥有的当前代码中使用“Ret”字符串。
  • 文件夹中所有文件通用的特定工作表上是否为 A7?

标签: excel vba getfiles


【解决方案1】:

如果您知道工作表名称,可以使用ExecuteExcel4Macro。如果不知道工作表名称,那么您可以使用 ADO 先获取它(这里更容易,因为只有一张工作表)

例子:

Sub Tester()
    
    Const fldr As String = "C:\Excel\Temp\"
    Dim f, v
    
    f = Dir(fldr & "*.xlsx")
    'loop over all files in folder
    Do While Len(f) > 0
        'passing empty string for sheetname, since we don't know it...
        v = ReadCell(fldr, f, "", Range("A7").Address(True, True, xlR1C1))
        Debug.Print f, v
        f = Dir
    Loop

End Sub

'Read a cell value given a workbook path, name, optional sheetname,
'  and cell address (R1C1 format)
Function ReadCell(fPath, wbName, wsName, addr)
    Const adSchemaTables = 20
    Dim cn, conStr, rs
    
    If Len(wsName) = 0 Then
        'sheet name is not known, so find the first name using ADO
        conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & fPath & wbName & "';" & _
                 "Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;"";"
        Set cn = CreateObject("ADODB.connection")
        cn.Open conStr
        Set rs = cn.openschema(adSchemaTables)
        wsName = Replace(rs("TABLE_NAME").Value, "$", "")
        rs.Close
        cn.Close
    End If
    
    ReadCell = ExecuteExcel4Macro("'" & fPath & "[" & wbName & "]" & _
                                  wsName & "'!" & addr)
    
End Function

【讨论】:

  • 我已经尝试了代码。我在“Set rs = cn.openschema(adSchemaTables)”上收到错误消息。我也收到 ExecuteExcel4Macro 编码错误。错误 2023?
  • “一个错误”并不是对运行代码时发生的情况的非常有用的描述。如果您需要帮助来解决这个问题,那么您需要提供更多信息,例如您看到的什么错误。您正在使用的文件的格式是什么? (xls/xlsx/?)
  • 对不起。在本地窗口中:ReadCell 返回错误 2023。此代码将查找的文件类型是 xls。我已经修改了“测试器”子 (f) 以正确反映它。我在函数中没有看到任何与文件类型相关的内容。
  • cn.openschema 出现的错误文本是什么?您可以共享您的文件之一吗?有时“excel”导出实际上不是 Excel 格式,但有时是带有 xls 扩展名的 HTML...
  • 该文件是一个会计分类帐。除非绝对必要,否则我宁愿不分享。你是对的。它是一个带有 xls 扩展名的 HTML。这有什么改变吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多