Как обратиться к книге excel vba

Обновлено: 18.07.2024

Следующий по иерархии после Application объект в объектной модели Excel — это объект Workbook, который представляет книгу Excel. Можно сказать, что объект Workbook занимает в Excel примерно то же место, что и объект Document в Word — он нужен для получения ссылки на нужную нам книгу в наборе открытых книг Excel, а также для настройки общих свойств и выполнения общих действий со всеми листами книги. Получить этот объект можно очень просто:

  • первый способ — воспользоваться коллекцией Workbooks, которая доступна через свойство Workbooks объекта Application. Впрочем, применять это свойство совершенно не обязательно — коллекция Workbooks в Excel и так постоянно доступна. Найти нужную книгу в этой коллекции можно по ее имени или номеру в коллекции:
  • второй способ — использовать свойство Application.ActiveWorkbook. При помощи этого свойства мы обращаемся к активной в настоящей момент книге:
  • третий способ — использовать свойство Application.ThisWorkbook. При этом мы обращаемся к той книге, которой принадлежит данный программный модуль:

На практике чаще всего нам нужно либо создать в Excel новую книгу, либо открыть существующую книгу (или другой файл в формате, который понимает Excel, например, DBF). Для этой цели используются методы Add() и Open() соответственно. Например, создать новую книгу в Excel можно так:

Dim oWbk As Workbook

Set oWbk = Workbooks.Add()

Единственный необязательный параметр, который принимает этот метод — имя шаблона, на основе которого создается новая рабочая книга.

Открытие существующей книги выглядит так:

Dim oWbk As Workbook

Set oWbk = WorkBooks.Open("C:\mybook1.xls")

Помимо стандартных, в коллекции Workbooks предусмотрено также три специальных метода:

  • OpenDatabase() — открыть базу данных, выполнить к ней запрос (или открыть таблицу/представление напрямую), а результаты запроса поместить как импортированные внешние данные в новую автоматически созданную рабочую книгу Excel;
  • OpenText() — почти то же самое, но в качестве источника здесь выступает текстовый файл. Дополнительные параметры позволяют определять его формат.
  • OpenXML() — в качестве источника данных будет выступать файл в формате XML.

Как и метод InsertDatabase() в Word, эти методы следует использовать только в самых простых случаях. Рекомендуется по возможности использовать более мощные и стандартные средства объектной модели ADO.

Теперь о самых важных свойствах объекта Workbook — самой рабочей книги:

  • Name, CodeName, FullName — разные имена этой книги. Самое простое имя — Name, это имя совпадает с именем файла книги. FullName — это имя файла книги вместе с полным путем к нему в операционной системе. CodeName — как эта книга будет называться в коде. CodeName можно посмотреть в окне Project Explorer или, если открыть свойства книги в окне Properties, кодовое имя книги будет представлено в строке (Name). Все три свойства доступны только для чтения, менять их можно другими способами (например, сохраняя файл под другим именем или прямо в окне Properties).

Определенное отношение к именам имеет также свойство Path (путь к файлу книги) .

  • Charts, Sheets, ActiveChart, ActiveSheet, CustomViews, BuiltinDocumentProperties и CustomDocumentProperties, Windows, WebOptions возвращают одноименные коллекции соответствующих объектов. Некоторые из этих объектов будут рассматриваться ниже.
  • ConflictResolution — как будут разрешаться конфликты изменения данных, если книга открыта несколькими пользователями сразу (shared workbook). Есть возможность сделать так, чтобы локальный пользователь автоматически выигрывал, автоматически проигрывал или возникало диалоговое окно с возможностью разобраться в конфликте вручную. Существует большое количество свойств, которые позволяют настроить параметры совместной работы с книгой, но по причине того, что такая работа не рекомендуется (данные для совместного доступа необходимо переносить в базу данных), рассматриваться они здесь не будут, за исключением:
    • запрещать/разрешать общий доступ к рабочей книге можно при помощи методов SaveAs() или ExclusiveAccess();
    • по умолчанию возможность совместного редактирования для книги отключена (проверить можно при помощи свойства MultiUserEditing);
    • получить список всех пользователей (а также когда они открыли файл и в каком режиме) можно при помощи свойства UserStatus.

    For Each Item In ThisWorkbook.Names

    Это свойство удобно использовать для предварительных проверок для устранения потенциальных ошибок времени выполнения.

    Методов у объекта Workbook также очень много, однако значения самых употребимых — Activate(), Close(), Save(), SaveAs(), PrintOut(), Protect() и Unprotect() очевидны и действуют аналогично одноименным методам объекта Document в Word.

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

    Доступ к внешней открытой книге через ADO
    Воспользовался нижеприведенным кодом одного из профессиональных консультантов нашего форума.

    Удаление всех пробелов столбца листа на уже открытой другой книге
    Как удалить из ячеек столбца A:A листа другой уже открытой книги все пробелы которые встречаются.


    Оставлять объект в памяти в открытой книге Excel после завершения всех макросов
    Создал пользовательский класс для объекта, в который я считываю исходные данные. Процесс их.

    Обращение к ячейкам открытой книги (не текущей)
    Макрос должен запускаться, спрашивать - какой файл ему взять. Открыть его, разделить определенную.

    Но я бы советовал взять 2 переменные, в одну (наприvер назову её aWbSh1) записать проверяемый лист текущей активной книги: aWbSh1=ActiveWorkBook.Sheets(НомерНужногоЛиста)
    а в другую (назову например MinMaxWbSh1) MinMaxWbSh1 = Workbooks("Min_max.xlsx").Sheets(1)
    И дальше обращаясь к Cells указывать конкретно переменную нужного листа, на котором эта ячейка. Поверьте - гораздо удобнее будет и меньше придётся искать почему вдруг перестало работать, хоть до этого работало как часы на другой машине у другого пользователя. Добавлено через 1 минуту
    Punkt5,
    после этого активной будет вновь открытая книга. ИМХО
    и, скорей всего надо будет сначала активировать книгу, а потом лист

    Так я пробовал, у меня была ошибка

    и все же оно работает. Спасибо большое, очень выручили! Зачем вообще активировать? Если открываем по указателям, активная вроде ж не изменится и останется на экране после обработки и закрытия того файла?
    Select и Activate при обработке макросом - зло. Исключение - некоторые оконные операции, типа ActiveWindow.Zoom = 85 Zeag,
    Справедливо! Но не на 100%
    Некоторые методы не работают Alex77755, например? Я себе сохраню, чтобы в другой раз не рыпаться. Помню, что на ActiveWindow.Zoom = 85 нарвался и пока не прочел, не работало. А что еще? Еще ActiveWorkbook приходится применять после Workbooks(*).Sheets(*).Copy, когда создаётся некий Book1.


    Excel обращение к книге по codename
    Даров, ребя. Можно ли напрямки обраться по коднейму к определённой книге из другой? А то.

    Запись/чтение в открытой книге Эксель
    Доброго времени суток. Я новичок в Python, пытаюсь автоматизировать небольшой процесс.

    Нужно чтобы столбик в одной книге преобразовать в строку в другой книге
    Здравствуйте. Нет ли какого изящного решения, чтобы столбик в одной книге преобразовать в строку в.

    Как организовать поиск в другой книге или в этой же книге, поиск по слову на определенных листах
    Всем привет!) Как организовать поиск в другой книге или в этой же книге, поиск по слову на.

    Запретить прямое обращение к скрипту, но разрешить обращение через RewriteEngine
    основной файл у меня index.php и в нем уже определяется какой файл подключить, к примеру .

    Хостинг с открытой БД
    Добрый день. Подскажите есть ли бесплатный хостинг с БД чтоб ее можно было редактировать (создавать.

    Существующая книга открывается из кода VBA Excel с помощью метода Open:

    В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.
    Проверить существование файла можно с помощью функции Dir:

    Или, если файл существует, можно сразу его открыть:

    Создание новой книги

    Новая рабочая книга Excel создается в VBA с помощью метода Add:

    Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:

    В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2.xls».

    Обращение к открытой книге

    Обращение к активной книге:

    Обращение к книге с выполняемым кодом:

    Обращение к книге по имени:

    Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.

    Как закрыть книгу Excel из кода VBA

    Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:

    Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close — SaveChanges:

    Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:

    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    30 комментариев для “VBA Excel. Рабочая книга (открыть, создать новую, закрыть)”

    Если речь идет об обновлении связей между книгами, то попробуйте так:

    Здравствуйте, Вячеслав!
    Для выбора книги в определённой папке используйте Стандартный диалог выбора файлов Application.GetOpenFilename.

    закрывает саму книгу, но при этом сама прога остаётся висеть со своим интерфейсом. Можно нажать Ctlr+O и открыть какой-нибудь xls-файл.
    При этом на компе могут быть открыты другие файлы, поэтому команда

    не допустима.
    Что делать?

    Сергей, используйте глобальные переменные, если файл Excel открывается и закрывается разными процедурами (переменные позволят закрыть тот самый файл и тот самый экземпляр приложения, в котором открыт файл):

    Set myWorkbook = myExcel . Workbooks . Open ( "C:\Users\. xlsx" )

    А как открывать книгу, если имя файла совпадает с названием из массива.
    То есть есть массив переменных которые записаны в столбец начиная с столбца А строки 2. Названия всегда разные.но совпадают с названием файла. Можно ли поочередно открыть их для редактирования через VBA

    Привет, YAN!
    Используйте следующий код для открытия по очереди файлов Excel, имена которых записаны в первый столбец со второй ячейки:

    Workbooks . Open ( " C : \ Users \ Public \ " & Cells ( n + 2 , 1 ) )

    Объявление глобальной переменной n размещено в разделе Declarations программного модуля. Число 15 соответствует номеру строки последней ячейки диапазона с именами рабочих книг.

    имеется 2 книги (обе открытые)

    Используя ссылку (без ручного ввода) надо обратиться Книга 2, скопировать 5 строк ниже ссылки (строка6:строка10) и вставить в рабочую книгу(Книга 1)

    Этот код VBA копирует пять строк под указанной ячейкой из открытой книги Excel по адресу из ячейки D4 Листа1 текущей книги и вставляет их в текущую книгу в пять строк под ячейкой D4 Листа1:

    Объект Workbook входит в коллекцию книг. Коллекция книг содержит все объекты книги, открытые в настоящее время в Microsoft Excel.

    Свойство ThisWorkbook объекта Application возвращает книгу, Visual Basic кода. В большинстве случаев это то же самое, что и активная книга. Однако если код Visual Basic является частью надстройки, свойство ThisWorkbook не возвращает активную книгу. В этом случае активная книга — это книга, вызываемая надстройка, в то время как свойство ThisWorkbook возвращает надстройку.

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

    Пример

    Используйте книги (индекс), где индекс — это имя книги или номер индекса, чтобы вернуть один объект книги. В следующем примере активируется книга.

    Номер индекса обозначает порядок открытия или создания книг. Workbooks(1) является первой созданной книгой и Workbooks(Workbooks.Count) последней созданной. Активация книги не меняет ее номер индекса. Все книги включены в число индексов, даже если они скрыты.

    Свойство Name возвращает имя книги. Вы не можете установить имя с помощью этого свойства; Если необходимо изменить имя, используйте метод SaveAs для сохранения книги под другим именем.

    В следующем примере в книге с именем Cogs.xls (книга уже должна быть открыта в Microsoft Excel).

    Свойство ActiveWorkbook объекта Application возвращает трудовую книжку, которая в настоящее время активна. В следующем примере устанавливается имя автора для активной книги.

    В этом примере вкладка таблицы из активной книги передается по электронной почте с помощью указанного адреса электронной почты и темы. Чтобы запустить этот код, активный электронный таблица должна содержать адрес электронной почты в ячейке A1, субъект в ячейке B1 и имя таблицы для отправки в ячейку C1.

    События

    Методы

    Свойства

    См. также

    Поддержка и обратная связь

    Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.


    Перед созданием своей первой программы в Excel необходимо разобраться в объектную модели приложения. Имея четкое понимания об объектной модели Excel вы сможете управлять практически всеми объектами, создавать/изменять листы, графики, отдельные файлы и многое другое. Возможно на первый взгляд она покажется довольно сложной, но не пугайтесь на конкретных примерах у вас сложится целостная картина.

    Структура объектов

    Проще всего рассматривать объектную модель как некое дерево или иерархическую структуру, так как каждый объект имеет свое ответвление. Кусочек этой структуры вы можете увидеть на рисунке далее.

    Самый главный объект, вершина нашей структуры, это собственно само приложение Excel - объект Application. Какие объекты входят в Excel? правильно книги (файлы Excel), поэтому в объекте Application содержится коллекция из книг - объект Workbooks. Из чего состоят книги - из листов, диаграмм, соответственно внутри объекта Workbooks мы видим объект Worksheets и Charts. Идем дальше, лист в свою очередь состоит из строк, столбцов, ячеек это объекты Rows, Columns, Range.

    Это, конечно, как вы понимаете только часть объектной модели Excel, мы перечислили только одни их самых основных объектов. Полное дерево объектов исчисляется сотнями объектов. Возможно она сейчас кажется сложной, не переживайте со временем вы начнете быстро в ней ориентироваться. Главное сейчас - это понять, что есть некие объекты, которые могут состоять из других объектов.

    Объектная модель Excel

    Объекты и коллекции объектов

    Многие объекты, которые мы перечислили выше являются коллекциями. Коллекция - это группа однотипных объектов (или классов). Например Workbook s - это коллекция всех открытых в данный момент книг (объектов Workbook). А коллекция Worksheet s состоит из листов книги (объектов Worksheet), и так далее. Как правило все коллекции заканчиваются буквой S.

    Давайте посмотрим, как обращаться к конкретным элементам коллекции в коде VBA.

    Мы можем указать порядковый номер (начиная с единицы) элемента в коллекции. Worksheets(3) - в этом случае мы обращаемся к 3-му листу книги.

    Мы также можем указать название листа в кавычках Worksheets("Название листа").

    Аналогичным образом можно обратиться к конкретной книге Workbook("Названием книги").

    Чтобы обратиться к объекту Excel (к листу, или ячейке) необходимо указать ссылку на этот объект, перечислив полный путь к нему в соответствии с объектной моделью.

    Например, для ячейки A1 полная ссылка будет выглядеть следующим образом:

    На самом деле полный путь писать не обязательно. Application - можно практически всегда не указывать. Workbooks("Название книги") - можно не указывать, если необходимо обратиться к ячейке из активной книги, а Worksheets("Название листа") можно не писать в случае если код должен выполнять действия на активном листе. Т.е. в можно упростить до:

    Но всегда имейте ввиду, что это будет ячейка на активном листе.

    Свойства объектов

    Все объекты имеют свойства и методы. Например, объект Range (диапазон ячеек) имеет свойство Value, в котором содержится значение.

    Вы можете получать значения из свойств объекта, просто указав путь к нужному свойству. Следующий код выведет значение ячейки A1 на активном листе.

    А следующий код присвоит свойству Value новое значение 12345.

    Протестируйте эти функции в своем файле.

    Кстати, есть свойства объектов, которые доступны только для чтения. Т.е. вы сможете только получить значения этих свойств, но не сможете присвоить им другие значения. Например, свойство Range("A1").Address которое содержит адрес ячейки. При попытке записать новое значение в такое свойство будет возникать ошибка.
    Или же свойство Worksheets.Count - вы можете только получить количество листов, но не можете изменить количество листов, задав новое свойство Count. Для этого существуют методы объектов.

    Методы объектов

    В отличие от свойств, которые просто сохраняют или передают значение, методы выполняют какие-либо действия с объектом. Например метод Worksheets.Add создает новый пустой лист в книге. Еще один пример это метод Clear, который позволяет очистить содержимое ячеек. Следующий код очистит данные и форматы из диапазона ячеек A1:C10.

    Есть аналогичная функция, которая не удаляет при этом форматирование ячеек, а только очищает их от значений

    Методы могут иметь дополнительные аргументы. Например, метод AddComment имеет обязательный аргумент Text, в котором необходимо передать текст комментария к ячейке.

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

    Приемы и лайфхаки

    Автоматическое заполнение кода по начальным символам

    Часто, особенно на первых порах, вы не запомните точное название всех объектов, но будете помнить их первые символы. В редакторе кода вы можете использовать отобразить список названий и автоматически записать объект по первым символам. Для этого используйте сочетание клавиш Ctrl+ J и увидите список из предложенных вариантов.

    Просмотр свойств и методов у объекта

    Когда вы будете писать свои программы, то редактор кода VBE будет подсказывать список свойств и методов у объекта. Чтобы отобразить этот список достаточно ввести объект, например, Worksheets и поставить точку, отобразится список свойств и методов. Выберите нужный с помощью мышки или же используйте стрелки. Вы также можете начать писать название свойства и редактор кода подберет подходящее. Когда выбор сделан - нажимайте клавишу Tab.

    Явно указывайте тип переменных

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

    И подсказки снова заработают.

    Быстрый просмотр справки

    Все свойства и методы знать невозможно, так как их тысячи. Первое время вы будете активно пользоваться справкой. Советую использовать официальную справку на сайте Microsoft.

    Чтобы быстро посмотреть информацию по интересующему вас объекту, свойству или методу просто поставьте курсор на интересующий элемент кода и нажмите клавишу F1. В окне браузера откроется официальная справка по этому элементу.

    Поиск по объектной модели

    Также вначале пути у вас постоянно будут возникать вопрос "А как называется свойство, которое отвечает за. ". Иногда мы и не заем есть ли такое свойство/метод вообще. Хороший вариант изучения - просмотр объектной модели. Переходите в редактор кода VBA и нажимайте клавишу F2. Откроется окно с поиском по объектной модели. Тут вы найдете все имеющиеся свойства, методы, события и прочие элементы в модели. Просматривайте их, как правило в названии элемента заложена его суть и вы найдете то что искали. А в процессе поиска будете запоминать и другие элементы, которые будут попадаться на глаза.

    Давайте разберем на примере. Допустим нам надо защитить лист, но мы не знаем как точно зазывается свойство или метод.

    Поиск по объектной модели

    1. Открываем объектную модель клавишей F2.
    2. Так как мы хотим защитить лист, то логично предположить, что это метод в объекте Worksheet. Введем его в строку поиска и нажмем бинокль.
    3. В результатах поиска выбираем наш объект Worksheet и просматриваем его элементы.
    4. Находим метод Protect (Защита).
    5. Мы также можем просмотреть описание всех аргументов этого метода
    6. Конечно если что-то не понятно, то жмем клавишу F1 и открываем справку по этому методу с подробным описанием каждого аргумента.

    На этом данную статью завершим, а в следующих мы более подробно поговорим про самый распространенный объект Excel - объект Range.

    Читайте также: