【发布时间】:2016-12-18 22:02:08
【问题描述】:
如何在 VBA 中使用打开文件时不会更改的唯一标识符来引用外部工作簿?当包含完整文件路径并且没有打开同名文件时,它可以正常工作。但是,当打开文件时,带有文件路径的完整表单不起作用,单独的文件名也不起作用。
我想创建一个更新 Sub 来更新所有引用,如果电子表格打开,这会自行搞砸(请参阅下面的第 2 点)。
以下是我认为应该可行的一些原因:
- 在手动链接更新菜单中似乎只有文件名可以参考;
- 也无法打开两个同名的工作簿,因此如果您打开源链接,则单元格引用会从文件路径更改为文件名(这正是导致问题的原因。
这是我目前拥有的代码 updCellRef 是对文件路径的单元格引用(我只想使用文件名):
Sub updateValues(updCellRef)
updFilePath = ActiveWorkbook.Sheets("INPUTS").Range(updCellRef).Value
ActiveWorkbook.updateLink Name:=updFilePath, Type:=xlExcelLinks
End Sub
为了澄清这个问题,当我使用上述函数更新值时,当源电子表格打开时,它仅由其文件名引用。当它关闭时,它会被其完整的文件路径引用。
我正在使用 Excel Professional 2010 v14 和 VBA v7.0
注意:我不想使用任何其他软件,包括 Power Query,因为没有管理员权限就无法安装。
【问题讨论】:
-
如果您仅使用文件名来引用文件,我猜您已经预先假定了一个位置或其他限定符,以便在您的应用程序可访问的具有该名称的所有可能文件中进行选择。都是excel中打开的文件,当前目录下的文件,还是什么?
-
作为替代方法,您可以使用 Power Query 或 Insert > From Access stackoverflow.com/questions/38694891/… 从相同或不同的工作簿中查询数据
-
是的,
"SELECT * FROM [Sheet1$B2:C3]"或"SELECT * FROM [named Range]"。文件名不会被DDE/OLE链接修改,可以用VBA修改。 -
@AER 打开的文件不需要更新,从打开的文件自动更新。
-
@AER 你有一个函数,除了返回结果之外,你希望做其他事情,我认为 Excel VBA 函数没有副作用,除了返回结果之外没有其他事情吗?跨度>
标签: vba excel data-linking