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

このQ&Aのポイント
  • リンク元のパスを変更したいが、実行してもエラーにならず、パスも変わらない。CurrentDb.TableDefs(T.Name).Connectはパスの取得しかできない。
  • 質問者は複数のテーブルのリンク元のパスを変更したい。しかし、実行してもパスが変わらない。CurrentDb.TableDefs(T.Name).Connectはパスの取得しかできないのか?
  • VBAのコードを使用して複数のテーブルのリンク元のパスを変更したい。しかし、実行してもエラーにならず、パスも変わらない。なぜリンク元のパスを変更できないのか?
回答を見る
  • ベストアンサー

リンク元のパスを変更したい 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 はパスの取得しかできないのでしょうか? パスを設定する方法を教えてください。 よろしくお願いします。

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

  • ベストアンサー
回答No.1

RefreshLinkしないと登録されません。 Access2010のヘルプより抜粋 『備考 リンク テーブルの接続情報を変更するには、対応する TableDef オブジェクトの Connect プロパティをリセットした上で、RefreshLink メソッドを使用して情報を更新します』 http://kikutips.blog13.fc2.com/blog-entry-107.html

etrprccztmku
質問者

お礼

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

関連するQ&A

  • vbaコードが遅い

    当方access2003、XP、メモリ2G、コア2DUOなのですが Sub 取得() Dim DB As DAO.Database Dim T As TableDef Set DB = CurrentDb Debug.Print "開始:" & Now For Each T In DB.TableDefs 'ここでやたら時間がかかる Debug.Print T.Name & "取得時間:" & Now Next End Sub これを実行すると、 For Each T In DB.TableDefs を通る時に5秒くらい時間がかかりますがそういうものなのでしょうか?

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

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

  • アクセスVBAです

    Sub test() Dim DB As Database Dim T As TableDef Dim myTable As String myTable = "Table1" Set DB = OpenDatabase(CurrentProject.FullName) For Each T In DB.TableDefs If T.Name = myTable Then DoCmd.DeleteObject acTable, myTable Exit For End If Next DB.Close Set DB = Nothing End Sub これを実行しようとすると Dim DB As Database の部分で コンパイルエラー プロジェクトではなく、ユーザ定義型を指定してください。 と言うエラーになります。 Dim DB As Objectにすればエラーにならずに進みますが 何が原因なのでしょうか?

  • リンクテーブル(複数)のパス変更について<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

  • 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 どうすれば回避出来るか、ご教授願います。

  • VBA 複数の文字のコードを一気に返すには

    Sub test1() Dim myStr As String myStr = "abc" Debug.Print Asc("a") Debug.Print Asc(myStr) End Sub このコードは、どちらも97が返るのですが、 myStrは3文字です。 3文字全ての文字コードを返すには、 Sub test2() Dim myStr As String myStr = "abc" Debug.Print Asc(Mid(myStr, 1, 1)) & Asc(Mid(myStr, 2, 1)) & Asc(Mid(myStr, 3, 1)) End Sub のようにするしかないのでしょうか?

  • AccessVBAのCurrentDbメソッドでエラーになります

    Windows2000、Access2000を使っています。 オンラインヘルプを参考に作った下記のプログラムを走らせると、Set db = CurrentDbのところで「実行時エラー13:型が一致しません」のエラーになります。どうしてでしょう。 Sub b() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Set db = CurrentDb Set tdf = db.TableDefs("テーブル1") For Each fld In tdf.Fields Debug.Print fld.Name Next fld End Sub 参照設定を見ると、Microsoft dao 3.0 Object LibraryにチェックがついていますのでDAOは使えるはずなんですが・・・。

  • 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です。

  • 非表示のテーブルは取得したくない

    全てのテーブル名を取得したくて Sub test() Dim DB As Database Dim T As TableDef Set DB = OpenDatabase(CurrentProject.FullName) For Each T In DB.TableDefs Debug.Print T.Name Next DB.Close Set DB = Nothing End Sub を実行したのですが MSysAccessObjects MSysAccessXML MSysACEs MSysDataCollection MSysIMEXColumns MSysIMEXSpecs MSysNavPaneGroupCategories MSysNavPaneGroups MSysNavPaneGroupToObjects MSysNavPaneObjectIDs MSysObjects MSysQueries MSysRelationships など余計なものまで取得されてしまいます。 ナビゲーションウインドウに表示されている テーブルのみ取得するにはどうすればいいでしょう? ifステートメントで「非表示なら」もしくは 「システムテーブルなら」として、はじくにはどうすればいいでしょう?

  • 二次元配列のVBA

    二次元配列のVBAの書き方がよくわからないのですが、 私が作ったサンプルプログラムのSub 二次元()において 二次元配列で表すにはどうすればいいのでしょうか? Sub 二次元()では 配列を格納する変数はtmpしか使っていませんが もう一つ配列を格納する用の変数を作ればいいのでしょうか? 数字とアルファベットは別々に取り出したいです。 ----------------------------------------------------- Sub 一次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub Sub 二次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i & "と" & Chr(64 + i) Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub

専門家に質問してみよう