链接表非常有用(当然不是所有时候)——尤其是当您处理经常变化的外部信息时。 一个典型的例子可能是供应商允许您访问他们当前的月度价格文件。 但是当他们下个月发布文件并且文件名从“Pricelist-01-01-2016”更改为“Pricelist-01-02-2016”时会发生什么? 将发生的第一件事是您的链接将断开,因此您必须手动更新它。 每次他们更改文件名。 这也适用于表名(当然!)。 你问有没有办法快速轻松地做到这一点? 我们很高兴您提出这个问题——继续阅读并了解如何……
设置场景——场景
在本文中,我将使用一个虚构的场景——但我相信您会很快认出的!
每个月,Acme trading 都会向我们发送一份更新的价格表,其中包含在 DataNumen. 为了知道我们每个月要花多少钱在文具上,我们链接到办公室管理数据库中的那个文件。
问题是,即使文件格式保持不变,文件名也会每月更改。上个月是“2017年1月办公用品成本.xls”,这个月是“2017年2月办公用品成本.xls”。
变化不大我相信你会同意,但除非我们经历手动重命名文件的麻烦(一旦我们将旧文件移开或删除),或者经历以下过程通过 Access 中的链接表管理器重新链接表。
因为我们不想这样做,所以我们创建了以下代码来代替它——我相信您会看到它更容易:
Public Sub UpdateLink (tableName As String, newFileName As String) Dim objDB As Database Dim objTableDef As TableDef Dim newConnect as String Set objDB = CurrentDb Set objTableDef = objDB.TableDefs(tableName) 'format of the connection string in our case, for example, is: ' Excel 5.0;HDR=YES;IMEX=2;DATABASE=File name including path and extension type newConnect = "Excel 5.0;HDR=YES;IMEX=2;DATABASE=" & newFileName objTableDef.Connect = newConnect objTableDef.RefreshLink Set objTableDef = Nothing Set objDB = Nothing End Sub
解释代码
如您所见,我们传递了(已链接的)表名,以及该表要链接到的新文件名。文件名应包含文件的完整路径。您一开始可能会遇到的一个问题是,如何获取正确的连接字符串格式,以便将其放入“newConnect”变量中。虽然有很多方法可以找到正确的格式,但我发现最简单的方法之一是直接查看当前链接表的连接字符串。为此,只需在“Set objTableDef = objDB.TableDefs(tableName)”行的正下方添加以下代码行:
Debug.Print (objTableDef.Connect)
这会将现有的连接字符串打印到代码编辑器的调试/即时窗口中(如果它还不可见,请在运行代码之前从 VBA 代码编辑器屏幕中按 CTRL-G 以切换即时窗口的可见性。
一个警告
与往常一样,不要忘记虽然上面的代码片段可以帮助您在需要更改表链接到的文件时节省时间,但它不能做的是在遇到任何问题时帮助您 访问文件损坏,因此请确保您保留备份并知道如果一切都失败了该去哪里。
作者简介:
Mitchell Pond 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 修复SQL损坏 和 excel 恢复软件产品。 欲了解更多信息,请访问 datanumen.com