Dupliquer possible:
Vérifier si la table d'accès existe
Je suis nouveau sur les macros VBA. Avez-vous une idée de la manière de vérifier si une table existe ou non? J'ai cherché les publications précédentes mais je n’ai pas trouvé de solution claire à ce problème.
La définition d'une référence à la bibliothèque d'objets Microsoft Access 12.0 nous permet de tester l'existence d'une table à l'aide de 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))
Je sais que la question a déjà reçu une réponse, mais je trouve que les réponses existantes ne sont pas valides:
ils renverront True pour les tables liées avec un back-end non fonctionnel.
L'utilisation de DCount peut être beaucoup plus lente, mais plus fiable.
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
Ce n'est pas une nouvelle question. Je l'ai ajouté dans des commentaires dans un SO message et j'ai posté mes implémentations alternatives dans un autre message. Les commentaires du premier article élucident réellement les différences de performances entre les différentes implémentations.
Fondamentalement, ce qui fonctionne le plus rapidement dépend de l’objet de base de données que vous utilisez avec.
Access a une sorte de table système Vous pouvez lire un peu à ce sujet ici vous pouvez lancer la requête suivante pour voir si elle existe (1 = il existe, 0 = ça ne;;))
SELECT Count([MSysObjects].[Name]) AS [Count]
FROM MSysObjects
WHERE (((MSysObjects.Name)="TblObject") AND ((MSysObjects.Type)=1));