1. Объект FileSystemObject

Лабораторная работа № 1

Работа с коллекцией FileSystemObject

FileSystemObject – это объектная модель файловой системы Windows.

FileSystemObject не является объектом WMI, а является элементом ActiveX, который может использоваться совместно с языками сценариев. Вообще сами по себе языки сценариев VBS и JScript не могут работать с файлами и производить какие-либо действия над ними. Но и VBScript и JScript могут создавать объекты ActiveX (т.н. контейнеры объектов) и работать с ними. Для этого и используется FileSystemObject. Для создания элемента ActiveX служит метод CreateObject.

Создадим для работы экземпляр объекта FileSystemObject.

Set FSO = CreateObject(“Scripting.FileSystemObject”)

FileSystemObject (FSO) содержит следующие объекты и коллекции:

Объект/Коллекция

Описание

FileSystemObject

Основной объект. Содержит методы и свойства, которые позволяют создавать, удалять, получать информацию, и управлять дисками, папками и файлами. Многие методы связанные с этим объектом дублируются в других объектах FSO, которые предусматриваются для удобства.

Drive

Объект. Содержит методы и свойства, которые позволяют собирать информацию о накопителях, имеющихся в системе как например, имя диска и сколько свободного места на диске. Имейте в виду, что «диск» не обязательно является жестким диском, но может быть накопителем CD-ROM, виртуальным диском RAM, и так далее. Накопитель не должен обязательно присутствовать на данном компьютере, он может быть доступен и через сеть.

Drives

Коллекция. Включает в себя все диски на данном компьютере независимо от их типа (HDD, CD-ROM и т. д.).

File

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

Files

Коллекция. Содержит список всех файлов, находящихся в данной папке.

Folder

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

Folders

Коллекция. Содержит список всех папок, находящихся в конкретной папке.

TextStream

Объект. Позволяет читать и делать записи в текстовые файлы.

FileSystemObject (далее FSO) предоставляет некоторые возможности для работы с текстовыми файлами. Можно создавать, удалять, копировать и перемещать файлы. Для создания текстового файла применяют метод CreateTextFile. Синтаксис:

FSO.CreateTextFile( [, overwrite[, unicode]])

где:

filename – имя создаваемого файла.

Необязательные параметры:

owerwrite – логический параметр (true или false), указывает, перезаписывать ли уже существующий файл таким именем.

unicode – логический параметр (true или false), определяющий кодировку создаваемого файла. По умолчанию используется кодировка ASCII. Если принимает значение true – то файл создается в кодировке unicode.

Set FSO = CreateObject(«Scripting.FileSystemObject»)

Set MyFile = fso.CreateTextFile(«c:\testfile.txt», true)

Для проверки существования файлов служит метод FileExists.

Set FSO = CreateObject(«Scripting.FileSystemObject»)

If (FSO.FileExists(«c:\autoexec.bat»)) Then

MsgBox «Файл autoexec.bat существует»

Else

MsgBox «Файл autoexec.bat не существует»

End If

Для других операций над файлом, таких как копирование, перемещение и удаление файл должен быть сначала “получен” методом GetFile.

Set FSO = CreateObject(«Scripting.FileSystemObject»)

Set file1 = FSO.GetFile(“MyFile.txt”)

Для копирования, перемещения и удаления файлов объект FSO предоставляет несколько методов, в зависимости от того какой объект будет использоваться для операций FSO или file. Они показаны в следующей таблице.

Действие

Объект. Метод

Перемещение

File.Move или FileSystemObject.MoveFile

Копирование

File.Copy или FileSystemObject.CopyFile

Удаление

File.Delete или FileSystemObject.DeleteFile

Копирование файлов.

Set FSO = CreateObject(«Scripting.FileSystemObject»)

Set file1 = FSO.CreateTextFile(«c:\test.txt»)

Set file2 = FSO.GetFile(«c:\test.txt»)

file2.Copy(«c:\0\test1.txt»)

Перемещение файлов осуществляется аналогично методу копирования.

Удаление файлов:

Set FSO = CreateObject(«Scripting.FileSystemObject»)

Set file1 = FSO.CreateTextFile(«test.txt»)

‘закрываем файл (см. работа с содержанием файла)

‘если не закрыть файл, то он не может быть удален методом Delete

file1.Close

MsgBox «Файл создан»

Set file2 = FSO.GetFile(«test.txt»)

file2.Delete

MsgBox «Файл удален»

Свойства файла

Синтаксис:

object.Свойство

где

object — File объект

С помощью объекта FSO нам доступны такие свойства файла, как его размер, время создания и т.д.

Свойство

Описание

Attributes

позволяет просмотреть или установить атрибуты файла.

DateCreated

содержит дату и время создания файла.

Доступно только для чтения

DateLastAccessed

содержит дату и время последнего обращения. Доступно только для чтения

DateLastModified

содержит дату и время последнего изменения. Доступно только для чтения

Drive

cодержит букву диска для устройства, на котором находится файл. Доступно только для чтения

Name

позволяет просмотреть и изменить имя файла. Доступно для чтения и записи

PaternFolder

содержит объект Folder для родительского каталога файла. Доступно только для чтения

Path

содержит путь к файлу

ShortName

содержит короткое имя файла (в формате 8.3)

ShortPath

содержит путь к файлу, состоящий из коротких имен каталогов (в формате 8.3)

Size

возвращает размер файла в байтах

Type

возвращает информацию о типе файла

Set FSO = CreateObject(«Scripting.FileSystemObject»)

‘получаем текущий файл:

Set file1 = FSO. GetFile(WScript.ScriptFullName)

‘получаем размер:

fsize = file1.Size

MsgBox «Размер файла » & WScript.ScriptName & » : » & fsize &» килобайт»

Получив набор Files, можно извлечь из него объект «файл» и проанализировать его свойства, как показано в предыдущем примере. Свойство Name объекта File возвращает имя файла, а свойство Attributes — двоичное значение, описывающее атрибуты файла.

Константа

Значение

Описание

Normal

0

Обычный файл без установленных атрибутов.

Readonly

1

Файл с атрибутом «только для чтения».

Hidden

2

Скрытый файл.

System

4

Системный файл.

Directory

16

Папка или каталог (возможно, с атрибутом «только для чтения»).

Archive

32

Файл с атрибутом «архивный», модифицированный со времени последнего резервного копирования.

Alias

1024

Ярлык (. Lnk-файл).

Compressed

2048

Сжатый файл (только для Windows NT/2000).

3 Работа с содержимым файла

Для работы с содержимым фала используется объект TextStream и его методы.

Работа по изменению содержимого текстового файла состоит из нескольких действий:

1. Открытие файла

2. Работа с содержимым

3. Закрытие файла.

1. Открытие файла может осуществляться несколькими методами FSO — OpenTextFile и OpenAsTextStream.

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

OpenTextFile

Синтаксис:

FSO.OpenTextFile(filename[, iomode[, create[, format]]])

где

filename – имя открываемого файла

Необязательные параметры:

iomode – режим открытия файла.

Принимает значения:

1 – файл открывается для чтения. Записывать в него нельзя.

2 – файл открывается для записи.

8 – файл открывается для добавления данных

create – логическая величина, определяющая, будет ли создан новый файл, если файла с указанным именем не существует. true – файл создается.

format – кодировка для открытия файла.

Принимает значения:

— 2 – открывается, используя системную кодировку

— 1 – открывается в кодировке Unicode

0 – открывается в кодировке ASCII.

Set fso = CreateObject(«Scripting.FileSystemObject»)

Set f = fso.OpenTextFile(«c:\testfile.txt», 2, True)

Синтаксис:

File.OpenAsTextStream([iomode, [format]])

где

iomode – режим открытия файла.

Принимает значения:

1 – файл открывается для чтения. Записывать в него нельзя.

2 – файл открывается для записи.

3 – файл открывается для добавления данных

format – кодировка для открытия файла.

Принимает значения:

— 2 – открывается, используя системную кодировку

— 1 – открывается в кодировке Unicode

0 – открывается в кодировке ASCII.

Примечание. Перед использованием метода OpenAsTextStream объект File должен быть создан методом GetFile.

После открытия файла и всех изменений он должен быть закрыт методом Close.

Запись в файл

Запись информации в текстовый файл производится с помощью методом Write, WriteLine и WriteBlankLines.

Методы:

Write — записывает данные в файл в одну строку

WriteLine – записывает данные, с переходом на новую строку.

WriteBlankLines – записывает пустую строку.

Например:

Set FSO = CreateObject(«Scripting.FileSystemObject»)

Set f = FSO.OpenTextFile(«testfile.txt», 2, True)

‘Открываем файл, если он не создан, создаем его

f.WriteLine «Файл создан VBScript!»

‘записываем строку

f.WriteBlankLines(3)

‘записываем 3 пустые строки

f.Write «Это снова я!»

‘записываем строку

f.Close

‘закрываем файл

Чтение из файла

Для чтения данных из файла используются методы Read, ReadLine, ReadAll, Skip и SkipLine.

Методы:

Read – читает из файла указанное количество символов.

ReadLine – читает строку из файла

ReadAll – считывает весь файл

Skip – пропускает указанное количество символов

SkipLine – пропускает строку

Set FSO = CreateObject(«Scripting.FileSystemObject»)

Set t_file = FSO.OpenTextFile(«testfile.txt», 1)

‘открываем файл для чтения

source = t_file.ReadAll

‘читаем весь файл и передаем его переменной source

MsgBox source

‘выводим содержание файла

t_file.Close

‘закрываем файл

Метод CreateTextFile (Visual Basic для приложений)

Редактировать

Твиттер LinkedIn Фейсбук Электронная почта

  • Статья

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

Синтаксис

объект . CreateTextFile ( имя файла , [ перезаписать , [ unicode ]])

Метод CreateTextFile состоит из следующих частей:

Часть Описание
объект Обязательно. Всегда имя объекта FileSystemObject или Folder .
имя файла Обязательно. Строковое выражение, определяющее файл для создания.
перезаписать Дополнительно. Логическое значение , указывающее, можно ли перезаписать существующий файл. Значение True , если файл можно перезаписать; False , если его нельзя перезаписать. Если его не указать, существующие файлы могут быть перезаписаны.
Юникод Дополнительно. Логическое значение , указывающее, создан ли файл как файл Unicode или ASCII. Значение True , если файл создан как файл Unicode; Ложь , если он создан как файл ASCII. Если этот параметр опущен, предполагается файл ASCII.

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

 Sub CreateAfile
    Установите fs = CreateObject("Scripting.FileSystemObject")
    Установите a = fs.CreateTextFile("c:\testfile.txt", True)
    a.WriteLine("Это тест")
    близкий
Конец сабвуфера
 

См. также

  • Объекты (Visual Basic для приложений)

Поддержка и отзывы

У вас есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы Office VBA, чтобы узнать, как вы можете получить поддержку и оставить отзыв.

Создать текстовый файл с помощью FSO и VBA CreateTextFile

Используйте FileSystemObject TextStream для создания текстового файла с помощью VBA CreateTextFile. TextStream — это класс библиотеки объектов Microsoft Scripting Runtime, а метод CreateTextFile, как вы могли догадаться, — удобный способ быстрого создания текстовых файлов. Сочетание TextStream и CreateTextFile упрощает создание текстовых файлов.

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

В этом руководстве мы собираемся показать вам, как создать текстовый файл, используя FileSystemObject (FSO) и методы объекта CreateTextFile, но чтобы стать настоящим экспертом по файловому вводу-выводу, вам следует ознакомиться с нашим всеобъемлющим Шпаргалка по вводу-выводу файлов VBA содержит более 50 советов по работе с файлами и более 30 примеров макросов ввода-вывода файлов.

Мы начнем с базовой настройки TextStream и объясним различные методы записи в него текстового содержимого. Далее мы покажем вам более сложный пример, в котором вы передаете входной диапазон в качестве параметра процедуре, которая затем создает текстовый файл, содержащий весь текст из вашего ввода. Вы сможете разделить строки и столбцы разделителем по вашему выбору в текстовом файле. Наконец, мы кратко обсудим некоторые мощные идеи приложений и когда , а не , чтобы использовать объект FSO CreateTextFile для создания файлов.

  • Базовая настройка VBA CreateTextFile
  • Методы записи TextStream
  • Создать текстовый файл из диапазона значений
  • Идеи приложения CreateTextFile
  • Комментарии

Теперь приступим к базовой настройке!


Базовая настройка VBA CreateTextFile

Начните с открытия редактора Visual Basic, нажав клавиши ALT+F11. Затем перейдите к Tools > References… и установите ссылку на библиотеку объектов Microsoft Scripting Runtime .


Справочник по среде выполнения сценариев VBA Microsoft

Затем вставьте приведенный ниже код в стандартный модуль кода:

 Sub CreateTextFileBasic()
    'Необходимо добавить ссылку на Инструменты > Ссылки > Среда выполнения сценариев Microsoft.
    ' (1) Откройте экземпляр FileSystemObject.
    ' (2) Откройте экземпляр FileSystemObject TextStream.
    ' (3) Запишите две строки примера текста в объект TextStream.
    ' (4) Закройте объект TextStream.
    Dim fso As Scripting.FileSystemObject
    Dim tsTxtFile как Scripting.TextStream
    
    ' (1) Откройте экземпляр FileSystemObject.
    Установите fso = New Scripting.FileSystemObject
    
    ' (2) Откройте экземпляр класса FileSystemObject TextStream.
    Установите tsTxtFile = fso.CreateTextFile("C:\Test\test.txt", True)
    
    ' (3) Запишите две строки примера текста в объект TextStream.
    tsTxtFile.WriteLine "Это первая строка"
    tsTxtFile.WriteLine "Это вторая строка"
    
    ' (4) Закрыть объект textstream
    tsTxtFile. Close
Конец суб 

Создавайте мощные макросы с помощью нашего бесплатного комплекта разработчика VBA

Такой макрос легко скопировать и вставить, но сложнее создать его самостоятельно. Чтобы помочь вам создавать такие макросы, мы создали бесплатный набор VBA Developer Kit и написали Big Book of Excel VBA Macros , полную сотен предварительно созданных макросов, которые помогут вам освоить файловый ввод-вывод, массивы, строки и многое другое. — возьмите бесплатную копию ниже.


Объект TextStream используется для создания текстового файла, и мы используем переменную tsTxtFile для хранения экземпляра этого объекта. Обратите внимание, что мы используем раннее связывание с помощью оператора New, который позволяет нам просматривать методы и свойства объекта TextStream во время разработки с помощью функции «Auto List Members» редактора Visual Basic.


Члены автоматического списка VBA CreateTextFile

Члены этого объекта, перечисленные на рисунке выше, не все являются методами записи. Этот объект также можно использовать для чтения текстовых файлов. Однако в этом уроке мы сосредоточимся исключительно на напишите метода объекта CreateTextFile, но с нетерпением ждите нашего будущего руководства, полностью посвященного методам чтения этого объекта.

В описанной выше базовой процедуре настройки мы сначала устанавливаем переменную fso для хранения экземпляра FileSystemObject. Затем мы устанавливаем переменную tsTxtFile для хранения информации о текстовом файле, который мы создаем с помощью метода CreateTextFile объекта FileSystemObject.

Метод CreateTextFile принимает три параметра, первый из которых является обязательным, а следующие два — необязательными.

Первый параметр «C:\Test\test.txt» представляет собой полный путь к файлу и имя создаваемого вами текстового файла.

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

.


Файл VBA уже существует, ошибка времени выполнения 58

Третий параметр представляет собой переменную логического типа, которая указывает, хотите ли вы кодировать текст с помощью кодовой страницы ANSI (Американский национальный институт стандартов) или Unicode (международный стандарт кодирования). Кодовая страница ANSI является «родной» или стандартной кодовой страницей в компьютерной системе, тогда как Unicode обычно используется, когда вам нужно включить «чужие» или другие специальные символы в ваш текстовый файл. Значение по умолчанию для этого необязательного параметра — False (ANSI).

Теперь давайте подробнее рассмотрим очень полезные методы записи объекта TextStream один за другим!


TextStream Методы записи

Методы записи объекта TextStream показаны в таблице ниже.

Метод Описание
.Напишите Метод принимает в качестве параметра строку, которая будет записана в TextStream. Входная строка добавляется к любому существующему содержимому в TextStream 9.0023 в той же строке , что и существующий контент.
.WriteBlankLines Метод принимает один параметр — количество пустых строк для записи в TextStream. Это эквивалент TextStream константы vbNewLine, используемой в стандартном синтаксисе VBA для возврата каретки в строках.
.WriteLine Метод принимает в качестве параметра строку, которая будет записана в TextStream, и добавляет к ней возврат каретки. Другими словами, входная строка добавляется как отдельная строка для TextStream.

Надеюсь, эти методы покажутся вам интуитивно понятными. Вы получаете к ним доступ, связывая (добавляя точку позади) переменную tsTxtFile в нашей процедуре CreateTextFileBasic.

Пришло время представить более сложный пример, в котором мы создаем текстовый файл на основе значений из входного диапазона! На самом деле это действительно полезный пример, так что оставайтесь со мной.


Создать текстовый файл из диапазона значений

Сначала вставьте в ячейку «A1» пустого листа следующие данные примера:

Индекс Значение
1 А
2 Б
3 С

Затем вставьте приведенный ниже код в стандартный модуль кода:

 Sub CreateTextFileFromRange (rngInput As Range, strFileName As String, strDelim As String)
    'Необходимо добавить ссылку на Инструменты > Ссылки > Среда выполнения сценариев Microsoft.
    Dim rngCol как диапазон, rngRow как диапазон
    Dim fso As Scripting.FileSystemObject
    Dim strRow как строка
    Dim tsTxtFile как Scripting. TextStream
    
    Установите fso = New Scripting.FileSystemObject
    Установите tsTxtFile = fso.CreateTextFile(strFileName, True)
    
    ' Записываем каждую строку текста из диапазона в текстовый файл
    Для каждого rngRow в rngInput.Rows
        стрРов = vbNullString
        Для каждого rngCol в rngRow.Columns
            strRow = strRow & strDelim & rngCol.Text
        Следующий rngCol
        
        ' записать содержимое объединенной строки в отдельную новую строку
        tsTxtFile.WriteLine Right (strRow, Len (strRow) - 1)
    Следующий ряд
    
    ' Закрыть текстовый поток
    tsTxtFile.Close
    
    'Открыть текстовый файл в Блокноте
    Вызов оболочки ("notepad.exe """ & strFileName & """", vbNormalFocus)
Конец суб 

Вы вызываете описанную выше процедуру следующим образом:

 Sub ConvertRangetoFile()
Вызов CreateTextFileFromRange(ThisWorkBook.Sheets("Test").Range("A1:B4"), "C:\Test\test.txt", Chr(9))
Конец суб 

Первый параметр процедуры ThisWorkBook. Sheets(«Test»).Range(«A1:B4») — это входной диапазон, из которого вы хотите создать текстовый файл. Не забудьте изменить имя листа на имя листа в книге, чтобы избежать ошибок! Текст в указанном вами диапазоне будет сохранен в текстовый файл, например:


Используйте VBA для преобразования диапазона в текстовый файл

Второй параметр «C:\Test\test.txt» — это путь и имя текстового файла, который вы хотите создать. Убедитесь, что вы указали правильный путь перед именем файла. Если папка, указанная вами в пути, не существует, вы увидите следующее сообщение об ошибке во время выполнения:


Путь VBA не существует, ошибка времени выполнения 76

Чтобы избежать этой ошибки, вы можете использовать функцию VBA Dir и соединить ее с VBA MkDir, чтобы создать свою папку, если она еще не существует.

Третий параметр , Chr(9), является разделителем, используемым для разделения значений ячеек в каждой строке указанного входного диапазона. В этом примере мы использовали функцию VBA Chr для вставки символа горизонтальной табуляции, который является значением ASCII (американский стандартный код для обмена информацией) кода символа 9. Другой символ, который вы можете использовать, — это запятая Chr(44). ), для создания CSV-файлов.

Далее процедура CreateTextFileFromRange перебирает все строки входного диапазона. Затем для каждой ячейки в каждом столбце текущей строки он объединяет текстовое содержимое ячейки с разделителем, указанным во втором параметре (строковой переменной, strRow) процедуры. Затем первый символ strRow удаляется, прежде чем объединенное текстовое содержимое строки будет добавлено к TextStream в отдельной строке с помощью метода .WriteLine.

Обратите внимание, многострочные ячейки будут печататься в одной строке по процедуре! Если вы хотите, чтобы они печатались на отдельных строках, вам необходимо включить в процедуру проверку символа перевода строки vbLf. Ниже показан простой способ обнаружения многострочных ячеек:

 Если InStr(1, rngCol. Value, vbLf) > 0, то Debug.Print "Multiline: " & rngCol.Text 

После обхода всех строк мы закрываем TextStream с помощью команды .Close. Это не является строго обязательным, так как ваш текстовый файл уже создан на данный момент, а Excel имеет встроенную детерминированную сборку мусора (автоматическое уничтожение объектов, когда они выходят за пределы области действия VBA). Тем не менее, это считается «лучшей практикой», особенно если вы пишете более сложные процедуры, где вам нужно как можно быстрее освободить память, используемую объектом.

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


Идеи приложения CreateTextFile

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

  • Файлы журнала . Допустим, вы хотите раздать приложение нескольким своим коллегам. Затем вы можете создать файлы журнала с информацией об отдельных пользователях на общем сетевом диске, вместо того, чтобы проверять каждый отдельный экземпляр приложения каждый раз, когда возникает ошибка. Я также использовал файлы журналов при экспорте электронных писем Outlook в папку для архивирования. В файле журнала перечислены файлы, которые не удалось экспортировать по какой-либо причине.
  • Сбор данных/извлечение данных . Объект CreateTextFile очень эффективен в сочетании с другими методами FSO, которые позволяют легко перебирать папки и файлы и извлекать любую необходимую информацию. Это особенно верно, когда вам нужно создать текстовый файл для импорта в другую компьютерную систему, например, в систему управления финансами.
  • Резервное копирование данных . Если вы хотите делать личные резервные копии конфиденциальных данных в своих файлах и хотите занимать как можно меньше места на диске, создание отдельных текстовых файлов данных может стать для вас решением.

Одно предостережение. Как мы отмечали во введении к учебнику VBA FSO, если вы пишете программу, предназначенную для использования людьми в разных странах, вы должны НЕ использовать FSO для записи в двоичных файлов ! Это связано с тем, что кодовая страница пользователя ANSI по умолчанию может отличаться от вашей. В некоторых странах, например в Японии, используется двухбайтовый набор символов, в то время как в большинстве западных стран, включая США, нет. Если наборы символов не совпадают, байты, которые вы записываете в файл, будут интерпретироваться неправильно!

Это все для этого урока. Когда вы будете готовы поднять свой VBA на новый уровень, подпишитесь, используя форму ниже.

Готовы делать больше с VBA?
Мы собрали гигантский PDF-файл с более чем 300 готовыми макросами и хотим, чтобы вы получили его бесплатно. Введите свой адрес электронной почты ниже, и мы вышлем вам копию вместе с нашим комплектом разработчика VBA , в котором есть советы, приемы и ярлыки VBA.