2012-04-12 11 views
15

Tôi vừa mới bắt đầu một công việc với một công ty mới, nơi các nhà phát triển trước đó đã tạo ra nhiều tác vụ tự động. Tất nhiên, hầu như không có tài liệu nào và tôi không có cơ hội làm việc với nhà phát triển trước đó nên bây giờ tôi đang cố sàng lọc qua tất cả các quy trình tìm kiếm một sửa đổi một số tệp cụ thể.Cách tìm kiếm thông qua các tệp mã VBA

Tôi đã viết tất cả các procs được lưu trữ trong SQL và sử dụng công cụ tìm kiếm và không tìm thấy thứ tôi đang tìm kiếm, vì vậy bây giờ tôi tự hỏi liệu quá trình tôi cần có nằm trong một trong nhiều cơ sở dữ liệu Access đã sử dụng. Với SQL Server, thật dễ dàng để viết một ứng dụng C# để viết các procs để tôi có thể tìm kiếm thông qua chúng, nhưng với Access có vẻ như tôi bị giới hạn mở mỗi db riêng lẻ để tìm kiếm thông qua các tệp mã.

Có cách nào để tìm kiếm theo chương trình thông qua các tệp mã VBA không?

+2

Không có ý tưởng nếu nó giống nhau ở Acess, nhưng đây là cách tôi muốn làm điều đó trong Excel: http://www.cpearson.com/Excel/vbe.aspx –

+2

Xem xét thông qua dự án này CodeProject cho ý tưởng - http://www.codeproject.com/Articles/18029/SourceTools-xla. Xem qua chức năng lưu dự án và cách chúng phân tích tất cả các tệp nguồn từ một dự án vba. – ja72

+0

@ ja72 Nếu add-inn đó sẽ làm việc cho Access, hoặc nếu tôi có thể sửa đổi nó để làm như vậy thì tôi sẽ cung cấp cho bạn một hi-five tăng gấp đôi nếu chúng ta gặp nhau. –

Trả lời

13

Nếu bạn quan tâm tìm kiếm mô-đun mã trong tệp cơ sở dữ liệu Access, bạn có thể sử dụng mô hình đối tượng VBE. Mẫu này tìm kiếm một từ trong tất cả các mô-đun của ActiveVBProject của cơ sở dữ liệu hiện tại. Nếu cơ sở dữ liệu bao gồm hơn một VBProject, bạn có thể liệt kê bộ sưu tập VBProjects và tìm kiếm các dự án cùng một lúc theo tên:

For Each objComponent In Application.VBE.VBProjects(ProjName).VBComponents 

Hoặc nếu bạn muốn tham khảo dự án theo số chứ không phải là tên, chỉ lưu ý rằng việc đánh số bắt đầu bằng 1 thay vì 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 

Xem lại chủ đề trợ giúp truy cập cho phương thức Find đó; bạn có thể thích các tùy chọn khác với tôi đã sử dụng.

Nếu bạn muốn nhắm mục tiêu nhiều tệp db và tìm kiếm các mô-đun trong mỗi tệp, bạn có thể tự động hóa điều này bằng phương thức OpenDatabase. Tôi sẽ để lại các chi tiết của phần đó cho bạn.

+0

Tôi cho rằng tôi cũng có thể sử dụng mô hình đối tượng VBE để đọc từng dòng của mỗi mô-đun và viết chúng ra một tệp văn bản, đúng không? Điều đó sẽ rất lý tưởng vì vậy tôi có thể sử dụng công cụ tìm kiếm văn bản mà tôi quen sử dụng thay vì cố gắng tạo công cụ của riêng mình. –

+0

Có, điều đó là có thể. Nhưng bạn có thể sử dụng Application.SaveAsText để lưu từng mô-đun dưới dạng tệp văn bản --- điều đó đòi hỏi ít nỗ lực mã hóa hơn. – HansUp

+0

+1 được thực hiện tốt. – brettdj

5

Tốt nhất để tải xuống miễn phí MZ-Tools cho VBA và sử dụng chức năng tìm kiếm/thay thế của chúng.

Start Find Find Results

Sửa

MZ-Tools cho VBA là không còn nữa. Phiên bản trả tiền hoạt động với các cài đặt văn phòng mới hơn.

+3

MZ-Tools là một bổ trợ tuyệt vời và tôi đã sử dụng nó mọi lúc khi tôi phát triển VB6, nhưng HansUp là đúng là tôi đang tìm một giải pháp không yêu cầu tôi mở các tệp riêng lẻ. –

3

Một tùy chọn khác, không được đề cập trước đây - là chỉ cần in Mã dự án, từ trình đơn ngữ cảnh, trong Trình chỉnh sửa VBA. Các bước dưới đây, có thể được sửa đổi, cho phù hợp với các ứng dụng có sẵn, nhưng kết quả là cùng một văn bản có thể tìm kiếm được.

Từ Trình chỉnh sửa VBA, nhấp chuột phải vào tên dự án và nhấp vào in, từ trình đơn ngữ cảnh xuất hiện. Đảm bảo "Mã" được chọn và nhấp "OK". Có thể thay đổi máy in, từ menu "Setup ...", có sẵn trong hộp thoại cuối cùng.

Right Click "Print" Check Box "Code"

Trên một mặt lưu ý - đứng một mình mô-đun, SQL, bảng biểu, vv, có sẵn cho in ấn, từ "Cơ sở dữ liệu Documenter", trong "Phân tích" nhóm, của "DATABASE CÔNG CỤ " chuyển hướng.

Rất hữu ích, để sắp xếp và phác thảo SQL cơ bản, truy vấn Access.

Database Documenter