Tools references in excel vba

Return to VBA Code Examples

This tutorial will explain what a reference is and how to use them in the VBA Editor

If you are working in Excel VBA, and you wish to work with Objects available in a different application – like Microsoft Word for example, you need to add a reference to the object library of that application.

Adding a reference to your VBA Project

In the VBE Window, click on the Tools menu and then click References…

vba reference

Scroll down through the list of references to find the one you want to use.  In this case, the Microsoft Word 16.0 Object Library.

vba reference word object library

Click OK.

Viewing the Object Library

Once you have added a reference to the database, you can use the objects that are associated with the application to which you have referenced.  The OBJECT LIBRARY for that particular application is now available for you to use within Excel.

Click on the Object Browser button on the Standard toolbar.

vba reference show object browser

OR

Click on the View menu, and select Object Browser.

vba reference menu object browser

Select Word from the drop down list

vba reference word reference

You will now be able to view all the objects as well as their methods and properties that you can now use within your the Excel VBA code.

vba reference word document

Using the Reference in an Excel Procedure

Once you have created a reference, you can use the objects from the object library in your VBA code in Excel.  The procedure below will create a new Word Document and make Word visible on your screen.

Sub CreateWordDocument()
   Dim wdApp As Word.Application
   Dim wdDoc As Word.Document
'open word
   Set wdApp = New Word.Application
'create a document
   Set wdDoc = wdApp.Documents.Add
'type some stuff
   wdApp.Selection.TypeText "Good morning Melanie!"
'show word on the screen
   wdApp.Visible = True
End Sub

vba referenced word doc

Early vs Late Binding

Adding a reference to an Object Library in your project is known as Early Binding.  This makes all the objects from that Object Library available to be used programmatically in your VBA Project.  As you have already added a reference to the Microsoft Word Object Library in the procedure above, we are able to ref directly to the Word Application and the Word Document when we declare the wdApp and wdDoc variables by using the New method.

However, you can still use the Object Library of a different application without adding a reference to it in your code.  You would need to declare the wdApp  and wdDoc variables as Objects and then you would need to use the CreateObject method rather than the New method to create a new instance of Microsoft Word.

Sub CreateWordDocument()
   Dim wdApp As Object
   Dim wdDoc As Object
'open word
   Set wdApp = CreateObject("Word.Application")
'create a document
   Set wdDoc = wdApp.Documents.Add
'type some text
   wdApp.Selection.TypeText Text:="Good morning Melanie!"
'show word on the screen
   wdApp.Visible = True
End Sub

Using Late Binding is useful if the program that you are creating is going to be used on multiple machines.    If a user has a different version of Microsoft Office than you do they may not have the correct file on their PC for the Object Library.    For example if you are using Excel version 16, but they are using Excel version 15, they may end up with a missing reference.

vba reference missing

You can easily fix this by removing the tick next to the missing reference, and then scrolling down to find the correct reference and ticking that instead.

vba reference missing fixed

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

Хитрости »

24 Февраль 2012              91410 просмотров


Иногда бывает необходимо перенести что-то из Excel в другое приложение. Я возьму для примера Word. Например скопировать ячейки и вставить. Обычно мы это так и делаем — скопировали в Excel, открыли Word — вставили. Но сделать это при помощи кода чуть сложнее, хотя если разобраться никаких сложностей нет. Ниже приведен пример кода, который открывает Word, открывает в нем определенный документ, копирует данные из Excel и вставляет в открытый документ Word.

Sub OpenWord()
    Dim objWrdApp As Object, objWrdDoc As Object
    'создаем новое приложение Word
    Set objWrdApp = CreateObject("Word.Application")
    'Можно так же сделать приложение Word видимым. По умолчанию открывается в скрытом режиме
    'objWrdApp.Visible = True
    'открываем документ Word - документ "Doc1.doc" должен существовать
    Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
    'Копируем из Excel диапазон "A1:A10"
    Range("A1:A10").Copy
    'вставляем скопированные ячейки в Word - в начала документа
    objWrdDoc.Range(0).Paste
    'закрываем документ Word с сохранением
    objWrdDoc.Close True    ' False - без сохранения
    'закрываем приложение Word - обязательно!
    objWrdApp.Quit
    'очищаем переменные Word - обязательно!
    Set objWrdDoc = Nothing: Set objWrdApp = Nothing
End Sub

Скачать пример:

  Tips_Macro_OpenWord.xls (49,5 KiB, 6 264 скачиваний)

В файле-примере, приложенном к данной статье, в комментариях к коду есть несколько добавлений. Например, как вставить текст из ячеек в определенные закладки Word-а и как добавить новый документ, а не открывать уже имеющийся. Так же так есть код проверки — открыто ли приложение Word в данный момент. Порой это тоже может пригодиться, чтобы работать с запущенным приложением Word, а не создавать новое:

Sub Check_OpenWord()
    Dim objWrdApp As Object
    On Error Resume Next
    'пытаемся подключится к объекту Word
    Set objWrdApp = GetObject(, "Word.Application")
    If objWrdApp Is Nothing Then
        'если приложение закрыто - создаем новый экземпляр
        Set objWrdApp = CreateObject("Word.Application")
        'делаем приложение видимым. По умолчанию открывается в скрытом режиме
        objWrdApp.Visible = True
    Else
        'приложение открыто - выдаем сообщение
        MsgBox "Приложение Word уже открыто", vbInformation, "Check_OpenWord"
    End If
End Sub

В принципе, активировать или вызвать(если закрыто) другое приложение Офиса можно одной строкой:

Sub Open_AnotherApp()
    Application.ActivateMicrosoftApp xlMicrosoftWord
End Sub

но данный метод может пригодиться только в том случае, если Вам необходимо действительно лишь активировать другое приложение, но дальше обращаться к этому приложению Вы уже не сможете.

По сути, методами CreateObject и GetObject можно обратиться к любому стороннему приложению(например Internet Explorer). Куда важнее при обращении к этим объектам знать объектную модель того приложения, к которому обращаетесь. Чтобы увидеть свойства и методы объектной модели приложения, можно в редакторе VBA подключить необходимую библиотеку, объявить переменную, назначив ей тип приложения. Покажу на примере того же Word-а.
Для начала открываем меню Tools -References:

Подключаем библиотеку:

Затем объявляем переменную и присваиваем ей тип нужного приложения:

Sub OpenWord()
    Dim objWrdApp As Word.Application
    Set objWrdApp = New Word.Application
    objWrdApp.Visible = True
End Sub

Если теперь в редакторе, внутри этой процедуры в любом месте ниже объявления переменной набрать objWrdApp и точку, то сразу после ввода точки выпадет меню, в котором будут перечислены все доступные методы и свойства этого приложения.

Так же можно нажать F2 и через поиск найти Word и просмотреть все методы и свойства данного приложения.

Метод установки ссылки на библиотеку приложения через ToolsReferences называют еще ранним связыванием. Подобный метод позволяет создать ссылку на приложение быстрее и, как описано выше, предоставляет разработчику доступ к визуальному отображению свойств и методов объекта. Но есть существенный минус: если в своем коде Вы установите ссылку на Word 12 Object Libbary(Word 2007), то на ПК с установленным Word 2003 получите ошибку MISSING, т.к. Word 2003 относится к библиотеке Word 11 Object Libbary. Подробнее можно прочитать в статье Ошибка — Cant find project or library.
Метод же CreateObject еще называется методом позднего связывания. Применяя его не возникнет проблем с MISSING, очень часто возникающих при раннем связывании. Поэтому я рекомендовал бы при разработке использовать раннее связывание для удобства использования свойств и методов(если Вы их не знаете), а перед распространением приложения в коде заменить все именованные константы(типа wdLine) на числовые константы(для wdLine это 5) и применить позднее связывание. Посмотреть числовое значение константы можно просто записав её в коде, начать выполнение кода через F8 и навести курсор мыши на эту константу. Всплывающая подсказка покажет числовое значение. Так же можно отобразить окно Immediate(ViewImmediate Window или сочетание клавиш Ctrl+G), записать вопросительный знак и вставить эту константу и нажать Enter:
?wdLine
ниже будет выведено числовое представление этой константы.
А заменять эти константы их числовыми значениями в случае с поздним связыванием необходимо, т.к. Excel не знает их значений.
Попробую пояснить поподробнее про эти константы и почему их надо заменять какими-то числами: при подключении библиотеки Wordа(Word 12 Object Libbary) мы так же подключаем и все свойства, методы и константы, которые доступны из Wordа. И их использование напрямую становится доступно из Excel и мы можем смело написать что-то вроде wbLine и Excel поймет эту константу. При позднем же связывании мы уже не подключаем библиотеки Word(во избежание ошибок совместимости) и как следствие — методы, свойства и константы Wordа для Excel становятся чем-то неизвестным и не документированным и мы получим ошибку «Variable not defined»(если включена директива Option Explicit) при попытке назначить свойство через wdLine. Если же Option Explicit не включена — то хоть ошибки не будет, но и код будет работать неверно, т.к. для неизвестной для Excel переменной wbLine будет назначено значение 0(Empty). Поэтому и надо все константы другого приложения заменять их числовыми значениями.

Главная ошибка новичка
И хочу так же упомянуть про ошибку, которую очень часто совершают при обращении к одному приложению из другого. Допустим, необходимо скопировать из Word все данные в Excel. Часто начинающие делают это так:

Sub OpenWord()
    Dim objWrdApp As Object, objWrdDoc As Object
    'создаем новое приложение Word
    Set objWrdApp = CreateObject("Word.Application")
    'Можно так же сделать приложение Word видимым. По умолчанию открывается в скрытом режиме
    'objWrdApp.Visible = True
    'открываем документ Word - документ "Doc1.doc" должен существовать
    Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
    'Копируем из Word все данные, обращаясь к объекту Range документа
    Range.Copy
    'вставляем скопированное в ячейку А1 активного листа Excel
    ActiveSheet.Paste
    'закрываем документ Word без сохранения
    objWrdDoc.Close False
    'закрываем приложение Word
    objWrdApp.Quit
    'очищаем переменные Word - обязательно!
    Set objWrdDoc = Nothing: Set objWrdApp = Nothing
End Sub

На строке Range.Copy обязательно получите ошибку от VBA, указывающую, что нужен аргумент для объекта. Можно попробовать добавить этот аргумент: Range(1).Copy. Но все равно получим ошибку. Можно, конечно, указать даже ячейки: Range(«A1»).Copy. Но это приведет к тому, что скопирована будет ячейка А1 активного листа Excel.
Все дело в том, что мы хотим скопировать данные из Word-а, выполняя при этом код из Excel. А у Excel тоже есть объект Range с другими аргументами. И если не указать какому приложению, листу или документу принадлежит Range, то по умолчанию он будет отнесен к тому приложению, из которого выполняется код. Т.е. к Excel. Если совсем кратко об этом — всегда надо указывать какому приложению или объекту принадлежит используемый объект или свойство. Правильно код должен выглядеть так:

Sub OpenWord()
    Dim objWrdApp As Object, objWrdDoc As Object
    'создаем новое приложение Word
    Set objWrdApp = CreateObject("Word.Application")
    'Можно так же сделать приложение Word видимым. По умолчанию открывается в скрытом режиме
    'objWrdApp.Visible = True
    'открываем документ Word - документ "Doc1.doc" должен существовать
    Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
    'Копируем из Word все данные, обращаясь к объекту Range документа
    'при этом перед Range явно указываем откуда его брать - из документа Word -objWrdDoc("C:Doc1.doc")
    objWrdDoc.Range.Copy
    'вставляем скопированное из Word в активную ячейку активного листа Excel
    ActiveSheet.Paste
    'закрываем документ Word без сохранения
    objWrdDoc.Close False
    'закрываем приложение Word
    objWrdApp.Quit
    'очищаем переменные Word - обязательно!
    Set objWrdDoc = Nothing: Set objWrdApp = Nothing
End Sub

Вместо Range ту же ошибку делают и с Selection(потому что Selection часто присутствует в записанных макрорекордером макросах), т.к. этот объект есть и в Excel и в Word и без явного указания приложения будет относится к приложению, в котором записано.


В приложенном файле код немного отличается от представленных выше — в нем можно посмотреть как вставить текст из ячеек в определенные(созданные заранее) закладки Word-а. Это удобно для создания бланков в Word и заполнения их через Excel

Скачать пример:

  Tips_Macro_OpenWord.xls (49,5 KiB, 6 264 скачиваний)


А в архиве ниже — практически готовое решение заполнения всевозможных бланков Word из Excel. Как это работает. У нас есть таблица Excel с данными для заполнения бланков заявлений на пособия:
Исходная таблица
Обращаю внимание, что в первой строке расположены метки. Они нужны для того, чтобы код мог понять значения какого столбца в какое место шаблона Word должны попасть. А в самом шаблоне Word мы должны проставить эти самые метки:
Шаблон Word с метками
Фигурные скобки сделаны для того, чтобы код 100% искал и заменял только метку в шаблоне, исключая при этом замену случайного текста вне скобок(ведь слово «Должность» может встречаться и само по себе).
А здесь я схематично привел то, как будут происходить замены:
Схема замен
Сначала программа создаст новую папку, в которую и будет сохранять создаваемые файлы(имя папки состоит из даты и времени запуска кода). Далее программа циклом пройдется по каждой строке таблицы, создаст на основании шаблона Word(«Шаблон.doc») новый файл для этой строки, заполнит этот шаблона данными на основании меток, и сохранит созданный файл под новым именем. Сам файл шаблона при этом не изменяется — все метки в нем сохраняются как были настроены до запуска кода. Конкретно в приложенном коде значение для имени нового файла берется из первого столбца «ФИО с инициалами». Но это можно изменить в коде при необходимости. Делается это в этой строке:

'считываем фамилию с инициалами
sWDDocName = .Cells(lr, 1).Value

Что еще важно: файл шаблона Word должен находиться в той же папке, что и файл с кодом. Название файла в приложенном к статье файле должно быть «Шаблон.doc». Но его так же можно изменить, не забыв изменив его в коде в этой строке:

'имя шаблона Word с основным текстом и метками
Const sWDTmpl As String = "Шаблон.doc"

В общем-то, если хоть чуть-чуть разбираетесь, то поменять можно многое. А для тех, кто не разбирается достаточно будет просто создавать метки в файле Word и обозначать ими столбца в таблице Excel. Количество столбцов и строк в таблице код определяет автоматически и при изменении размеров таблицы ничего изменять не надо. Главное, чтобы метки находились в первой строке, вторая строка — заголовок(необязательно), а с третьей строки начинаются данные, которые и используются для наполнения шаблонов.
Скачать пример:

  Автосоздание бланков Word из таблицы Excel.zip (37,6 KiB, 1 470 скачиваний)

Примеры работы с тем же Outlook можно посмотреть в моих статьях:
Как отправить письмо из Excel?
Сохранить вложения из Outlook в указанную папку


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Студворк — интернет-сервис помощи студентам

Здравствуйте.
Есть файл MS Excel 2016 с поддержкой макросов (XLSM). Если открыть Tools — References, мы увидим, что VBA-проект этого файла ссылается на необходимые в работе библиотеки MS*.OLB. Пути к этим библиотекам прописаны «железно», изменить их не удаётся.
Каждый пользователь в сети может скачать себе на локальный диск копию этого файла и работать с ним. Макросы, да и само содержимое файла время от времени обновляются, поэтому так же регулярно пользователи должны скачивать себе на локальный диск обновлённую версию этого файла.
Но далеко не у каждого пользователя необходимые OLB-библиотеки находятся именно в папках, указанных в References. Поэтому, если файлы в заданных папках отсутствуют, возникает ошибка Cannot find project or library.
Какие решения принимались мной.
1. Я вносил правки персонально на рабочих местах пользователя, заходил в References и прописывал там актуальные пути. Всё начинало работать корректно вплоть до момента, когда пользователь закачает себе обновлённую копию файла с сетевого ресурса. Все пути откатывались к старым, проект не находил нужные файлы и выдавал ту же ошибку Cannot find project or library.
2. Я просто добавлял нужные файлы в те папки, на которые ссылаются Референсы. При необходимости создавал новые папки. И всё работало — в том числе и при закачивании новой версии файла.
Внимание, вопрос.
Есть ли способ лучше? Я вижу некий алгоритм, который делает следующее:

1. Взять список необходимых в работе файлов.
2. Взять очередной файл.
3. Посмотреть, по какому пути он должен находиться в Референсах.
4. Посмотреть, находится ли он по этому пути.
4.1. Если находится, то просто перейти к следующему файлу.
4.2. Если отсутствует, то поменять привязку, взять этот файл по другому, заранее установленному пути (эти пути пусть тоже будут входными данными).
5. Если этот файл не последний, перейти к очередному в списке.
6. Ну и всё.

Если у кого-то был подобный опыт реализации, поделитесь, пожалуйста. Да и вообще, буду благодарен любым рекомендациям.


Asked by: Mr. Freddy Bergnaum MD

Score: 4.7/5
(4 votes)

You must make sure you press the stop button before you go to tools and references. If the macro keeps running or if the error is highlighted, the references part will still be grayed out and none of the measures described above would work.

How do I enable tools and references in VBA?

In VBA editor window, click the “Tools” button in the menu bar. Then, from the drop down list, select the “References” option. Subsequently, the “References – Project 1” dialog box will display.

How do I enable references in VBA?

Add A Reference

Make sure that you click on the workbook you want to add the reference to, and from the VBA editor menu choose Tools -> References. In the displayed list check the box beside your renamed add-in, and then click on OK. You’ll see that your workbook now has a new reference to the add-in.

How do I fix missing references in VBA?

To remove the missing reference, follow these steps:

  1. Open your database.
  2. Press ALT+F11 to open the Visual Basic Editor.
  3. On the Tools menu, click References.
  4. Click to clear the check box for the type library or object library marked as MISSING: <referencename>.

Why are my macros greyed out?

Generally, these options could be disabled by group policy settings controlled by your domain admins, if so, you could hardly to make a change without permission from them. If you are now home alone, try to check your group policy settings. Disable this setting if it is enabled.

36 related questions found

How do I enable macros greyed out in Word?

File tab => Excel Options => Trust Center => Trust Center Setting => Macro Settings to enable all macros.

How do I enable macro settings?

The macro settings are not changed for all your Office programs.

  1. Click the File tab.
  2. Click Options.
  3. Click Trust Center, and then click Trust Center Settings.
  4. In the Trust Center, click Macro Settings.
  5. Make the selections that you want, then click OK.

How do I remove a reference in VBA?

Remove a VBA Project Reference

  1. Image 2: Selecting the correct PDFCreator version.
  2. Image 3: Re-opening the menu shows that the incorrect PDFCreator version is selected.

How do I fix Mscal OCX error?

How to: How to solve missing MSCAL. OCX reference in Microsoft Access 2010

  1. Step 1: Resolution. …
  2. Step 2: Get the missing MSCAL. …
  3. Step 3: Copy. …
  4. Step 4: Register the calendar control tool (.OCX file) …
  5. Step 5: Accept the registration confirmation message. …
  6. Step 6: Test.

Can’t find project or library but no missing reference?

The first solution to fix the “Can’t Find Project or Library” error in MS Access is to remove a library reference. … Step 4: In the next dialog box, uncheck the “Missing: Microsoft Access Object” and click “Ok” to save your changes. Restart MS Access and check if you encounter the same error anymore or not.

What are references in VBA?

VBA allows you to add an object library or type library reference to your project, which makes another application’s objects available in your code. These additions to your VBA project are called references.

How do I add a DLL to VBA?

Make a C# dll.

  1. Run Visual Studio as Administrator. (You need elevated permissions to let Visual Studio register the DLL properly. …
  2. Create a new class library project.
  3. Add a class to the project and give that class the methods that you want the VBA code to be able to execute. …
  4. Set the project properties. …
  5. Build the project.

How do you call a different module in VBA?

To call a macro or function that is in the same workbook (it need not be in the same module) just type the name of the macro/function and any arguments it requires on one line of the calling macro. Another way is to prefix the macro/function called with the word Call.

How do you open a reference in Excel?

our Excel workbook

  1. Open Excel workbook and press Alt + F11 to get Visual Basic Editor (VBE)
  2. Go to the Tools menu and select References from the drop down menu.
  3. “References- VBAProject” dialog will appear.

How do you display References dialog box?

To open the References dialog box, point to the Script area of the MyCommands Advanced Scripting dialog box and right-click or press Shift+F10. On the shortcut menu that appears, click References.

How do you add references programmatically VBA?

There are two ways to add references using VBA. . AddFromGuid(Guid, Major, Minor) and . AddFromFile(Filename) . Which one is best depends on what you are trying to add a reference to.

How do I get Mscal OCX?

by clicking the Start Button -> Run -> Type the command: %systemroot%SysWoW64regsvr32.exe C:WindowsSysWoW64mscal. ocx and select the OK button.

What is Mscal OCX?

MSCAL. OCX is considered a type of COM file, or Component Object Model, most commonly known as an ActiveX control. ActiveX controls like MSCAL. OCX are used by Office and other software to display media-related content.

How do I register an OCX file?

  1. Select Start > Run (or in Windows 8, 7 or Vista press the Windows logo key + R key )
  2. Type Regsvr32 /u {Filename.ocx} [There is one space both before and after /u. Do not type the {} braces. …
  3. Click the OK button. …
  4. Then re-register the file by running Regsvr32 {Filename.ocx or .dll} (as described above.

What is late binding in VBA?

As Callum pointed out, late binding involves changing your application reference to an object and not setting a reference to the library. Without a reference Excel doesn’t know anything about Outlook until runtime.

How do I find references in Excel VBA?

The VBA reference list (figure 1) can be accessed by the VBE menu Tools > References sequence. The Available References list displays each reference item by its description property, in priority order. References are also part of the libraries drop-down in the Object Browser (figure 2).

How do I delete a VBA project?

On windows, open the workbook in question. Once opened, press ALT+F11 to open up the VBA editor. From there, right click on the module you want to delete in the left-hand navigation pane, and select DELETE (may be called REMOVE).

Why Excel macro is not working?

Macros may have been disabled in Excel

Macros have the potential to cause damage to your computer and can be the source of macro viruses. If this is set to Disable all macros without notification all macros will be disabled and the message offering to enable them won’t appear.

How do I enable macros in Excel 2016?

How To Enable Macros In Excel 2013-2016

  1. Click the File Tab (top-left most tab in the window)
  2. Click the Excel Options butto.
  3. Click Trust Center in the menu on the left.
  4. Click Trust Center Settings in the window on the right.
  5. In the new window that opens click Macro Settings in the menu on the left.
  6. Select Enable all macros.

Can not run the macro error?

Then through the Excel File Menu open the ‘Excel Options’ dialog . Select the ‘Save’ option from the list on the left side and then in ‘Save files in this format’ select «Excel Macro-Enabled Workbook (*. xlsm)». This should solve the issue.

Like this post? Please share to your friends:
  • Tools pdf24 org pdf в word
  • Tracking changes in word 2013
  • Transitional word and phrases
  • Tools in excel 2013
  • Tracked changes word убрать