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?

15
demandé sur HK1 2012-04-12 09:48:37

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.

13
répondu HansUp 2014-05-16 23:36:22

pour télécharger gratuitement MZ-Tools pour VBA et utiliser leur fonction de recherche / remplacement.

Start FindFind Results

Modifier

MZ-les outils pour VBA ne sont plus disponibles. La version payante fonctionne avec de nouvelles installations de bureau.

5
répondu ja72 2016-04-25 19:28:52

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.

Right Click "Print" Check Box "Code"

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.

Database Documenter

4
répondu tahwos 2016-01-05 17:10:55