почему этот код сломался?

У меня есть локальная машина (т.е. разработка) и виртуальная машина (т.е. производство). Между двумя я разрабатываю и поддерживаю несколько автоматических отчетов, используя Access, Excel и Lotus Notes.

Недавно мне поручили создать новый отчет, очень похожий на уже существующий. Итак, я просто скопировал соответствующий файл Access из Production обратно в Development, чтобы переработать его. И это не удалось. Путем проб и ошибок я сузил его до этого фрагмента:

Option Compare Database
Option Explicit
Global NtSession As lotus.NotesSession
Sub Main()
    Set NtSession = CreateObject("Notes.NotesSession")
    ...
End Sub

Опять же, этот код отлично работает в продакшене, но теперь он ломается, когда я пытаюсь запустить свою разработку (я получаю ошибку «Несоответствие типов» в CreateObject). Самый простой способ обойти это — просто разработать мой отчет в продакшне, но это противоречит цели, не говоря уже о странности, что раньше он работал на моей локальной машине, а теперь нет. Итак, почему это выдает ошибку на моем локальном компьютере (т.е. Dev), а не на виртуальном (т.е. Production)?


person PowerUser    schedule 23.05.2011    source источник
comment
Вы пытались сбросить ссылки (отменив выбор ссылки и выбрав ее снова)?   -  person Jacob    schedule 23.05.2011


Ответы (3)


Основываясь на ответе Кена, я предлагаю вам решить, хотите ли вы позднюю или раннюю привязку.

Global NtSession As Object
Set NtSession = CreateObject("Lotus.NotesSession")

or

Global NtSession As lotus.NotesSession
Set NtSession = New Lotus.NotesSession

Я просто не вижу смысла смешивать их, как в

Global NtSession As lotus.NotesSession
Set NtSession = CreateObject("Lotus.NotesSession")
person HansUp    schedule 23.05.2011
comment
Это имеет смысл (хотя и выдает ошибку уже на следующей строке). Но у меня вопрос, почему это работает только на 1 машине, а не на другой? Имейте в виду, что раньше он работал нормально на обоих. - person PowerUser; 24.05.2011
comment
По вашему второму предложению он жалуется, что я не могу использовать «Новый» таким образом. - person PowerUser; 24.05.2011

Lotus.NotesSession отличается от Notes.NotesSession. Возможно, вам просто нужно изменить строку CreateObject на:

Set NtSession = CreateObject("Lotus.NotesSession")
person Ken Pespisa    schedule 23.05.2011

Убедитесь, что COM-объект nlsxbe.dll установлен и правильно зарегистрирован на вашем компьютере для разработки. Может быть, отменить регистрацию и перерегистрировать его, чтобы быть уверенным. Выполните поиск в Google по запросу «регистрация nlsxbe.dll», чтобы получить дополнительные советы о проблемах, связанных с этим модулем, который следует установить (но, возможно, не зарегистрировать) как часть установки клиента Notes.

person RenniePet    schedule 14.11.2011