Mögliches Duplizieren:
Überprüfen Sie, ob eine Zugriffstabelle vorhanden ist
Ich bin neu in VBA-Makros. Irgendeine Idee, wie man prüft, ob eine Tabelle existiert oder nicht? Ich habe nach vorherigen Beiträgen gesucht, aber keine klare Lösung dafür gefunden.
Durch das Festlegen eines Verweises auf die Microsoft Access 12.0-Objektbibliothek können Sie mithilfe von DCount prüfen, ob eine Tabelle vorhanden ist.
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))
Ich weiß, dass die Frage bereits beantwortet wurde, aber ich finde, dass die vorhandenen Antworten nicht gültig sind:
Sie geben True für verknüpfte Tabellen mit einem nicht funktionierenden Backend zurück.
Die Verwendung von DCount kann viel langsamer sein, ist jedoch zuverlässiger.
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
Dies ist keine neue Frage. Ich habe es in comments in einem SO post angesprochen und meine alternativen Implementierungen in einem anderen Post gepostet. Die Kommentare im ersten Beitrag erläutern die Leistungsunterschiede zwischen den verschiedenen Implementierungen.
Was am schnellsten funktioniert, hängt davon ab, welches Datenbankobjekt Sie verwenden.
Access hat eine Art Systemtabelle Sie können etwas darüber lesen Sie können die folgende Abfrage auslösen, um zu sehen, ob sie existiert (1 = existiert, 0 = nicht;
SELECT Count([MSysObjects].[Name]) AS [Count]
FROM MSysObjects
WHERE (((MSysObjects.Name)="TblObject") AND ((MSysObjects.Type)=1));