사용자가 이전 버전의 MS Office(MS Outlook)를 설치하여 Excel VBA 컴파일 오류를 방지합니까?
VBA 편집기에서 MS Outlook 14.0 개체 라이브러리를 참조한 스프레드시트가 있고 MS Outlook 12.0만 설치된 사용자가 있는 경우 해당 사용자가 스프레드시트를 열 때 다음 행에 컴파일 오류가 표시됩니다.
Range("export_date") = Date - 1
참조 목록에서 도구, 참조로 이동하면 다음 오류가 발생합니다.
MISSING: MS Outlook 14.0 Object Library
라이브러리 선택을 취소하고 대신 선택하는 경우
MS Outlook 12.0 개체 라이브러리
...코드가 제대로 컴파일되고 스프레드시트가 제대로 작동합니다.
저는 그것이 Outlook 기능이 아니라 VBA 기능이기 때문에 Date() 기능에서 실패하는 이유를 잘 이해하지 못합니다.하지만 더 중요한 것은, 이 상황을 피할 수 있는 방법이 있을까요?제가 생각할 수 있는 유일한 방법은 참조를 설정하지 않고 Object 유형의 변수를 사용하여 CreateObject("Outlook")를 통해 인스턴스화하는 것입니다."응모") 등, 하지만 강한 타이핑 등을 포기하는 것은 싫습니다.
이전 버전의 MS Office와 하위 호환성 문제를 처리할 수 있는 우수한 방법을 제안할 수 있는 사람이 있습니까?
tbone은 "Early Binding"이라고 합니다.
안타깝게도 Early Binding의 단점 중 하나는 최종 사용자가 사용자와 동일한 버전을 가지고 있지 않으면 이러한 오류가 발생한다는 것입니다.
만약 당신이 나에게 묻는다면, 나는 Late Binding(참조를 만들지 않고 CreateObject를 사용하여 인스턴스를 만드는 것)을 선호합니다.
재미있는 읽을거리.
주제: Automation에서 초기 바인딩 및 후기 바인딩 사용
링크: http://support.microsoft.com/kb/245115
나의 제안
지능 때문에 좋다면 얼리 바인딩을 포기하지 마세요.그러나 응용프로그램을 배포하기 전에 코드를 Latebinding(지연 바인딩)으로 변경합니다.얼리 바인딩과 레이트 바인딩에서 코딩하는 방식에는 큰 차이가 없습니다.
여기 예가 있습니다.
얼리 바인딩
'~~> Set reference to Excel Object Library
Sub Sample()
Dim oXLApp As Excel.Application
Dim oXLBook As Excel.Workbook
Dim oXLSheet As Excel.Worksheet
'~~> Create a new instance of Excel
Set oXLApp = New Excel.Application
'~~> Add a new workbook
Set oXLBook = oXLApp.Workbooks.Add
Set oXLSheet = oXLBook.Worksheets(1)
'
'~~> Rest of the code
'
End Sub
늦은 바인딩
'~~> Doesn't require a reference to Excel Object Library
Sub Sample()
Dim oXLApp As Object
Dim oXLBook As Object
Dim oXLSheet As Object
'~~> Create a new instance of Excel
Set oXLApp = CreateObject("Excel.Application")
'~~> Add a new workbook
Set oXLBook = oXLApp.Workbooks.Add
Set oXLSheet = oXLBook.Worksheets(1)
'
'~~> Rest of the code
'
End Sub
HTH
시드
조건부 컴파일을 사용합니다!ex:
#if Updating then
...late binding
#Else
...early binding
#End If
언급URL : https://stackoverflow.com/questions/9491314/preventing-excel-vba-compile-errors-due-to-users-having-an-older-version-of-ms-o
'codememo' 카테고리의 다른 글
| 코덱 구성Spring Boot >= 2.0.1.REASE로 ZoneDateTime을 MongoDB에 저장할 때 예외 발생 (0) | 2023.06.27 |
|---|---|
| UnicodeError: 'charmap' 코덱을 인코딩할 수 없음 - 에 대한 문자 맵, 인쇄 함수 (0) | 2023.06.27 |
| Oracle 문제의 매개 변수화된 쿼리 (0) | 2023.06.27 |
| 분류법 슬러그가 포함된 Wordpress 사용자 지정 유형 퍼멀링크 (0) | 2023.06.27 |
| 테스트를 위한 인메모리 MongoDB? (0) | 2023.06.27 |