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?
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.
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
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.
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
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.