Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルVBAでリンクテーブルの一括更新(但し一部条件あり)
記事No16842
投稿日: 2017/01/10(Tue) 16:21
投稿者やまたろうがに
OS:Windows7
Access Version:2010

お世話になります。
リンクテーブルを一括で更新できるVBA下記の通り作成しました。
あるリンクテーブルのみ更新を行わないようにしたいのですが、お知恵をお貸しできませんでしょうか?

Sub Sample02()
Dim db As DAO.Database, tb As DAO.TableDef
Set db = CurrentDb
'テーブルオブジェクトを列挙
For Each tb In db.TableDefs
'リンクテーブルだけを処理
If tb.Connect <> "" Then
tb.Connect = ";DATABASE=C:\Northwind.mdb;TABLE=" & tb.Name
tb.RefreshLink ' リンク情報の更新
End If
Next tb
End Sub

これだと、リンクテーブル全てが更新される仕様になります。

よろしくお願いします。

タイトルRe: VBAでリンクテーブルの一括更新(但し一部条件あり)
記事No16843
投稿日: 2017/01/10(Tue) 23:39
投稿者mayu
こんばんは。

> あるリンクテーブルのみ更新を行わないようにしたいのですが

{ ある }という条件が、何を指すのか はっきりしませんけど
どこで躓いたんでしょうか。

除外するテーブルが複数あるのでしょうか。
'------------------------------------------------------------------------------
Sub sample1()
  Const LK_JUDGE As Long = dbAttachedTable Or dbAttachedODBC
  Dim db         As DAO.Database
  Dim tb         As DAO.TableDef
  
  Set db = Application.CurrentDb
  
  For Each tb In db.TableDefs
    Rem リンクテーブルの判定
    If (tb.Attributes And LK_JUDGE) Then
      Select Case tb.Name
        Rem 除外するテーブル名を列挙
        Case "■■■", "●●●", "▼▼▼"
          
        Case Else
          tb.Connect = ";DATABASE=C:\Northwind.mdb;TABLE=" & tb.Name
          tb.RefreshLink
      End Select
    End If
  Next
  
  db.TableDefs.Refresh
  Set db = Nothing
End Sub
'------------------------------------------------------------------------------

それとも

MS-Access以外のリンクテーブルも混在しているから
それらを一括して除外したい、ということでしょうか。
'------------------------------------------------------------------------------
Sub sample2()
  Const LK_JUDGE As Long = dbAttachedTable Or dbAttachedODBC
  Dim db         As DAO.Database
  Dim tb         As DAO.TableDef
  
  Set db = Application.CurrentDb
  
  For Each tb In db.TableDefs
    Rem リンクテーブルの判定
    If (tb.Attributes And LK_JUDGE) Then
      Rem Accessのリンクテーブルに限定
      If (LenB(Split(tb.Connect, ";")(0)) = 0) Then
        tb.Connect = ";DATABASE=C:\Northwind.mdb;TABLE=" & tb.Name
        tb.RefreshLink
      End If
    End If
  Next
  
  db.TableDefs.Refresh
  Set db = Nothing
End Sub
'------------------------------------------------------------------------------

ご希望の条件が、上記のいずれでもない場合は
除外する条件を具体的に説明いただけますか。

なお、リンクテーブルを判定するのは
------------------------------------------------------
SELECT name FROM MSysObjects 
WHERE Connect Is Not Null 
   OR Database Is Not Null ;
------------------------------------------------------
システムテーブルに SQL を投げても可能です。

  では ☆

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る