2011-12-05 8 views
4

私は何百回もやったことをしようとしていますが、突然動作しません。VBAでのテーブル化された.connectプロパティの変更

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 

これは、我々は最近、エクセル2010に更新し、DBはまだAccess 2003のですが、これを実行するコードの単純なビットであるべきという事実に関連している場合、私は知りません。上記のコードを実行すると何も起こりません。ファイルは正しい方法で開きますが、接続文字列はテーブルのdefオブジェクトに割り当てられません。エラーなく実行されますが、テーブルは新しいデータベースにリンクしていません。私は次のコードが動作し、問題を回避するためにそれを使用したことがわかりました。私はまだ興味がありますが、スタイル '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 

おかげで動作します。

+0

?エラーメッセージとは何ですか? – mwolfe02

+0

これは失敗しません。connectプロパティは変更されません。 – user1082270

+1

あなたの質問を更新して、「うまくいかない」という正確な定義を与えてください。 –

答えて

8

同様の問題が発生しました。 CurrentDb(つまりCurrentDb.TableDefs("foo").Connect)で直接処理しようとしたときにエラーが発生し、エラーが発生しませんでした。

理由は:CurrentDBを参照するたびに、それは新しいインスタンスです。

2番目の方法では、CurrentDbに設定したデータベースオブジェクトを作成しました。これは2番目の方法です。

かいつまん: グッド:

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

:それは失敗している

CurrentDb.TableDefs("foo").Connect = "New connection string" 
CurrentDb.TableDefs("foo").RefreshLink 
+5

CurrentDBを参照するたびに、新しいインスタンスになります。 – Fionnuala

関連する問題