Vba excel создать книгу excel
начинающих программистов настоятельноДанный учебник является введением не написал, чтоRAN то как прописать названием.а как изменитьThe_Prist для него листа указываются без скобок:А сам код objThisBook.Sheets("abs_plan").Range(sAddress).Value Sheets("abs_plan_191").Range("A1").Resize(UBound(vData, 1), новую книгу.Юрий М одним моментом, книгу: Sub New2() DimПеревел: Антон Андронов рекомендуется начать с в язык программирования там у него: макрос, чтобы онА мне нужно имя, чтобы создалась: нет. Я же и книги подразумевает
- New_Wb.SaveAs Range("O6") &
- вот UBound(vData, 2)).Value =
- Помогите пожалуйста
- : Sub New2() Dim создал, обозвал её
- New_Wb As Workbook
- Автор: Антон Андронов
- первого раздела учебника Excel VBA (Visual
- получилось, я напишу,200?'200px':''+(this.scrollHeight+5)+'px');">Sub Макрос1()
- все делал то так, чтобы название
- не 'Книга1',
- написал, что указание
обращение к АКТИВНОЙ "\" & Range("Книга")Dim New_Wb As vDataВот написал, все
Юрий М New_Wb As Workbook
как Вы помогли,
Set New_Wb =
Создание новой книги макросом
и изучать их Basic for Applications). как буквально "задать":' отключить копирование
же самое, за новой книги бралосьа например 'Моя Range без явного книге. А Вы & ".xlsm" Workbook Set New_Wb отлично работает, но: Согласен с Johny: Set New_Wb = теперь беда. Хочу
Workbooks.Add New_Wb.Activate New_Wb.SaveAs: Доброе время суток. по порядку. Те, Изучив VBA, Вы Dim tmp tmp объектов исключением копирования данной
с ячейки (в
книга' указания листа и её только что
плюс очень желательно = Workbooks.Add New_Wb.Activate копирует без сохранения
ерунда получается - Workbooks.Add ThisWorkbook.Sheets("plan").Copy New_Wb.Sheets.Add с книги откуда ("D:\test\" & ThisWorkbook.Sheets("Лист1").Range("A1") Есть книга, в кто имеет опыт сможете создавать макросы = Application.SheetsInNewWorkbook 'сохранить
Application.CopyObjectsWithCells = False кнопки. Проще говоря
примере видно -new_see книги в Вашем создали. Следовательно там указывать формат файла
New_Wb.SaveAs (Range("O6") & параметров ячеек. сначала имя листа After:=New_Wb.Sheets(Sheets.Count) New_Wb.SaveAs ("D:\test\" запускал макрос скопировать
& ".xls") New_Wb.Close ячейке А1 значение.
в программировании на и выполнять в
свойство "число листов' включить копирование - без этой ячейка E7): NewWorkbook.Windows(1).Caption = 'Моя
случае указывает на НЕТ ИМЕНОВАННЫХ ДИАПАЗОНОВ, явно:
"\" & Range("Книга")Johny "plan", затем "plan_191". & ThisWorkbook.Sheets("Лист1").Range("A1") & лист (plan) в End SubSub New2() Dim VBA, могут сразу Excel практически любые в новой книге" объектов
кнопки.Пример прикрепляю. книга' активный лист. А да и вообщеNew_Wb.SaveAs Range("O6") & & ".xlsm"): Так?Юрий М ".xls") New_Wb.Close End эту новую книгуevgeniy_m New_Wb As Workbook же перейти к задачи. Вы очень Application.SheetsInNewWorkbook = 200Application.CopyObjectsWithCells = True
Прикрепил файлЖду помощи.спасибо т.к. Вы это данных.
"\" & Range("Книга")либоSub F() Dim: evgeniy_m, у Дмитрия Sub с созданым листом: ошибку дает ( Set New_Wb = интересующим темам.
скоро поймёте, что 'установить новое значениеEnd Subgling
ShAMden45444 делаете после созданияСоветую очень внимательно
& ".xlsm", 52Dim New_Wb As wkbNew As Workbook (The_Prist) очень хорошийHugo "plan_191".Юрий М
Workbooks.Add New_Wb.Activate New_Wb.SaveAsЧасть 1: Оформление кода макросы могут сэкономить свойства в пределахPuLbKa: Пропишите так: Замените:: Есть макрос на новой книги -
изучить:
52 - формат Workbook Set New_Wb Sheets("plan").Copy Set wkbNew текст в подписи: скопировать лист (plan)
Dim sShName As: Это не информация ("D:\test" & "1"Часть 2: Типы данных, уйму времени благодаря
то активна именноHoney xslm. = Workbooks.Add New_Wb.Activate = ActiveWorkbook wkbNew.Sheets(1).Name - прочитайте)) в эту новую
String, sAddress As - всегда следует & ".xls") New_Wb.Close переменные и константы автоматизации повторяющихся задач = Workbooks.Add 'создать как задать количествоActiveSheet.Shapes("Button 1").Delete = "Смета-1.xlsx" 'имя Его нужно немного она, а не: Во вложении файл,Honey New_Wb.SaveAs ("M:\Production\Мастера\2017\Нормализация\" &
= "plan_191" wkbNew.SaveAsAlexander88
книгу - String, vData Dim указывать - КАКУЮ End SubЗапускаю макрос,Часть 3: Массивы и обеспечить гибкое книгу с заданным страниц при создании
bkNew.SaveAs ThisWorkbook.Path & нового файла изменить под условие.
что-то там где-то в котором этот
Содаю я его & ".xlsx"
As String- Есть книга либо не все,Honey
Ошибка Runtime error ".xlsm")
Sub потом удалить листы листом, который затем
GetObject.ActiveWorkbook sAddress =: И пример Юрия D:\test, присваивается имяЧасть 5: Условные операторыЭтот учебник не является
значение свойстваКстати, добавлять такbkNew.Close
strNewBook = [e7].Value и в этой либо не то,
: The_Prist, 1004:: Method 'Range'Спасибо
Юрий М кроме нужного?
можете переименовать. "A1:AA6000" vData = с указанием откуда
1.xls и закрывается.Часть 6: Циклы исчерпывающим руководством по
листы в существующуюDim xlWb AsНо думаю что & ".xlsx" 'имя книги есть лист либо не так.Об этом я of Global FailedHoney: evgeniy_m, Вы читаете,Hugo
Только при таком objCloseBook.Sheets("plan").Range(sAddress).Value objThisBook.Close False берется ячейка неПроблема в следующем,Часть 7: Операторы и языку программирования Excel книгу тоже можно Excel.Workbook Set xlWb лучше кнопку и нового файла "Смета" и есть New_Wb.SaveAs ThisWorksbook.Sheets("1 норм").Range("O6")
читала. Видимо, действительно,The_Prist
: Люди добрые! что Вам пишут?: Кстати хороший вариант копировании пострадают длинные
Sheets("plan_191").Range("A1").Resize(UBound(vData, 1), UBound(vData, работает?
как переписать макрос, встроенные функции VBA. Его цель не по одному: = Workbook.Add список выбора сметыKarataev кнопка на другом & "\" & я чего-то не: А Вы вдумайтесьПомогите с проблемойevgeniy_m сделать копию файла,
строки в ячейках,
2)).Value = vDataноevgeniy_m чтобы новая книгаЧасть 8: Объектная модель – помочь начинающему Sheets.Add after:=ActiveSheet, Count:=200ПараметрВсе получилось разместить вверху сметы.: Смотрите прикрепленный файл листе "создать новую ThisWorksbook.Sheets("1 норм").Range("Книга") & понимаю((( У меня в ошибку. В выше, пожалуйста. Интернет: Johny, спасибо! его открыть, поудалять если они конечно на строке Set: макрос не компилируеться.. сохранялась с названием Excel специалисту освоить написание
Как создать новую книгу с заданным именем?
Count тоже вS.V.I.N. Кнопку привязать кden45444
смету".
".xlsm", 52 есть такие диапазоны. Google-переводчик закиньте. Тогда обыскала ничего неHoney
лишнее. Так и есть. Хотя в objThisBook = GetObject.ActiveWorkbook
Юрий М как в ячейке
Часть 9: События в макросов в Excel пределах 1..255.
: Количество страниц можно
Создание новой книги (название книги из ячейки) (Макросы/Sub)
строкам и при:- Нажимая наnew_see И я ведь
видно будет, что
получается(((: Всем привет! строки не пострадают, новых экселях не дает ошибку. как: Мой вариант проверяли? А1 книги, с
Excel при помощи кодаHugo121 увеличивать следующим образом. копировании сметы удалятьShAM
этот макрос, создается: Как создать новую указываю на имена у Вас проблемаВся надежда на
Надеюсь мой вопрос и связи. проверял. мне указать, чтоThe_Prist которой запускается макрос?
Часть 10: Ошибки VBA
VBA. Для желающих
: На практике обычноfor i=0 to верхнею строку или, новая книга и
книгу с заданным диапазонов не в
в том, что Вас здесь уместен. Я
evgeniy_mevgeniy_m
нужно копировать лист: evgeniy_m, Лист1 вЗаранее спасибо!Примеры по VBA изучить этот язык нужно x With New_Ex
строки. Удалится иKarataev лист "Смета" копируется именем? ново-созданной книге. Или нет диапазона "Книга"The_Prist под основу взяла: Dim sShName As: Суть такая, открываю из книги откуда книге с макросом
Alexander88
Более подробное описание по программирования более глубоко Set xlWb =
Sheets.Add After:=Sheets(Sheets.Count) end
список и кнопка, Благодарю за скорую в эту книгу,
Например
как мне конкретней или "Об" или: что за ошибка код, предлагаемый здесь. String, sAddress As книгу, запускаю макрос, запускался макрос. присутствует? Что означает: Попробуйте заменить пятую Excel VBA можно существуют отличные книги
Workbooks.Add(1) 'создать книгу With next iгде вызова макроса. помощь.
сохраняет и закрывает.Sub CreateWorkbook() Set указать, чтобы диапазон
другого, чего Вы - нам угадать?
Но его чуток
String, vData Dim создается новая книга
Johny
"макрос не компилируется"?
Задать количество листов при создании нового excel-файла
строку на: найти на сайте по Excel VBA. с одним листомДалее х - это
den45444А если эту
- Название новой NewWorkbook = Workbooks.Add брался конкретно с
пишите в Range.
Да и скобки видоизменила. И теперь objThisBook As Object
и лист в: Ничего не понятноevgeniy_mNew_Wb.SaveAs ("D:\test\" & Microsoft Office. Далее приведено содержание можно листы добавить,
кол-во циклов (требуемое: кнопку поставить на книги указывается в End Subсоздает книгу первоначальной книги дляТак же надо здесь лишние. В у меня проблема-выдает Set objThisBook = ней. Теперь из (а в приложенном: супер! Огромное спасибо Cells(1, 1) &Урок подготовлен для Вас самоучителя по Excel но это нужно кол-во листов)gling тот лист который самом макросе, т.е. с именем по именования. помнить, что указание VBA методы без
Личная (персональная) книга макросов – это скрытая служебная книга Excel с именем PERSONAL.XLSB, предназначенная для записи и хранения программного кода (функций и подпрограмм) и предоставления доступа к нему из всех открытых рабочих книг.
Личная книга макросов автоматически открывается в фоновом режиме сразу после загрузки программы Excel и закрывается вместе с приложением, что обеспечивает постоянный доступ из других открытых книг к записанным в ней процедурам.
Персональная книга макросов является скрытой, поэтому добавлять, удалять и изменять размещенные в ней процедуры можно только в редакторе VBA.
Так же, как и в других рабочих книгах, в Личной книге макросов можно создавать программные модули, импортировать и экспортировать их, записывать в модули пользовательские процедуры (подпрограммы и функции) или копировать и вставлять их из модулей других книг.
Подпрограммы, размещенные в Личной книге макросов, можно просмотреть в окне «Список макросов», открыв его из любой рабочей книги Excel. Они будут перечислены с приставкой «PERSONAL.XLSB!». Функции в этом окне не отображаются.
Пользовательские функции, размещенные в Личной книге макросов, доступны для просмотра, выбора и вставки их в ячейки рабочего листа в Мастере функций:
Список пользовательских функций в Личной книге макросов
По умолчанию пользовательские функции расположены в категории «Определенные пользователем». Они выбираются и вставляются в ячейки рабочего листа с помощью Мастера функций так же, как и все остальные.
Пользовательские функции, расположенные в обычной рабочей книге Excel, тоже будут доступны в Мастере функций, но для этого книга должна быть открыта.
Вызов процедуры из Личной книги макросов осуществляется так же, как и запуск процедуры из любой другой рабочей книги.
Создание
Изначально Личная книга макросов в приложении Excel отсутствует. Чтобы проверить, есть ли она в вашей программе (не создал ли ее кто-то ранее), откройте любую рабочую книгу и перейдите в редактор VBA, нажав сочетание клавиш «Alt+F11» (в этом сочетании используется левая клавиша Alt). Открыть редактор VBA можно и пройдя по пунктам меню:
Excel 2007-2016: «Разработчик» –> «Visual Basic» (смотрите, как отобразить вкладку «Разработчик», которая изначально скрыта);
Excel 2000-2003: «Сервис» –> «Макрос» –> «Редактор Visual Basic».
Откроется редактор VBA:
Проводник в редакторе VBA
Если в проводнике сверху вы видите строку «VBAProject (PERSONAL.XLSB)», значит Личная книга макросов на вашем компьютере уже есть.
Если же ее нет, необходимо записать какой-нибудь простенький макрос, выбрав при его создании Сохранить в: Личная книга макросов.
Сохранение макроса в Личной книге макросов
После записи макроса, сохраненного в Личную книгу макросов, эта книга будет создана и появится в проводнике редактора VBA.
Расположение
Место расположения Личной книги макросов на конкретном компьютере, по словам разработчиков, зависит только от версии операционной системы. О его зависимости от версии Excel в их статье ничего не сказано.
В любом случае, книга PERSONAL.XLSB находится в папке XLSTART, которую можно разыскать с помощью поиска в проводнике:
Результаты поиска папки XLSTART в проводнике
Личная книга макросов в папке XLSTART
Удаление
Если вы хотите удалить Личную книгу макросов из своего приложения Excel, найдите с помощью поиска в проводнике папку XLSTART и удалите из нее файл PERSONAL.XLSB.
В принципе, наличие неиспользуемой Персональной книги макросов ничем не мешает. Но если не вы ее создавали и вас беспокоит наличие в ней чужого кода, можете удалить из нее в редакторе VBA все стандартные модули и очистить от процедур модули книги (по умолчанию «ЭтаКнига») и листа (по умолчанию «Лист1»).
Добавление
Как видно из комментариев к этой статье, у некоторых пользователей приложения Excel при создании макроса в выпадающем списке «Сохранить в» отсутствует пункт «Личная книга макросов».
В этом случае можно попытаться найти с помощью поиска в проводнике папку XLSTART и, если она будет найдена, вставить в нее пустой файл PERSONAL.XLSB. В данном случае «пустой» означает «без пользовательских процедур (макросов)».
После добавления файла PERSONAL.XLSB в папку XLSTART и перезагрузки приложения Excel, Личная книга макросов появится в проводнике редактора VBA. Перезагрузка Excel заключается в закрытии всех открытых рабочих книг и последующем открытии любого файла этой программы.
Всем нам приходится - кому реже, кому чаще - повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую "рутинную составляющую" - одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.
Макрос - это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых нужных нам действий, которые нам не хочется выполнять вручную.
Способ 1. Создание макросов в редакторе Visual Basic
Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно - редактор программ на VBA, встроенный в Microsoft Excel.
- В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис - Макрос - Редактор Visual Basic(Toos - Macro - Visual Basic Editor).
- В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer) . Выбираем Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer) . Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic(Visual Basic Editor)
:
К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:
Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:
-
Обычные модули - используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert - Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:
Обычный макрос, введенный в стандартный модуль выглядит примерно так:
Давайте разберем приведенный выше в качестве примера макрос Zamena:
С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно.
Способ 2. Запись макросов макрорекордером
Макрорекордер - это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:
- Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу - запись останавливается.
- Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
- Если во время записи макроса макрорекордером вы ошиблись - ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) - во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.
Чтобы включить запись необходимо:
- в Excel 2003 и старше - выбрать в меню Сервис - Макрос - Начать запись(Tools - Macro - Record New Macro)
- в Excel 2007 и новее - нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)
Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:
- Имя макроса - подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
- Сочетание клавиш - будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис - Макрос - Макросы - Выполнить(Tools - Macro - Macros - Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
- Сохранить в. - здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
- Эта книга - макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
- Новая книга - макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
- Личная книга макросов - это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.
После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording) .
Запуск и редактирование макросов
Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или - в старых версиях Excel - через меню Сервис - Макрос - Макросы (Tools - Macro - Macros) :
- Любой выделенный в списке макрос можно запустить кнопкой Выполнить(Run) .
- Кнопка Параметры(Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
- Кнопка Изменить(Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.
Создание кнопки для запуска макросов
Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:
Кнопка на панели инструментов в Excel 2003 и старше
Откройте меню Сервис - Настройка (Tools - Customize) и перейдите на вкладку Команды (Commands) . В категории Макросы легко найти веселый желтый "колобок" - Настраиваемую кнопку (Custom button) :
Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:
Кнопка на панели быстрого доступа в Excel 2007 и новее
Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar) :
Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:
Кнопка на листе
Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:
- В Excel 2003 и старше - откройте панель инструментов Формы через меню Вид - Панели инструментов - Формы (View - Toolbars - Forms)
- В Excel 2007 и новее - откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)
Выберите объект Кнопка (Button) :
Затем нарисуйте кнопку на листе, удерживая левую кнопку мыши. Автоматически появится окно, где нужно выбрать макрос, который должен запускаться при щелчке по нарисованной кнопке.
Создание пользовательских функций на VBA
Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция - только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert - Module и введем туда текст нашей функции:
Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка - Функция) в категории Определенные пользователем (User Defined) :
После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:
Следующий по иерархии после 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.
В Word ниже объекта Application и Document начинались уже объекты непосредственно для работы с текстом — Selection, Range и т.п. В Excel между объектом рабочей книги и ячейками есть еще один промежуточный объект — объект Worksheet (лист). Объекты Worksheet в книге объединены в коллекцию Sheets.
Чаще всего для ввода данных в Excel (напрямую или из базы данных) нам потребуется в первую очередь определиться с листом, на который пойдет ввод данных — либо просто выбрать его, либо вначале создать, а потом выбрать.
Процесс создания выглядит очень просто:
Dim oExcel As New Excel.Application 'Запускаем Excel
oExcel.Visible = True 'Делаем его видимым
Dim oWbk As Excel.Workbook
Set oWbk = oExcel.Workbooks.Add () 'Создаем новую книгу
Dim oSheet As Excel.Worksheet
Set oSheet = oWbk.Worksheets.Add() ' Создаем новый лист
oSheet.Name = "Новый лист" 'Присваиваем ему имя "Новый лист"
Метод Add() для коллекции Worksheets принимает несколько необязательных параметров, главная задача которых — определить, между какими существующими листами будет вставлен новый лист. Если ничего не указывать, то новый лист будет помещен самым первым.
Часто встречается и другая задача — просто найти нужный лист среди листов книги, например, если мы открыли существующую книгу. Сделать это очень просто, поскольку коллекция Worksheets умеет работать с именами листов. Ниже приведен пример, в котором мы так же запускаем Excel и создаем новую книгу, но при этом находим лист с именем "Лист1" и переименовываем его в "Новый лист":
Dim oExcel As New Excel.Application 'Запускаем Excel
oExcel.Visible = True 'Делаем его видимым
Dim oWbk As Excel.Workbook
Set oWbk = oExcel.Workbooks.Add() 'Создаем новую книгу
Dim oSheet As Excel.Worksheet
Set oSheet = oWbk.Worksheets.Item("Лист 1") ' Находим Лист1
oSheet.Name = "Новый лист" 'Присваиваем ему имя "Новый лист"
Обратите внимание, что в английской версии Excel этот код, скорее всего, не пройдет, поскольку листы там по умолчанию называются "Sheet1", "Sheet2" и т.п. Если вы в вашем коде используете имена листов по умолчанию и при этом вашей программе придется работать на компьютерах с разноязычными версиями Excel, обязательно предусмотрите дополнительные проверки или просто используйте номера листов вместо их имен.
У коллекции Sheets, помимо привычных нам свойств и методов ( Count, Item, Add(), Delete()) и свойств и методов, которые удобнее применять для объекта Worksheet ( Visible(), Copy(), Move(), PrintOut(), PrintPreview(), Select()) — поскольку все равно указывать конкретный лист — есть и один специфический метод FillAcrossSheets() — скопировать объект диапазона Range (варианты: полностью, только содержимое, только оформление) во все листы данной книги.
У объекта Worksheet — множество важных свойств и методов:
- Cells — одно из наиболее часто используемых свойств объекта Worksheet. Работает точно так же, как и рассмотренное выше одноименное свойство объекта Application — за исключением того, что вам больше не нужно ограничиваться только активным листом. Аналогично работают свойства Columns и Rows.
- EnableCalculation — возможность отключить автоматический пересчет значений ячеек в книге.
- EnableSelection — возможность запретить выделять на листе: все, ничего не запрещать, или разрешить выделять только незаблокированные ячейки.
- Next — возможность получить ссылку на следующий лист в книге. Previous — то же самое для предыдущего листа.
- PageSetup — как и в Word, возможность получить объект PageSetup, при помощи которого можно настроить те же параметры, что и через меню Файл ->Параметры страницы.
- свойство Protection позволяет получить объект Protection, при помощи которого можно запретить пользователю вносить изменения в лист Excel. Настройке параметров защиты также служат и другие свойства, названия которых начинаются на Protection.
- QueryTables — исключительно важное свойство. Оно возвращает коллекцию QueryTables — набор объектов QueryTable, которые, в свою очередь, представляют данные, полученные из внешних источников (как правило, из баз данных).
- Range — самое важное свойство объекта Worksheet. Возвращает объект Range (диапазон ячеек), который в объектной модели Excel занимает примерно такое же место, что и одноименный объект в объектной модели Word. Этот объект будет рассматриваться ниже.
- Type — возможность определить тип данного листа. Обычно используются два типа: xlWorksheet (обычный лист) и xlChart (диаграмма).
- UsedRange — возвращает объект Range, представляющий собой прямоугольную область, включающую все непустые ячейки. Удобно для целей копирования или форматирования.
- Visible — возможность спрятать лист с глаз пользователя (например, если он используется для служебных целей).
Некоторые важные методы объекта Worksheet:
- методы Activate() , Calculate(), Copy(), Paste(), Delete(), Move(), Evaluate(), Select(), SaveAs(), PrintOut(), PrintPreview(), Protect(), Unprotect()нам уже знакомы . Отличие заключается только в том, что теперь эти методы могут применяться для выбранного вами листа.
- метод PivotTables() возвращает коллекцию очень интересных объектов PivotTable (сводная таблица), которые будут рассматриваться ниже;
- метод Scenarios() возвращает коллекцию Scenarios, состоящую из объектов Scenario (сценарии). Сценарии — это именованные наборы вводных данных, которые можно использовать для проверки различных сценариев (разные суммы продаж, уровни налогов, расходов и т.п.)
- SetBackgroundPicture() — возможность назначить листу фоновое изображение (естественно, желательно, чтобы оно было полупрозрачное — "водяной знак", иначе на его фоне будет трудно читать текст в ячейках).
- ShowAllData() — показать все скрытые и отфильтрованные данные на листе.
Самое важное событие объекта Worksheet — это, конечно, Change. Существует множество практических задач, когда изменение пользователем значения ячейки должно приводить к изменению значения в ячейке другого листа/рабочей книги Excel или даже в базе данных. Другая ситуация, в которой используется это события — сложная проверка вводимого пользователем значения (например, опять-таки через обращение к базе данных). Эта событийная процедура работает со специальным параметром Target — то есть объектом Range, представляющим изменившуюся ячейку. При помощи свойств и методов объекта Range вы можете получить информацию об изменившемся значении, столбце и строке, в котором произошло изменение и т.п.
Читайте также: