2012-04-12 2 views
15

방금 ​​전 개발자가 많은 자동화 된 작업을 만든 새로운 회사에서 일을 시작했습니다. 물론, 사실상 문서가 없으며 이전 개발자와 작업 할 기회가 없었으므로 이제는 이러한 특정 프로세스를 탐색하여 특정 파일을 수정하는 방법을 모색하고 있습니다.VBA 코드 파일을 통해 검색하는 방법

SQL에 저장된 procs를 모두 스크립팅했고 검색 도구를 사용하여 찾고 있던 것을 찾지 못했습니다. 이제는 필요한 프로세스가 많은 Access 데이터베이스 중 하나에 있는지 궁금합니다. 익숙한. SQL Server를 사용하면 procs를 스크립팅하여 C# 응용 프로그램을 작성하여 검색 할 수 있었지만 Access를 사용하면 각 db를 개별적으로 열어 코드 파일을 검색하는 것처럼 보였습니다.

프로그래밍 방식으로 VBA 코드 파일을 검색하는 방법이 있습니까?

+2

: http://www.cpearson.com/Excel/vbe.aspx –

+2

이 CodeProject의 프로젝트를 통해 봐 아이디어 - http://www.codeproject.com/Articles/18029/SourceTools-xla. 프로젝트 저장 기능과 vba 프로젝트의 모든 소스 파일을 구문 분석하는 방법을 살펴보십시오. – ja72

+0

@ ja72 그 add-inn이 Access에서 작동한다면, 아니면 내가 수정할 수 있다면 수정할 수 있다면 우리는 만날 경우 두 배의 hi-five를 줄 것입니다. –

답변

13

Access 데이터베이스 파일에서 코드 모듈을 검색하고 싶다면 VBE 개체 모델을 사용할 수 있습니다. 이 샘플에서는 현재 데이터베이스의 ActiveVBProject에있는 모든 모듈에서 단어를 검색합니다. 데이터베이스가 하나 이상의 VBProject에 포함되어있는 경우, 당신은 VBProjects 수집을 열거하고 이름을 한 번에 프로젝트 하나를 검색 할 수 있습니다

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

을 아니면 오히려 이름이 아닌 번호로 프로젝트를 참조하는 것을 선호하는 경우, 단지 번호 매기기 1 오히려

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 

0보다 검토하는 것이 Find 방법에 대한 액세스 도움말 항목과 시작 인식; 내가 사용한 것보다 다른 옵션을 선호 할 수도 있습니다.

여러 개의 db 파일을 대상으로하고 각 모듈을 검색하려면 OpenDatabase 메서드를 사용하여 자동화 할 수 있습니다. 나는 그 부분의 세부 사항을 너에게 맡길거야.

+0

VBE 개체 모델을 사용하여 각 모듈의 각 줄을 읽고 텍스트 파일에 직접 쓸 수 있다고 가정합니다. 그렇게하면 내 자신을 만들려고하기보다는 익숙한 텍스트 검색 도구를 사용할 수있어 이상적입니다. –

+0

예, 가능합니다. 그러나 Application.SaveAsText를 사용하면 각 모듈을 텍스트 파일로 저장할 수 있으므로 코딩 작업이 덜 필요합니다. – HansUp

+0

+1 멋지게 완료되었습니다. – brettdj

5

VBA에 대해 무료 MZ-Tools을 다운로드하고 검색/바꾸기 기능을 사용하는 것이 가장 좋습니다.

Find Results

Start Find VBA에 대한 편집

MZ-도구는 더 이상 사용할 수 없습니다. 유료 버전은 최신 사무소 설치에서 작동합니다.

+3

MZ-Tools는 훌륭한 추가 기능이며 VB6 개발을 할 때마다 사용했지만 HansUp은 내가 개별 파일을 열 필요가없는 해결책을 찾고 있다고 정정하십시오. –

3

앞서 언급하지 않은 또 다른 옵션은 VBA 편집기의 상황에 맞는 메뉴에서 프로젝트 코드를 인쇄하는 것입니다. 아래의 단계는 사용 가능한 응용 프로그램에 맞게 수정할 수 있지만 결과는 검색 가능한 텍스트와 동일합니다.

VBA 편집기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 나타나는 상황에 맞는 메뉴에서 인쇄를 클릭하십시오. "코드"가 선택되어 있는지 확인하고 "확인"을 클릭하십시오. 마지막 대화 상자에서 사용할 수있는 "설정 ..."메뉴에서 프린터를 변경할 수 있습니다. 보조 노트에 Check Box "Code"

Right Click "Print"은 - 혼자 모듈 등 SQL, 테이블, 스탠드, "데이터베이스 도구의에서"분석 "그룹에서"데이터베이스 구조 분석 "에서 인쇄 할 수 있습니다 " 탭.

Access 쿼리의 기본 SQL 정렬 및 개요에 매우 유용합니다.

Database Documenter

는 여기 ACESS에서 동일하지만 경우에 어떤 아이디어는 내가 Excel에서 그것을 할 줄 방법은 없습니다
관련 문제