• ベストアンサー

他のファイルからリンクしてるテーブルリンクのパスを

アクセスです。 Sub Sample() Debug.Print CurrentDb.TableDefs("T_TEST").Connect End Sub このコードでアクセスの他のファイルからリンクしてるテーブルリンクのパスを取得できますが VBAでパスを変更するにはどうすれば良いでしょうか? 例えば ;DATABASE=C:\Users\\TEST1.accdb を ;DATABASE=C:\Users\\TEST2.accdb に変更するコードが知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.1

こんな感じで。 Sample()  Dim dbs As DAO.Database  Dim tdf As DAO.TableDef  Set dbs = CurrentDb  Set tdf = dbs.TableDefs("T_TEST")  With tdf   .Connect = ";DATABASE=C:\Users\\TEST2.accdb"   .RefreshLink  End With End Sub Replace 関数を使っても良いですね。

XSCEIWTGH
質問者

お礼

ご回答ありがとうございました。

関連するQ&A

  • リンク元のパスを変更したい vba  アクセス

    アクセスです。 該当する複数のテーブルの、リンク元のパスを変更したいのですが Sub Sample() Dim DB As Database Dim T As TableDef Dim mystr As String Set DB = OpenDatabase(CurrentProject.FullName) For Each T In DB.TableDefs mystr = CurrentDb.TableDefs(T.Name).Connect If mystr Like "*\\該当のパス*" Then Debug.Print T.Name Debug.Print CurrentDb.TableDefs(T.Name).Connect  ’自分としてはこれで変更できると思った CurrentDb.TableDefs(T.Name).Connect = _ ";DATABASE=C:\新たなパス\○○.accdb" Debug.Print CurrentDb.TableDefs(T.Name).Connect End If Next DB.Close Set DB = Nothing End Sub を実行してもエラーにもならないし、リンクテーブルのパスも変わりません。 CurrentDb.TableDefs(T.Name).Connect はパスの取得しかできないのでしょうか? パスを設定する方法を教えてください。 よろしくお願いします。

  • リンクテーブル(複数)のパス変更について<ACC2003>

    現在ACCESS2003で出荷データから売上の集計が可能となるように 試みているのですが、都合上プログラムとデータを分けて処理 したいと考えております。 そこで、リンクテーブルを活用したいと思うのですが、環境に よってパスが変更となったり、データソースを切り替えたい時 などリンクテーブルのパスが変更できると非常に有難い状況です。 多少ネットで調べVBAで変更させる方法は見つかったのですが、 基本的に1つのリンク先を想定しているとの事で、複数は対応 していないようです。 例えば、リンクテーブルをそれぞれ TBL伝票データ   → C:\DB1\A.mdb TBL得意先マスター → C:\DB2\B.mdb TBL商品マスター  → C:\DB2\C.mdb と言ったように複数リンク先がある場合でそれぞれ パス変更が生じた場合に簡単に変更ができる方法は無いでしょうか。 (リンクファイルが1つの場合) Dim db As Database Dim a As TableDef Set db = CurrentDb() For Each a In db.TableDefs If Len(a.Connect) <> 0 Then a.Connect = ";database=" & NEWPATH '→新しいパス名 a.RefreshLink End If Next db.TableDefs.Refresh

  • Vbaでアクセスからエクセルにリンクテーブルする

    Vbaでアクセスからエクセルにリンクテーブルするには? エクセルの情報: C:\Users\Desktop¥新規 Microsoft Excel ワークシート.xlsx シート1の情報: フィールド1 フィールド2 あああ    aaa いい     iii ううう    uuu なのですが、 アクセスからVBAでリンクするにはどうすれば良いでしょう? 手作業なら 外部データ→エクセル→外部データの取り込み→リンクテーブルを作成してソースデータにリンクする でリンクできますが、vbaで行いたいです。 Sub Sample01() Dim db As DAO.Database, tb As DAO.TableDef Set db = CurrentDb Set tb = db.TableDefs("Sheet1") tb.Connect = ";DATABASE=" & CurrentProject.FullName & ";TABLE=Sheet1" tb.RefreshLink ' リンク情報の更新 End Sub このコードは意味が違いますよね エクセルのパスとシート名を指定してリンクする方法を教えてください。 最終定期にはシートをループして複数のテーブルを作成したいのです。 リンクが無理ならインポートでもOKです。

  • ACCESS2007のリンクテーブルのリンク元を変更

    ACCESS2007で顧客管理DBを作成していますが、後の保守を考え、テーブルとその他を別のaccdbファイルに使用としています。 実際に使用するPCのほとんどがRuntime版を使用する予定で、リンクテーブルマネージャを使用することが出来ません。 そこで、トップメニュでボタンを作成し、VBA(DAOでもADOでも可)でリンクの変更をしようと考えています。2つのaccdbはとりあえず同一フォルダに格納です。(将来的にはサーバーに移動) 参考書を元に以下の様なVBAを作成したのですが、 最後のRefreshlinkの所で引数が無効ですとエラーが出ます。 Function TableLink1()   Dim dB As DAO.Database Dim tB As DAO.TableDef Set dB = CurrentDb() Set tB = dB.TableDefs("担当者登録") tB.Connect = ";DATABASE =" & CurrentProject.Path & "\" & "UserDB_Be.accdb" tB.RefreshLink   ←ここでエラーになります。 dB.Close End Function どうすれば回避出来るか、ご教授願います。

  • テーブルリンクは途切れてしまいますか?

    アクセスです。 test1.accdbのテーブルをtest2.accdbへテーブルリンクしているのですが 元ファイルのtest1.accdbのファイル名を「新test1.accdb」の様に、変更した場合、テーブルリンクは途切れてしまいますか? また一つ一つ付け直ししないとだめですか?

  • Accessのリンク先を相対パスにしたい

    Access2010をつぎのような環境で開発しています。 c:\開発\データ.accdb  テーブル定義と実データ格納 c:\開発\アプリ.accdb  データ.accdbのテーブル定義へのリンクとフォームなど これを本番のネットワーク環境 “\\network\本番” に設置した場合、 「c:\開発\データ.accdbは無い」旨のエラーになってしまいます。 また、本番環境のパス名はインストール先によって異なります。 Access2010のリンクマネージャでは絶対パスでのリンクしか定義できないようですが、 カレントパスに変更するには、アプリ.accdb を起動時に毎回、動的に変更するしかないのでしょうか? お教えいただきたくお願いいたします。

  • Access 外部MDBのリンクテーブルの変更

    お世話になってます。 Access2007へ移行のため、移行用のmdbを作成し、移行する既存のmdb群のMSysObjectsを変更しようとしています。 以下のようにVBAで自分のリンクテーブルの接続パスワードは変更できたのですが、同じく他のMDBを指定してリンクテーブルを変更する事は出来るでしょうか? Dim dbs As DAO.Database Dim tdf As DAO.TableDef Set dbs = CurrentDb For Each tdf In dbs.Tabledefs   If Len(tdf.Connect > 0 Then     tdf.Connect=";PWD=" & strPWD  '←リンクテーブルの接続PWDの変更     tdf.RefreshLink   End If Next よろしくお願い致します。

  • フロントデータベースのリンク先一括変更

    ACCESS2007にて、フロンドエンドデータベースとバックエンドデータベースに分割したプログラムを作成しています。今回、フロントデータベースのリンク先を一括変更する機能をつけたしたいと思い(バックエンドデータベースの場所を変更したときのための対処として)、プログラム作成しました。ネットを参考に、下記のようなプログラムを組んだのですが、これでは、普通のテーブルへのリンクはいいのですが、テキストリンクテーブルにまで変更をかけてしまい、そこでエラーが起こります。そこで、リンク変更する際に、テキストリンクテーブルなどは除外し、通常のリンクテーブルのみに変更プログラムを適用できるようにする記述方法はないでしょうか?テーブルtbの種類を表示できるようにすれば、if文で条件分けできると思うのですが、その表示方法がわかりません。もしくは、他のやり方をご存じの方ありましたら、ご教授よろしくお願いします。 Private Sub コマンド15_Click() On Error GoTo Err_MSG Dim strfile As String Dim intResult As Integer Dim tb As DAO.TableDef Const ENABLE_WIZHOOK = 51488399 Const DISABLE_WIZHOOK = 0 WizHook.Key = ENABLE_WIZHOOK intResult = WizHook.GetFileName(0, "", "データベースを指定してください。", "" _ , strfile, "", "accdbファイル(*.accdb)|*.accdb", 0, 0, 0, True) WizHook.Key = DISABLE_WIZHOOK If strfile = "" Then Exit Sub For Each tb In CurrentDb.TableDefs 'リンクテーブルのみ更新する。 If tb.Connect <> "" And tb.Connect <> ";DATABASE=" & strfile Then tb.Connect = ";DATABASE=" & strfile tb.RefreshLink End If Next tb MsgBox ("リンク更新が正常に終了しました。") Exit Sub Err_MSG: MsgBox Err.Description, 16 End Sub

  • Accessでリンクテーブルのパス変更

    Accessで処理mdbとデータmdbに分けて、データmdbをリンクテーブルとして読み込んでいるのですが、データmdbのパスが変わったとき、処理mdbでデータmdbのパスを変更しなければなりません。 それが、面倒なので、手軽に変更できるように作っているのですが、「MSysObjects」の「Database」を書き換えるようと、VBAでADODB処理をしているのですが、アップデートすると「更新可能なクエリであることが必要です。」となり、書き換えることが出来ません。 strSQL = "SELECT * FROM MSysObjects;" ~ data.open strSQL ~ data("Database") = NewDatabase data.Update といった感じの処理です。因みに環境はAccess2000です。 何か、リンクテーブルを自動で書き換える簡単な方法は無いものでしょうか。

  • C#で相対パスを絶対パスへ変換したい

    C#で相対パスを絶対パスへ変換したい C#でプログラミングしています。 以下のようにベースとなる絶対パスと、そこからの相対パスがあるとします。 string basePath = "C:\\Projects\\Test001\\Debug\\"; string relativePath = "..\\..\\Test002\\"; 2つの文字列をただ足し合わせるだけだと、 "C:\\Projects\\Test001\\Debug\\..\\..\\Test002\\" となってしまいます。 これでも目的のパス「C:\\Projects\\Test002\\」にアクセスできますが、なにか既存の関数などを使って、「C:\\Projects\\Test002\\」というちゃんとした絶対パスを取得する方法はないでしょうか?

専門家に質問してみよう