2011-09-09 2 views
0

나는 원래 Excel 문서 용으로 의도 된 VBA 코드를 사용하고 있습니다. Word에서 사용하기 위해 코드를 소매 할 수는 있지만 응용 프로그램을 확장하여 MS Office 응용 프로그램과 잠재적으로 호환 될 수 있다고 생각합니다. 그러나 나는 그렇게하는 법을 완전히 모릅니다.실행중인 Office 응용 프로그램 VBA 코드를 확인하는 방법은 무엇입니까?

If libDir = "" Then libDir = ThisWorkbook.Path 

난 그냥에서는 ActiveDocument와에서 ThisWorkbook를 교체해야 말씀이 확장 : 엑셀 기반의 코드가 문서의 경로를 가져옵니다 예를 들어

.

하지만 어느 Office 응용 프로그램이 VBA 코드를 실행하고 있는지 확인할 수 있으므로 둘 다 유지할 수 있습니다.

'IF VBA run from Word Then 
    If libDir = "" Then libDir = ThisWorkbook.Path 
'ELSE VBA run from Excel then 
    If libDir = "" Then libDir = ActiveDocument.path 
'End If 

지금까지 제가 말씀 여부를 확인하거나 열려있는 엑셀 수 있다는 것을 볼 수 있지만 나는이 열려 있기 때문에 특정 모듈 것을 실행 중임을지지 않습니다. 하지만 그건 내 VBA 지식을 넘어선 것입니다.

나는 또한 이것을 시도했지만 currentproject.path하지만 작동하지 않습니다. 사전

+0

하하, 의견을 주셔서 감사합니다. 그것이 사실이라면 불가능할 것이므로, 그때 나는 그 해결책을 찾지 않을 것입니다. 헤헤 – Mallow

답변

1

에서

덕분에 다양한 오피스 애플리케이션에 맞게 도구까지 코드에 노력하고 복잡한 소리 않습니다. 그리고이 코드는 단어와 엑셀로 적용 할 수 있다면 어떨까요? 아마도 vbscript를 사용하고 작업하려는 객체를 자동화하는 것은 옵션입니다

위의 특정 예에서 실제로 컴파일 될 것입니다. xl2003, xl2010 및 word2010에서 테스트 됨) 오류 처리로 인해 코드가 실행되고 문제가있는 부분은 건너 뜁니다.

On Error Resume Next 
    If libDir = "" Then libDir = ThisWorkbook.Path 
    If libDir = "" Then libDir = ActiveDocument.Path 
On Error GoTo 0 

파일을 저장하지 않으면 경로가 존재하지 않습니다.

2

나는 이것에 대한 필요성을 발견했으며 어떤 종류의 조건부 컴파일이나 응용 프로그램을 구분하는 다른 방법을 찾는데 어려움을 겪었습니다.

직감적으로 각 사무실 앱의 Application 개체에 .Name 및 .Version String 속성이 있다는 것을 알게되었습니다. 전반적인 의도는 구축에 사용할 수있는 VBA 코드 기반을 다시 사용하는 경우

Private Sub TestApplication() 
    Select Case Application.Name 
    Case "Microsoft Word" 
     MsgBox "Running in Word " + Application.Version 
    Case "Microsoft Excel" 
     MsgBox "Running in Excel " + Application.Version 
    Case "Microsoft PowerPoint" 
     MsgBox "Running in PowerPoint " + Application.Version 
    Case "Microsoft Visio" 
     MsgBox "Running in Visio " + Application.Version 
    Case "Microsoft Access" 
     MsgBox "Running in Access " + Application.Version 
    Case "Outlook" 
     MsgBox "Running in Outlook " + Application.Version 
    Case Else 
     MsgBox "Unknown Application " + Application.Name + " " + Application.Version 
    End Select 
End Sub 
3

: 그래서 당신이에서 실행중인 응용 프로그램을 결정하기 위해 같은

그래서, 당신은 몇 가지 코드를 할 수 모든 Office 응용 프로그램에서 더 좋은 방법은 조건부 컴파일을 사용하는 것입니다. 조건부 컴파일 인수 '워드'와 '엑셀을 설정하여

Private Sub TestApplication() 
    #If Word then 
     MsgBox "Running in Word " + Application.Version 
    #ElseIf Excel 
     MsgBox "Running in Excel " + Application.Version 
    #Else 
     MsgBox "Running in SomeOtherApplication " + Application.Version 
    #End if Case "Microsoft PowerPoint" 
End Sub 

(다른 응용 프로그램을 모두가 #Else 잡히면되었다.)

: 위의 TestApplication의 예에서 처음 두 경우는 다음과 같을 것이다 '적절한 재사용 코드를 포함하는 VBProject의 속성에서 해당 구현에 필요한 코드 만 컴파일되도록 할 수 있습니다. 예 :Word에서 사용하기 위해 필요한 조건부 컴파일 인수는 다음과 같습니다


말씀이 = -1 : Excel에서 = 0


, 워드 = TRUE : 용 Excel은 = 거짓이다 필요한 설정 코드를 Word 전용 응용 프로그램으로 컴파일합니다.

하나의 최종 일반 팁 :
조건부 컴파일 인수의 값을 설정할 때 항상 True로 -1을 사용하십시오. 나중에 명령문의 의도를 취소하기로 결정한 경우 NOT을 추가하여 의도를 쉽게 변경할 수 있습니다. 이는 다음과 같은 이유로 좋은 아이디어입니다.

아시다시피 VBA 조건문은 조건문에서 0이 아닌 값을 true로 처리합니다. 예 : this GoTo Label Line10 :
If 5 Then GoTo LINE10 이러한 조건에 따라 무언가를하지 않도록 명령문의 의도를 변경하려고 시도하기 전까지는 문제가 없습니다. 이 문은 여전히 ​​GoTo Line10이됩니다.
If NOT 5 Then GoTo LINE10
NOT 연산자는 -1 이외의 숫자를 False (즉, 0)로 해석하지 않습니다.

관련 문제