我有一堆(~100)Excel 文件,外加一个“主”Excel 文件,用于从所有其他 Excel 文件中收集数据。
根据各种网站,我已经找到了如何在公式中引用其他工作簿中的单元格和单元格区域的方法。一般来说,格式应该是这样的:
path[workbook.xlsx]'worksheet'!cell
现在,总是把绝对路径放在那里已经相当麻烦了(我的所有 Excel 文件都位于同一个目录中,如果我决定移动或复制它们,我更喜欢使用相对路径)。
然而,真正让我恼火的是,我无法输入任何具有这种跨工作簿引用的公式,而必须经过两个(!)UI 对话框:
- 首先,会显示一条关于启用链接的警告消息。当然,这显然可以通过某种方式禁用,即使只是全局禁用,而不是针对我的特定文件。
- 然后,显示一个“打开文件”对话框,我必须再次选择引用的工作簿。
这使得从一行复制到另一行变得非常麻烦。
有没有办法可以特别防止再次提示选择文件?
答案1
最好的解决方案是使用 Python 来处理 Excel 文件。这更简单,而且你会有很多示例。
我个人使用过 Excel 和 Python,但发现 Python+Pandas 是最好的选择。请参阅此处快速入门:https://www.dataquest.io/blog/excel-and-pandas/
答案2
GetObject
您可以使用“主”工作簿文件中包含的代码调用静默打开(然后关闭)每个从属工作簿文件。
Dim myWorkbook As Workbook
Set myWorkbook = GetObject("C:\user\....\myFile.xlsx")
'...Processing to get required values from myFile.xlsx ...
myWorkbook.Close
为了避免因多次打开而陷入混乱myFile.xlsx
,我建议检查Application.Workbooks
集合以确保当前打开的工作簿中没有一个"myFile.xlsx"
与受调用的工作簿文件具有相同的文件名(上文)GetObject
。在调用之前执行此检查GetObject
。
将代码从 GetObject
到Workbook.Close
调用包装成一个循环,以读取一系列从属文件。
的参数GetObject
当然可以采用连接字符串变量的形式,例如,strPath & strFilename
这应该可以为您提供所需的灵活性。