47889 (608403), страница 6
Текст из файла (страница 6)
Свойство Offset (подобно свойствам Range и Cells) также возвращает объект Range.
В отличие от рассмотренных выше свойств, Offset применяется только к объекту Range и ни к какому другому. Данное свойство использует единственный синтаксис:
объект.Offset(сдвиг_строки, сдвиг_столбца)
Два аргумента свойства Offset соответствуют смешению относительно левой верхней ячейки указанного диапазона Range. Эти аргументы могут быть положительными (сдвиг вниз или вправо), отрицательными (вверх или влево) или нулевыми. В приведенном ниже примере значение 12 вводится в ячейку, которая находится под активной ячейкой:
ActiveCell.Offset(l,0).Value = 12
В следующем примере значение 15 вводится в ячейку над активной ячейкой:
ActiveCell.Offset(-l,0).Value = 15
Если активная ячейка находится в строке 1, то свойство Ofset в предыдущем примере выдает ошибку, так как оно не возвращает несуществующий объект Range.
Свойство Offset особо эффективно при использовании переменных в цикле.
В процессе записи макроса в относительном режиме указания ссылки Excel использует свойство Offset для обращения к ячейкам относительно начальной позиции (т.е. активной в момент начала записи макроса ячейки). Например, для генерации следующего кода использована функция записи макросов. Вначале запишем макрос (при активной ячейке В1), потом
введем значение в ячейки В1: ВЗ, а затем вновь вернемся к ячейке В1:
Sub Macrol()
ActiveCell.FormulaRlCl = "1"
ActiveCell.Offset(1, 0) .Range ("Al") .Select
ActiveCell.FormulaRlCl = "2"
ActiveCell.Offset(1, 0} .Range ("Al") .Select
ActiveCell.FormulaRlCl = "3"
ActiveCell.Offset(-2, 0).Range("Al").Select
End Sub
При записи макросов используется свойство FormulaRlCl. Как правило, для ввода значения в ячейку применяется свойство Value. Однако при использовании FormulaRlCl или Formula результат будет таким же.
Также обратите внимание, что полученный код ссылается на ячейку Al, что довольно
странно, так как эта ячейка даже не была задействована в макросе. Данная особенность процедуры записи макросов делает программу даже более сложной, чем необходимо. Вы можете удалить все ссылки на Range ( "А1" ), и макрос все равно будет работать нормально:
Sub Modified Macro1( )
ActiveCell.FormulaRlCl = "1"
ActiveCell.Offset(1, 0) .Select
ActiveCell.FormulaRlCl = "2"
A c t i v e C e l l . O f f s e t (1 , 0 ) . S e l e c t
ActiveCell.FormulaRlCl = "3"
A c t i v e C e l l . O £ f s e t ( - 2 , 0 ) . S e l e c t
End Sub
Вы можете получить еще более эффективную версию макроса (например ту, которую я
написал вручную), где вообще не выполняется выделение:
Sub Macrol ()
ActiveCell = 1
ActiveCell.Offset(1. 0) = 2
ActiveCell.Offset(-2, 0) = 3
End Sub
Используйте запись действий
Несомненно, лучший способ познакомиться с VBA— включить функцию записи макросов и записать отдельные действия, выполненные в Excel. Это быстрый метод узнать, какие объекты, свойства и методы относятся к конкретной задаче. Будет лучше, если при записи отображается окно модуля VBA, в котором представлен записываемый код.
Используйте электронную справочную систему
Основной источник подробной информации об объектах, методах и процедурах Excel — это электронная справочная система.
Используйте броузер объектов
Окно Object Browser (Броузер объектов)— это удобный инструмент, предоставляющий список всех свойств и методов для всех доступных объектов. В VBE окно Object Browser можно отобразить одним из трех способов.
• Нажать .
• Выбрать в строке меню команду View - Object Browser.
• Щелкнуть на кнопке Object Browser на стандартной панели инструментов.
Броузер объектов — полный справочный ресурс
Выпадающий список в левом верхнем углу окна Object Browser содержит список всех библиотек объектов, к которым у вас есть доступ,
• Собственно Excel.
• MSForms (используется для создания специальных диалоговых окон).
• Office (объекты, общие для всех приложений Microsoft Office).
• S t d o l e (объекты автоматизации OLE).
• VBA.
• Все открытые рабочие книги (каждая книга считается библиотекой объектов, так как содержит объекты).
Ваш выбор в этом списке определяет, что отображается в окне Classes (Классы), а выбор в окне Classes обусловит появление определенных компонентов в окне Members of (Включены в).
После выбора библиотеки можно осуществить поиск конкретной строки текста, чтобs получить список свойств и методов, содержащих данный текст. Это можно сделать, введя текст во втором раскрывающемся списке и щелкнув на значке с изображением бинокля.
Предположим, что выработаете над проектом, обрабатывающим примечания в ячейках. 1. Выберите интересующую вас библиотеку. Если вы не уверены, какую именно библиотеку выбрать, укажите вариант
2. Введите Comment в выпадающем списке под списком библиотек.
3. Щелкните на значке в виде бинокля, чтобы начать поиск текста.
В окне Search Results (Результаты поиска) отображается текст, соответствующий фрагменту для поиска. Выберите один объект, чтобы отобразить его классы в окне Classes. Укажите класс, чтобы отобразить его члены (свойства, методы и константы). Обратите внимание на нижнюю часть окна, где дается дополнительная информация об объекте. Вы можете нажать , чтобы перейти непосредственно к необходимому разделу справочной системы.
Система Object Browser может сначала показаться сложной, но, изучив ее вы убедитесь в ее незаменимости.
Экспериментируйте с окном Immediate
Как было отмечено во врезке в одном из предыдущих разделов этой главы, окно Immediate в VBE используется для тестирования операторов и проверки разных выражений
VBA. Рекомендуется отображать окно Immediate, так как оно часто используется для про-
верки выражений и при отладке кода.
1.2.2 Примеры на использование VBA в среде Excel
Объектная модель
Объектная модель MS Excel представляет собой иерархию объектов, подчиненных одному объекту Application, который соответствует самому приложению Excel. Многие из этих объектов собраны в библиотеке объектов Excel, но некоторые из них, например, объект Assistant, входят в библиотеку объектов Office, которая является общей для всех офисных приложений.
Объект Application
Объект Application — это главный (корневой) объект в иерархии объектов MS Excel, представляющий само приложение MS Excel. Он имеет огромное число свойств и методов, которые позволяют установить общие параметры приложения MS Excel.
Свойства объекта Application
Объект Application, благодаря обширной коллекции свойств, позволяет программно установить значения многих опций окна Параметры, отображаемого при выборе команды Сервис - Параметры. Кроме того, он обеспечивает доступ к объектам верхнего уровня типа ActiveCell, ActiveSheet и т.д. Перечислим основные свойства этого объекта:
ActiveCell ActiveChart
AcfcivePrinter ActiveSheet
ActiveWorkBook AddIns
CellDragAndDrop Charts
Cursor DefaultFilePath
DefaultWebOptions DisplayAlerts
DisplayFormulaBar DisplayScrollBars
EditDirectlylnCell FileSearch
Height LibraryPath
MemoryTotal Names
Organ i zat ionName ProductCode
Referencestyle Selection
StatusBar Top
UsableWidth Version
Windows WorksheetFunction
Семейство встроенных диалоговых окон
Свойство Dialogs возвращает семейство всех встроенных диалоговых окон. Параметр этого семейства идентифицирует ОКНО, метод Show отображает его на экране, а параметры этого метода задают параметры, специфицируемые в отображаемом окне. Метод show возвращает значение True, если задача, поставленная в отображаемом окне, была выполнена успешно. Например, следующий код (листинг 2) отображает окно Открытие документа для открытия книги C:\test.xls.
Листинг2. Открытие книги при помощи встроенного окна
Sub DemoDialogs() Dim idx As Long
idx = Application.Dialogs (xlDialogOpen) .Show("с: \test.xls") If idx Then
MsgBox "Файл открыт" Else
MsgBox "Файл не открыт" End If
End Sub.
Объект FileDialog
Объект FileDialog, возвращаемый свойством FileDialog объекта Application, предоставляет в распоряжение разработчика диалоговые окна Открыть и Сохранить как. Свойство FileDialog имеет один параметр DiaiogType. задающий тип окна. У этого параметра имеются четыре допустимых значения:
msoFileDialogFiiePicker — позволяет пользователю выбрать файл;
msoFileDialogFolderPicker — позволяет пользователю выбрать папку;
msoFileDialogopen — позволяет пользователю открыть выбранный файл. Открытие файла производится методом Execute;
msoFileDialogsaveAs — позволяет пользователю сохранить файл. Сохранение файла производится методом Execute.
Для отображения окна, симулируемого объектом FileDialog, необходимо воспользоваться методом show. Этот метод возвращает значение 0, если нажата кнопка Отмена и значение -1, если нажата другая функциональная кнопка. Для окон Открыть и Сохранить как после применения надо воспользоваться методом Execute для реализации выбранной команды.
И в следующих трех примерах демонстрируется техника сохранения и загрузки файла при помощи окон, имеющих типы msoFileDialogFilePicker (ЛИСТИНГ3), msoFileDialogOpen (ЛИСТИНГ 4) И msoFileDialogSaveAs (ЛИСТИНГ 5).
Листинг 3. Загрузка файлов с помощью окна msoFiieDiaiogFiiePicker
Sub LoadFiles()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker) Dim itm As Variant With fd
If .Show = -1 Then
For Each itm In .Selectedlterns
Workbooks.Add itm Next End If End With
Set fd = Nothing
End Sub
Листинг 4. Загрузка файла с помощью окна msoFileDialogOpen
Sub LoadFile()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogOpen) If fd.Show = -1 Then
fd.Execute Else
MsgBox "Выбрали отмену" End If
Set fd = Nothing
End Sub.
Листинг 5. Сохранение файла с помощью окна msoFileDialogSaveAs
Sub SaveFile()
Dim fd as FileDialog
Set fd=Application.FileDialog(mso FileDialogSaveAs)
If fd.Show= -1 then
Fd.Execute
End Sub.
Поиск файлов
Свойство FileSearch объекта Application возвращает объект FileSearch, который инкапсулирует и себе свойства и методы,реализующие поиск специфицированного файла на диске. Перечислим основные свойства объекта FileSearch:
- свойство LookIn возвращает или устанавливает каталог, в котором производится поиск.
- свойство FileType возвращает или устанавливает тип искомого файла. Его допустимым значением может быть одна из следующих констант:
msoFileTypeAllFiles
msoFileTypeCalendarItems
msoFileTypeCustom
msoFileTypeDataConnectionFiles
msoFileTypeDocumentImagingFiles
msoFileTypeJournaItem
msoFileTypeNoteItems
msoFileTypeOutLookItems
msoFileTypePowerPoint
msoFileTypeTemplates
msoFileTypeWebPages
msoFileTypeBindere
msoFileTypeContactItems
msoFileTypeDataBases
msoFileTypeMailItems
msoFileTypeOfficeFile
msoFileTypeTarkItems
msoFileTypeVisioItems
msoFileTypeWordDocuments
- свойство FoundFile возвращает объект FoundFiles, представляющий собой список имен всех найденных в течение поиска файлов.
Метод Execute объекта Application производит непосредственный поск. Он возвращает целое число, причем , если оно равно 0, то ни одного файла не было найдено, а если положительное , то найден , по крайней мере, один файл.
Листинг 6. Поиск рабочих книг в корневом каталоге диска С
With Application. FileSearch
.LookIN = “C:\”
.FileType= msoFileTypeExcelWordBooks
If.Execute (SortByFileName._
Sortorder: msosoftorderabcending)>0 Then
Dim str As string
Str = “Найдено” & .FoundFile.Count & “
Dim I as integer
Int= I to FoundItem.Count
Str= str &. FoundFile (i) & vthcr
Next
MsgBox str
Else
MsgBox “Рабочие книги не найдены”
End if
End with
Симулирование ячеек рабочего листа
Метод Evaluate позволяет симулировать работу с ячейками или диапазонами рабочего листа без реального воплощения этих действий на рабочем листе.
Листинг 7. Симулирование ввода данных в ячейки и считывание из них значений
Public Sub Simur()
Evaluate("A1").Value = 25














