0
votes

Exécution d'une fonction VBA d'accès MS Access 2016 via une macro, puis d'exécuter cette macro via Excel

Je modifie un projet et j'essaie de prendre une fonction VBA actuellement exécutée par un bouton Cliquez sur un formulaire et exécutez-le dans une macro afin que je puisse appeler cela pour exécuter dans Excel.

Le sous-courant actuel lit quelque chose comme ce qui suit. p>

Public Sub Command42_Click()

'Clear All Tables
DoCmd.RunSQL "DELETE * FROM dbo_Tbl1"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl2"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl3"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl4"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl5"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl6"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl7"
DoCmd.RunSQL "DELETE * FROM dbo_Tbl8"

  Dim strSQL     As String

  Dim strLocalTable  As String

'Data Download

  With CurrentDb.QueryDefs("setup_PTQ")
     .SQL = "select * from SQL_Server_tbl"
  End With

  strLocalTable = "dbo_tbl1"

  CurrentDb.Execute "INSERT INTO " & strLocalTable & " SELECT * FROM setup_PTQ"

DoCmd.OpenQuery "qry_1"
DoCmd.Close acQuery, "qry_2"

End Sub


0 commentaires

3 Réponses :


1
votes

Vous devez modifier votre Sub vers un fonction publique (ou juste fonction , puisque le public est la portée par défaut) Dans un module pour pouvoir être en mesure d'être évalué à partir de l'action Code d'une macro d'accès MS Access.

à partir du MS Access Documentation :

Vous pouvez utiliser l'action Macro CODCODE dans les bases de données de bureau Accéder à Appelez une base Visual Basic pour Applications (VBA) Fonction Procédure.

Vous pouvez également créer une fonction qui appelle simplement votre sous , par exemple: xxx

puis appelle cette fonction de L'action runcode de votre macro.


2 commentaires

Merci pour votre réponse. L'accès macro fonctionne maintenant. J'ai toujours des problèmes dans l'étape Excel. Le code est ci-dessous et il me dis toujours que cela ne peut pas le trouver. Qu'est-ce que je fais mal?


Sous Accessmacro () Dim AppAccess comme accès.Application Set AppAccess = nouvel accès.Application AppAccess.opurrentDatabase "Connection chaîne" AppAccess.Visible = true appaccess.docmd.runmacro "module2" <- Comme il apparaît dans le groupe macro Interface d'accès. appaccess.closecurrentDatabase msgbox ("Données a été mise à jour") end sous



0
votes

n'utilise pas docmd.runmacro

N'utilisez pas de macro

Utilisez AppAccess.Run "myNewModule.command42_click"

Un avantage supplémentaire de .Run est qu'il exécute des sous-routines ainsi que des fonctions.


0 commentaires

0
votes

Essayez ceci:

  1. Ouvrez votre macro de code d'exécution en mode de conception.
  2. Cliquez pour modifier le nom de la fonction
  3. Appuyez sur Ctrl + F2 pour ouvrir la boîte de dialogue Expression générateur
  4. Dans le générateur d'expression, accédez à votre fonction Cliquez sur le nom de votre fichier de base de données, le nom du module, puis le nom de la fonction.

    Au début, j'ai eu la même erreur 2425 que vous décrivez. Après avoir traversé le générateur d'expression pour sélectionner la fonction, cela fonctionnait bien. Mon fichier de base de données d'accès a une extension .mdb.


0 commentaires