可能性のある複製:
アクセステーブルが存在するかどうかを確認
Vbaマクロは初めてです。テーブルが存在するかどうかを確認する方法はありますか?以前の投稿を検索しましたが、これに対する明確な解決策が得られませんでした。
Microsoft Access 12.0 Object Libraryへの参照を設定すると、DCountを使用してテーブルが存在するかどうかをテストできます。
Public Function ifTableExists(tblName As String) As Boolean
If DCount("[Name]", "MSysObjects", "[Name] = '" & tblName & "'") = 1 Then
ifTableExists = True
End If
End Function
Exists = IsObject(CurrentDb.TableDefs(tablename))
質問にはすでに回答済みですが、既存の回答が無効であることがわかりました。
バックエンドが機能していないリンクテーブルに対してTrueを返します。
DCountの使用ははるかに遅くなりますが、より信頼性が高くなります。
Function IsTable(sTblName As String) As Boolean
'does table exists and work ?
'note: finding the name in the TableDefs collection is not enough,
' since the backend might be invalid or missing
On Error GoTo hell
Dim x
x = DCount("*", sTblName)
IsTable = True
Exit Function
hell:
Debug.Print Now, sTblName, Err.Number, Err.Description
IsTable = False
End Function
これは新しい質問ではありません。 comments in one SO post に追加し、 my alternative implementation を別の投稿に追加しました。最初の投稿のコメントは実際に解明されています異なる実装間のパフォーマンスの違い。
基本的に、最も速く動作するのは、使用するデータベースオブジェクトによって異なります。
Accessにはある種のシステムテーブルがあります ここで少し読むことができます 次のクエリを実行して、存在するかどうかを確認できます(1 =存在、0 =存在しません;))
SELECT Count([MSysObjects].[Name]) AS [Count]
FROM MSysObjects
WHERE (((MSysObjects.Name)="TblObject") AND ((MSysObjects.Type)=1));