Я предполагаю, что один или несколько пользователей имеет различную версию IE. Когда они открывают файл, он (re) устанавливает ref в свои версии .dll, а затем ref ссылается на него. Я предполагаю, что их версия выше, основанная на проблемах, которые у меня были в прошлом. Вероятно, вы можете проверить, проверяя свойства для ieframe.dll и mshtml.tbl на всех машинах.
У меня возникли аналогичные проблемы, возникающие при использовании Excel/Word/ETC в Access, когда у пользователей разные версии офиса. Я решил, создав объект из его самого общего класса, а не используя ссылки. Плюсы не требуются, и версии обычно не имеют значения. Минусы: вы не получаете информацию о браузерах объекта, иногда версии имеют значение, не могут использовать WithEvents и некорректно кодируются, поэтому вам нужно знать, что вы делаете.
Вот пример использования IE без ссылок. Просто вставьте его в новый модуль этого рабочего файла Excel, чтобы проверить его.
Function IEWithNoRefs() As Long
Dim ie As Object
Dim doc As Object
Dim elm As Object
Set ie = CreateObject("InternetExplorer.Application", vbNullString) 'create a generic IE Application Object
'NOTE: you probably don't need 'Microsoft HTML Object Library' at all
ie.Visible = True 'use it just as you would when referenced...the only dif is you wont get anything when typing a period
ie.navigate "https://google.com"
While ie.ReadyState <> 4 'sort of simulating WithEvents OnDocumentComplete; probably a better way, but regardless....you can't work with Document until it's loaded!
DoEvents
Wend
Set doc = ie.Document 'generic ref to IE's document object
Set elm = doc.getelementsbytagname("input")(0) 'generic ref to the first <input in the docs elements list
MsgBox elm.Name 'proove that we have valid ref
ErrHandler:
Set elm = Nothing
Set doc = Nothing
Set ie = Nothing
If err.Number <> 0 Then
MsgBox err.Description, vbExclamation, "Error " & err.Number
End If
End Function
Это должно работать на любом компьютере с установленным IE, независимо от его версии.
Если вы просто выполняете базовое взаимодействие с DOM, то тонкие различия в версии не должны быть проблемой. (Но, конечно, они могли бы!)
Скорее всего, что в текущем коде, вы можете просто удалить ссылки, заменить:
Dim ie As New InternetExplorer
Set ie = New InternetExplorer
с
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application", vbNullString)
и изменить любую существующую переменную/parameter для Object.
От:
Dim doc As IHTMLDocument 'requires reference
Function SomeFunction(doc As IHTMLAnchorElement)
To:
Dim doc As Object 'does not require reference
Function SomeFunction(doc As Object)
Остальная часть кода может очень хорошо работать нормально после этого делать :)