comment affichez-vous le code macro dans access?

J'ai une base de données Microsoft Access et il y a une macro là-bas. Comment afficher le code de la macro?

21
demandé sur Ryan Kohn 2009-08-28 08:05:21

5 réponses

Ouvrez la base de données Access, vous verrez Table, Query, Report, Module & Macro.
Cela contient les macros qui peuvent être utilisées pour appeler des actions MS-Access communes dans une séquence.

Pour une macro VBA personnalisée, Appuyez sur ALT + F11.

19
répondu shahkalpesh 2009-08-28 04:07:07

Vous pouvez essayer le code VBA suivant pour exporter directement le contenu des macros sans les convertir en VBA. Contrairement aux Tables, aux formulaires, aux rapports et aux Modules, les Macros se trouvent dans un conteneur appelé Scripts. Mais ils sont là et peuvent être exportés et importés en utilisant SaveAsText et LoadFromText

Option Compare Database

Option Explicit

Public Sub ExportDatabaseObjects()
On Error GoTo Err_ExportDatabaseObjects

    Dim db As Database
    Dim d As Document
    Dim c As Container
    Dim sExportLocation As String

    Set db = CurrentDb()

    sExportLocation = "C:\SomeFolder\"
    Set c = db.Containers("Scripts")
    For Each d In c.Documents
        Application.SaveAsText acMacro, d.Name, sExportLocation & "Macro_" & d.Name & ".txt"
    Next d

Un autre objet à utiliser est le suivant:

  For Each obj In Access.Application.CurrentProject.AllMacros
    Access.Application.SaveAsText acMacro, obj.Name, strFilePath & "\Macro_" & obj.Name & ".txt"
  Next
8
répondu Michael Dillon 2009-10-14 11:44:03

Modifier: Selon la réponse de Michael Dillon, SaveAsText enregistre les commandes dans une macro sans avoir à passer par la conversion en VBA. Je ne sais pas ce qui s'est passé quand j'ai testé cela, mais cela n'a pas produit de texte utile dans le fichier résultant.

Alors, j'ai appris quelque chose de nouveau aujourd'hui!

POSTE ORIGINAL: Pour développer la question, je me demandais s'il y avait un moyen de récupérer le contenu d'une macro à partir du code, et il ne semble pas qu'il y en ait (du moins pas dans A2003, ce que je suis exécuter).

Il existe deux collections à travers lesquelles vous pouvez accéder aux Macros stockées:

  CurrentDB.Containers("Scripts").Documents
  CurrentProject.AllMacros

Les propriétés identifiées par Intellisense pour les deux collections sont plutôt différentes, car les collections sont de types différents. La première (c'est-à-dire la manière traditionnelle, pré-A2000) se fait via une collection de documents, et les méthodes/propriétés/membres de tous les documents sont les mêmes, c'est-à-dire pas spécifiques aux Macros.

De même, le tout... collections de retour CurrentProject collections où les éléments individuels sont de type Access Object. Le résultat est que Intellisense vous donne des méthodes / propriétés / membres qui peuvent ne pas exister pour le document/objet particulier.

Pour autant que je sache, il n'y a aucun moyen de récupérer par programmation le contenu d'une macro.

Cela serait raisonnable, car les macros ne sont pas d'une grande utilité pour quiconque aurait la capacité d'écrire du code pour les examiner par programme.

Mais si vous voulez juste évaluer quoi les macros le font, une alternative serait de les convertir en VBA, ce qui peut être fait par programmation ainsi:

  Dim varItem As Variant
  Dim strMacroName As String

  For Each varItem In CurrentProject.AllMacros
    strMacroName = varItem.Name
    'Debug.Print strMacroName
    DoCmd.SelectObject acMacro, strMacroName, True
    DoCmd.RunCommand acCmdConvertMacrosToVisualBasic
    Application.SaveAsText acModule, "Converted Macro- " & strMacroName, _
      CurrentProject.Path & "\" & "Converted Macro- " & strMacroName & ".txt"
  Next varItem

Ensuite, vous pouvez utiliser les fichiers texte résultants pour tout ce que vous devez faire.

Notez que cela doit être exécuté de manière interactive dans Access car il utilise DoCmd.RunCommand, et vous devez cliquer sur OK pour chaque macro-fastidieux pour les bases de données avec beaucoup de macros, mais pas trop onéreux pour une application normale, qui ne devrait pas avoir plus d'une poignée de macros.

5
répondu David-W-Fenton 2009-10-15 03:33:17

Cela a fait l'affaire pour moi: j'ai pu trouver quelle macro appelait une requête particulière. Incidemment, la raison pour laquelle quelqu'un qui sait comment coder en VBA voudrait écrire quelque chose comme ceci est quand il a hérité de quelque chose de macro-ish écrit par quelqu'un qui ne sait pas coder en VBA.

Function utlFindQueryInMacro
       ( strMacroNameLike As String
       , strQueryName As String
       ) As String 
    ' (c) 2012 Doug Den Hoed 
    ' NOTE: requires reference to Microsoft Scripting Library
    Dim varItem As Variant
    Dim strMacroName As String
    Dim oFSO As New FileSystemObject
    Dim oFS   
    Dim strFileContents As String
    Dim strMacroNames As String
    For Each varItem In CurrentProject.AllMacros
    strMacroName = varItem.Name
    If Len(strMacroName) = 0 _
    Or InStr(strMacroName, strMacroNameLike) > 0 Then
        'Debug.Print "*** MACRO *** "; strMacroName
        Application.SaveAsText acMacro, strMacroName, "c:\temp.txt"
        Set oFS = oFSO.OpenTextFile("c:\temp.txt")
        strFileContents = ""
        Do Until oFS.AtEndOfStream
            strFileContents = strFileContents & oFS.ReadLine
        Loop
        Set oFS = Nothing
        Set oFSO = Nothing
        Kill "c:\temp.txt"
        'Debug.Print strFileContents
        If InStr(strFileContents, strQueryName)     0 Then
            strMacroNames = strMacroNames & strMacroName & ", "
        End If
    End If
    Next varItem
    MsgBox strMacroNames
    utlFindQueryInMacro = strMacroNames
 End Function
0
répondu Doug Den Hoed 2012-10-29 11:41:55

Dans Access 2010, accédez à L'onglet Créer du ruban. Cliquez Sur La Macro. Un panneau "Catalogue D'actions" devrait apparaître sur le côté droit de l'écran. En dessous, il y a une section intitulée " Dans cette base de données."En cliquant sur l'un des noms de macro devrait afficher son code.

-1
répondu 2013-08-08 21:45:32