Comment faire une recherche dans les fichiers de code VBA
je viens de commencer un travail avec une nouvelle entreprise où les développeurs précédents avaient créé de nombreuses tâches automatisées. Bien sûr, il n'y a pratiquement aucune documentation et je n'ai pas eu la chance de travailler avec le développeur précédent, donc maintenant j'essaie de passer au crible tous ces processus à la recherche d'un qui modifie certains fichiers spécifiques.
j'ai scripté tous les procs stockés dans SQL et utilisé un outil de recherche et n'a pas trouvé ce que je cherchais, donc maintenant je me demande si le processus dont j'ai besoin est situé dans l'une des nombreuses bases de données D'accès qui sont utilisées. Avec SQL Server, il était facile d'écrire une application C# Pour script les procs afin que je puisse les chercher, mais avec Access il semble que je suis confiné à ouvrir chaque db individuellement pour rechercher à travers les fichiers de code.
y a-t-il un moyen de faire des recherches programmatiques dans les fichiers de codes VBA?
3 réponses
si votre intérêt est de rechercher des modules de code dans un fichier de base de données Access, vous pouvez utiliser le modèle d'objet VBE. Cet exemple recherche un mot dans tous les modules de ActiveVBProject
de la base de données actuelle. Si la base de données comprend plus d'un projet VB, vous pouvez énumérer la collection VBProjects et rechercher les projets un à la fois par nom:
For Each objComponent In Application.VBE.VBProjects(ProjName).VBComponents
Ou si vous préférez faire référence au projet par le nombre, plutôt que de nom, juste être conscient de la numérotation commence à 1 et non que 0.
Public Sub findWordInModules(ByVal pSearchWord As String)
'Dim objComponent As VBComponent
' VBComponent requires reference to Microsoft Visual Basic
' for Applications Extensibility; use late binding instead:
Dim objComponent As Object
Dim strMessage As String
Dim strModuleList As String
strModuleList = vbNullString
For Each objComponent In Application.VBE.ActiveVBProject.VBComponents
If objComponent.CodeModule.Find(pSearchWord, 1, 1, -1, -1) = True Then
strModuleList = strModuleList & "; " & objComponent.Name
End If
Next objComponent
strMessage = "Text '" & pSearchWord & "' found in "
If Len(strModuleList) > 0 Then
strMessage = strMessage & "modules: " & Mid(strModuleList, 3)
Else
strMessage = strMessage & "no modules"
End If
Debug.Print strMessage
End Sub
passez en revue le sujet de L'aide D'accès pour cela Find
méthode; vous pouvez préférer des options différentes de celles que j'ai utilisées.
si vous voulez cibler plusieurs fichiers db et rechercher les modules dans chacun, vous pouvez automatiser cela en utilisant le OpenDatabase
méthode. Je vous laisse les détails de cette partie.
une autre option, non mentionnée précédemment, consiste à simplement imprimer le Code du projet, à partir du menu contextuel, dans L'éditeur VBA. Les étapes ci - dessous, peuvent être modifiées, en fonction des applications disponibles, mais le résultat est le même-texte de recherche.
à partir de L'éditeur VBA, cliquez avec le bouton droit de la souris sur le nom du projet et cliquez sur Imprimer, à partir du menu contextuel qui apparaît. Assurez-vous que" Code "est coché, et cliquez sur"OK". L'imprimante peut être changée, à partir du "Setup"..."menu, disponible dans le dernier dialogue.
sur une note latérale - des modules autonomes, SQL, tables, etc, sont disponibles pour l'impression, à partir du" Documenter de base de données", dans le groupe" analyser", de l'onglet" Outils de base de données".
Très utile, pour le tri et décrivant SQL sous-jacente, de l'Accès des requêtes.