web-dev-qa-db-fra.com

ACCÉDER au code VBA pour supprimer une table si elle existe

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
6
Hilly1

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.

7
Vityata

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.

3
ChrisM