Tout d'abord, je dois admettre que je ne suis pas formé au codage avec VBA. J'utilise des macros et des requêtes MS Access pour créer mon application. J'utilise des fichiers d'importation temporaires et j'ai besoin d'exécuter une macro ou un VBA pour tester s'ils existent, puis s'ils le font, pour les supprimer.
Le nom de ma table est "TempImport1"
J'ai recherché cela via les recherches Google et j'ai rencontré des VBA qui pourraient fonctionner, mais je suis perdu à essayer de comprendre comment mettre le code dans un module ou un sous-bouton de clic. J'ai déjà coupé/collé du code VBA sous une fonction de bouton, et cela a fonctionné, mais je ne peux pas comprendre pourquoi cela ne fonctionne pas cette fois.
Honnêtement, je suis sûr que c'est mon manque de compréhension des fonctions privées vs publiques, ainsi que, bien sûr, le fait que je ne connais pas VBA.
Voici le code que j'essaie de faire fonctionner:
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 TrapError
Dim x
x = DCount("*", sTblName)
IsTable = True
Exit Function
TrapError:
Debug.Print Now, sTblName, Err.Number, Err.Description
IsTable = False
End Function
Vous devez d'abord vérifier si la table existe et ensuite vous devez essayer de la fermer, si elle existe. Vous devez ensuite définir des avertissements sur False, afin qu'il ne vous demande pas si vous êtes sûr de vouloir supprimer la table.
Dans l'exemple ci-dessous, vous supprimez Table3
. Le If Not IsNull
vérifie si la table existe:
Option Compare Database
Option Explicit
Public Sub DeleteIfExists()
Dim tableName As String
tableName = "Table3"
If Not IsNull(DLookup("Name", "MSysObjects", "Name='" & tableName & "'")) Then
DoCmd.SetWarnings False
DoCmd.Close acTable, tableName, acSaveYes
DoCmd.DeleteObject acTable = acDefault, tableName
Debug.Print "Table" & tableName & "deleted..."
DoCmd.SetWarnings True
End If
End Sub
Le code devrait fonctionner à peu près.
Pour supprimer la table TempImport1 si elle existe, utilisez simplement la fonction ci-dessous.
Function DeleteTables()
If Not IsNull(DLookup("Name", "MSysObjects", "Name='TempImport1'")) Then
DoCmd.DeleteObject acTable, "TempImport1"
End If
End Function
Une fois la fonction créée, créez une macro, ajoutez le code d'exécution de l'action puis saisissez DeleteTables()
dans le nom de la fonction.
Vous avez ensuite une macro à exécuter pour supprimer la table si elle existe.