在 VBA 中更改 tabledef .connect 属性

2024-04-09

我试图做一件已经做过一百次的事情,但突然就行不通了。

acc.AutomationSecurity = msoAutomationSecurityLow   'Remove Security Prompt
acc.OpenCurrentDatabase path & "Year " & Range("yr") & "\" & Range("yr") & Range("mo") & "\Year " & Range("yr") & Range("mo") & " GENERIC DB NAME.mdb", True

'update link
acc.CurrentDb.TableDefs("TABLE NAME").Connect = "MS Access;DATABASE=" & path & "Year " & Range("yr") & "\" & Range("yr") & Range("mo") & "\Year " & Range("yr") & Range("mo") & " OTHER DB.mdb"
acc.CurrentDb.TableDefs("TABLE NAME").RefreshLink

我不知道这是否与我们最近更新到 Excel 2010 并且数据库仍然是 ACCESS 2003 这一事实有关,但这应该是一个简单的运行代码。当我运行上面的代码时没有任何反应。文件以正确的方式打开,但连接字符串永远不会分配给表定义对象,即。它运行时没有错误,但该表未链接到新数据库。我发现以下代码确实有效,并使用它来解决该问题。我仍然很好奇为什么我不能以“application.currentdb.tabledef("TABLE").connect”样式为 .connect 属性赋值,但是如果我将 currentdb 分配给一个新的数据库对象,我可以。

所以我不知道为什么,但如果我使用它,它会起作用

dim db as DAO.database
set db = acc.CurrentDb
db.TableDefs("TABLE NAME").Connect = "MS Access;DATABASE=" & path & "Year " & Range("yr") & "\" & Range("yr") & Range("mo") & "\Year " & Range("yr") & Range("mo") & " OTHER DB.mdb" 
db.TableDefs("TABLE NAME").RefreshLink 

感谢您的任何帮助,您可以提供。


我遇到了类似的问题。当尝试直接通过执行此操作时CurrentDb (i.e. CurrentDb.TableDefs("foo").Connect)没有工作并且没有抛出错误。

原因是:每次提到CurrentDB,这是一个新实例。

在第二种方法中,您创建了一个设置为 CurrentDb 的数据库对象,这就是第二种方法的工作原理。

长话短说: 好的:

Dim Db as Database
Set Db = CurrentDb
Db.TableDefs("foo").Connect = "New connection string"
Db.TableDefs("foo").RefreshLink

Bad:

CurrentDb.TableDefs("foo").Connect = "New connection string"
CurrentDb.TableDefs("foo").RefreshLink
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 VBA 中更改 tabledef .connect 属性 的相关文章

随机推荐