codememo

사용자가 이전 버전의 MS Office(MS Outlook)를 설치하여 Excel VBA 컴파일 오류를 방지합니까?

tipmemo 2023. 6. 27. 22:15
반응형

사용자가 이전 버전의 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

반응형