如何解决VBA根据该文件中的单元格值打开Excel文件
我一直在网上寻找这个问题的答案。我看到很多关于根据不在该文件中的单元格值打开 excel 文件的博客和帖子。
我的问题:是否可以根据我尝试打开的文件中的单元格值打开文件?另一种表述方式:VBA 能否在未打开的文件中搜索单元格值,然后在找到该单元格值时打开该文件?
进一步说明:
我将系统中的报告保存到一个文件夹中,并且这些正在保存的文件具有一个通用名称(报告、报告 (1)、报告 (2)、报告 (3).....)。但是,报告中的数据是不同的。它们都有一个共同的单元格(单元格 A7),用于指定报告的用途。我想使用 VBA 代码根据单元格 A7 中的值打开这些文件之一。这甚至可能吗?
在此先感谢您的指导。
解决方法
如果您知道工作表名称,则可以使用 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。