2016-07-02 3 views
0

У меня есть модуль, который просматривает веб-сайт и делает кучу вещей. При очистке кода я добавил тег Option Explicit и прекратил компиляцию.как включить ссылку на библиотеку Microsoft HTML Object Library при использовании опции explicit (excel-vba)?

Это работает в неприятности на следующей строке

dim objHTML As htmldocument

Я разыскал вопрос, и это потому, что я нахожусь на другом компьютере, и ссылка Библиотека объектов Microsoft HTML не был включен.

Итак, вопрос в том, как включить ссылку на библиотеку Microsoft HTML Object Library на использование vba таким образом, что я все еще могу скомпилировать опцию использования в явном виде?

+1

В VBE перейдите в Инструменты ► Ссылки, затем найдите библиотеку объектов Microsoft HTML и поставьте галочку рядом с ней. – Jeeped

+0

Я могу сделать это достаточно легко. Но некоторые люди, использующие эту электронную таблицу, не будут иметь знаний для этого. Так что я хочу, чтобы иметь возможность включить его для использования с помощью VBA, но когда я пытаюсь, он прекращает компиляцию из-за опционной явки –

+1

Он переносится с проектом VBA на другие компьютеры. Тем не менее, я опубликую позднее решение для связывания ниже. – Jeeped

ответ

1

Это называется «раннее связывание», и вы должны включить ссылку на библиотеку объектов HTML, отличную от стандартной по умолчанию. Сделайте это, зайдя в VBE и перейдите в Инструменты ► Ссылки, затем найдите библиотеку объектов Microsoft HTML и поставьте галочку рядом с ней.

Эта ссылка переносится вместе с проектом VBA и использование рабочего листа на другом компьютере не приведет к удалению ссылки. Вероятно, вы получили код из другого проекта VBA (или удобный сайт, например SO), и вставляли его в свой новый проект.

Однако вы можете использовать «позднее связывание», чтобы использовать одно и то же. Это делается с помощью VBA's CreateObject function, чтобы создать объект IE, у которого есть свой собственный документ. Вам просто нужно знать, какой объект создать.

Dim objIE As Object, objHTML As Object 

Set objIE = CreateObject("InternetExplorer.Application") 
objIE.Navigate2 "https://stackoverflow.com/questions/38164172/option-explicit-with-htmldocument" 

Do While objIE.busy Or objIE.readystate <> 4: DoEvents: Loop 

Set objHTML = objIE.document 
Debug.Print Left(objHTML.body.innertext, 1024) 
+1

Обычно я использую раннее связывание по умолчанию. Было бы лучше, если бы практика кодирования менялась до позднего связывания по умолчанию? –

+1

Никогда, никогда, никогда не используйте позднюю привязку, когда у вас есть выбор (и вы почти всегда это делаете). Позднее связывание не привносит в проект все свойства и метод (сценарий. Словарь является ярким примером), и если ничего другого, вы должны выполнить свою собственную капитализацию при написании кода. Раннее связывание выполняется быстрее (оно предварительно загружено) и предоставляет больше методов и свойств. Я использую только последнее связывание в примерах кода, потому что мне слишком ленив, чтобы переписать те же абзацы, объясняющие OP, какие ссылки включать и почему снова и снова. – Jeeped

Смежные вопросы