Об'єкт Application

Об'єкт Application програми Excel представляє само
додаток Excel. Може, це і так очевидно, але Application
містить масу інформації про виконуваному додатку, параметрах даного
екземпляра і поточних користувальницьких об'єктах в цьому екземплярі. У
об'єкті Application велика кількість членів, частина з яких
вам ніколи не знадобиться, тоді як інша частина буде мати ключове
значення для коректної роботи вашої програми. Ці члени можна
згрупувати так:

У наступних розділах ви ознайомитеся з кожною з цих груп і побачите
приклади коду, що ілюструють застосування деяких членів.

Члени, що керують станом і відображенням в Excel

Об'єкт Application містить велику кількість властивостей,
керуючих загальним станом Excel. У табл. 1 перераховано
підмножина властивостей об'єкта Application, Що відносяться до
станом.

Табл 1. Деякі властивості Application, керуючі станом
Excel

 

Властивість Тип Опис
Cursor XlMousePointer (xlDefault, xlIBeam,
xlNorthwestArrow, xlWait)
Повертає або встановлює форму
курсору миші
EditDirectlyInCell Boolean Повідомляє або задає, чи можна
редагувати клітинки прямо за місцем (у самих осередках). При
значенні False можна редагувати клітинки тільки в рядку
формули (formula bar)
FixedDecimal Boolean При значенні True для визначення
кількості десяткових розрядів у всіх числових значеннях
використовується властивість FixedDecimalPlaces, В іншому випадку –
властивість FixedDecimalPlaces ігнорується (значення за
замовчуванням – False)
FixedDecimalPlaces Long Вказує кількість десяткових
розрядів, використовуваних в числових значеннях, якщо властивість
FixedDecimal
одно True
Interactive Boolean Повідомляє або задає, чи може
користувач працювати в Excel за допомогою клавіатури і миші; якщо
ви в обробнику виключення привласнюєте цій властивості значення
False, то в кінці обробки обов'язково надайте True. Сам
Excel не повертає властивості первісне значення
MoveAfterReturn Boolean При значенні True (за замовчуванням),
коли користувач натискає Enter, виділеної стає
наступна осередок
MoveAfterReturnDirection xlDirection (xlDown, xlToLeft,
xlToRight, xlUp)
Вказує напрямок, у якому
переміщається виділення після натискання Enter (якщо
MoveAfterReturn
одно True). Значення за замовчуванням –
xlDown
ScreenUpdating Boolean Якщо це властивість одно True,
Excel оновлює своє вікно після кожного виклику методу. Щоб
заощадити час і додати додатку більш професійний
вид, можна відключити оновлення на час виконання вашого коду.
Після виконання свого коду поверніть цій властивості значення
True. Excel не відновлює це значення автоматично
SheetsInNewWorkbook Long Повертає або встановлює
кількість аркушів, автоматично розміщені Excel в нові
робочі книги
StandardFont String Повертає або встановлює ім'я
шрифту Excel за умовчанням; нове значення властивості починає
діяти тільки після перезапуску Excel
StandardFontSize Long Повертає або встановлює
розмір шрифту Excel за умовчанням; нове значення властивості
починає діяти тільки після перезапуску Excel
StartupPath (тільки для читання) String Повертає повний шлях до папки,
яка містить надбудови (add-ins), що виконуються при запуску
Excel
TemplatesPath (тільки для читання) String Повертає повний шлях до папки,
містить шаблони; це значення задає одну із спеціальних
папок Windows

З усіх властивостей, перерахованих у табл. 1, Вам швидше за все
знадобиться властивість ScreenUpdating. З його допомогою можна не
тільки додати додатку більш професійний вигляд, але і домогтися,
щоб воно виконувалося швидше – оновлення екрану після кожного
зміни може призвести до величезних витрат (особливо при програмному
заповненні великого діапазону). Однак важливо не забувати знову
присвоювати йому значення True по завершенні ваших операцій, так як
Excel не робить цього автоматично. Тому при використанні властивості
ScreenUpdating вам доведеться завжди писати код, аналогічний
наступного фрагменту, де за рахунок обробки. NET-виключень
гарантується відновлення оновлення екрану:

" Visual Basic
Try
  ThisApplication.ScreenUpdating = False
"Виконуємо операції, оновлюючі екран
 
Finally
  ThisApplication.ScreenUpdating = True
End Try
 
// C#
try
{
  ThisApplication.ScreenUpdating = false;
/ / Виконуємо операції, оновлюючі екран
}
 
finally
{  ThisApplication.ScreenUpdating = true;
}

Об'єкт Application також підтримує групу властивостей,
керуючих відображенням в Excel. При зміні таких властивостей змінюється
те, що користувачі бачать на екрані. У табл. 2 перераховано
підмножина таких властивостей.

Табл 2. Деякі з властивостей Application, керуючі відображенням
в Excel

 

Властивість Тип Опис
DisplayAlerts Boolean Якщо одно True (за замовчуванням), то
при виконанні коду Excel у разі необхідності показує
попереджувальні повідомлення, наприклад при видаленні листа. Щоб
відключити попередження, надайте False. Excel діє так,
ніби ви задали значення за умовчанням для кожного попередження
DisplayFormulaBar Boolean Якщо одно True (за замовчуванням),
Excel показує стандартну рядок формули для редагування
осередків; щоб приховати цей рядок, надайте False
DisplayFullScreen Boolean Якщо одно True (за замовчуванням –
False), Excel виконується в повноекранному режимі (який
відрізняється від того, коли вікно Excel просто розгортається на
весь екран)

Рада Як і в випадку властивості ScreenUpdating, Важливо
повертати властивості DisplayAlerts значення True. Інакше, оскільки
Excel не робить цього автоматично, він не буде пропонувати зберігати
робочі книги перед закриттям, і тоді дані можуть бути втрачені з
необережності.

Члени, які повертають об'єкти

Багато властивостей об'єкта Application повертають інші об'єкти.
Оскільки стандартний шаблон проекту Microsoft Office в Visual Studio®
. NET містить лише об'єкти ThisApplication і ThisWorkbook,
для звернення до інших об'єктів Excel зазвичай потрібно використовувати
члени класу Application, Повертають об'єкти. Ці члени
дозволяють отримати посилання на заданий дочірній об'єкт за такими
властивостями, як ActiveWindow, Або за властивостями – наборам об'єктів,
наприклад по Charts. У табл. 3 перераховано підмножина
властивостей об'єкта Application, Які повертають об'єкти.

Табл. 3. Підмножина властивостей об'єкта Application, які повертають
об'єкти

 

Властивість Тип Опис
ActiveCell Range Повертає посилання на поточну
активну клітинку активного вікна (розташованого поверх інших).
Якщо активного вікна немає, генерує помилку
ActiveChart Chart Повертає посилання на поточну
активну діаграму. Вбудована діаграма вважається активною,
якщо вона вибрана чи активована
ActiveSheet Object Повертає посилання на активний аркуш
активної робочої книги
ActiveWindow Window Повертає посилання на активне вікно
(Розташоване поверх інших) чи Nothing, якщо активних вікон
немає
Charts Sheets Повертає набір об'єктів Sheet
(Предок об'єктів Chart і Worksheet), Що містить
посилання на кожну з діаграм активної робочої книги
Selection Object Повертає об'єкт, вибраний у
додатку. Це може бути Range, Worksheet або
будь-який інший об'єкт. Крім того, ця властивість є у класу
Window – Тоді виділення зазвичай є об'єктом
Range
. Якщо в даний момент не обраний жоден об'єкт,
повертає Nothing
Sheets Sheets Повертає набір об'єктів Sheet,
містить посилання на кожен з листів активної робочої книги
Workbooks Workbooks Повертає набір об'єктів
Workbook
, Що містить посилання на кожну відкриту робочу книгу

Частіше за все ви будете використовувати властивість Workbooks класу
Application
. Воно дозволяє перебирати відкриті робочі книги,
відкривати або створювати робочі книги. Поведінка цієї властивості
описується в наступному розділі.

Набір Workbooks

Набір Workbooks дозволяє працювати з усіма відкритими
робочими книгами, створювати робочу книгу і імпортувати дані в нову
робочу книгу. Нижче наведені деякі основні застосування набору
Workbooks
.

Члени, що виконують операції

Об'єкт Application містить кілька методів, що дозволяють
виконувати операції – від повторного обчислення поточних даних до відміни
змін у даних. У наступному списку перераховані деякі методи
об'єкта Application, Для кожного з яких надається невеликий
приклад. Приклади з цього розділу показуються в робочій книзі на аркуші
Application Object.

Члени, використовувані при операціях з файлами

Об'єкт Application містить кілька членів, що дозволяють
взаємодіяти з файловою системою в контексті додатків Excel. У
наступних розділах описуються деякі члени, які знадобляться вам
з найбільшою ймовірністю. (Приклади, описані в цьому документі,
відносяться до листа Application File Handling демонстраційної
робочої книги.)

Властивість DefaultFilePath

Це просте властивість повертає або встановлює шлях,
використовуваний Excel для завантаження або збереження файлів:

" Visual Basic
"При відкритті робочої книги:
ThisApplication.Range("DefaultFilePath").Value = _
  ThisApplication.DefaultFilePath
 
"При збереженні властивості DefaultFilePath:
ThisApplication.DefaultFilePath = _
  ThisApplication.Range("DefaultFilePath"). _
  Value.ToString
 
// C#
/ / При відкритті робочої книги:
ThisApplication.get_Range ("DefaultFilePath", Type.Missing).
  Value2 = ThisApplication.DefaultFilePath;
 
/ / При збереженні властивості DefaultFilePath:
ThisApplication.DefaultFilePath = 
ThisApplication.get_Range ("DefaultFilePath", Type.Missing).
  Value2.ToString();

Властивість DefaultSaveFormat

Це властивість повертає або встановлює використовується за
замовчуванням формат збереження робочих книг. Воно приймає багато значень
перечислимого типу XlFileFormat. У прикладі робочої книги можна
вибрати будь-яке доступне значення (рис. 1). У наступному фрагменті
коду показується, як завантажити або зберегти значення властивості.

У прикладі стовпець E аркуша містить список імен всіх можливих
значень перечислимого XlFileFormat (У діапазоні XlFileFormat), а
стовпець F – відповідні цілі значення. На рис. 2 показано
підмножина цих двох стовпців. Іменований діапазон DefaultSaveFormat
(рис. 1) Містить посилання на діапазон XlFileFormat і дозволяє
вибирати значення зі списку. Після того як ви вибрали значення і
вказали, що хочете його зберегти, код знаходить обрану рядок методом
Range.Find, А потім за допомогою методу Range.Offset
повертає зсув знайденого значення. (Додаткову інформацію про
методі Range.Find див. в розділі "Пошук в діапазонах" далі в цьому
документі.) Нарешті, код заносить ціле значення (перетворене в
відповідний перераховувані тип) назад у властивість
DefaultSaveFormat
.

Читати поточне значення DefaultSaveFormat легко. Наступний
код перетворює значення в текст і показує його у відповідному
об'єкті Range аркуша:

" Visual Basic
"При відкритті робочої книги перераховуваній значення
"Перетворюється в рядок
ThisApplication.Range("DefaultSaveFormat").Value = _
  ThisApplication.DefaultSaveFormat.ToString
 
// C#
/ / При відкритті робочої книги перераховуваній значення
/ / Перетвориться в рядок
ThisApplication.get_Range ("DefaultSaveFormat", Type.Missing).
  Value2 = ThisApplication.DefaultSaveFormat.ToString();

Присвоїти вибране значення властивості трохи складніше. Для цього потрібно
виконати три операції.

Рис. 1. Вибір формату файлу зі списку доступних типів

Рис. 4. На аркуші WorksheetFunction демонструються корисні методи
класу WorksheetFunction

Як бачите, об'єкт Range можна передавати в якості параметра
методів класу WorksheetFunction. Крім того, параметром може
бути як окреме значення, так і список значень. В основному методи
приймають до 32 параметрів, тому, якщо потрібно, наприклад, обчислити
середнє значення для фіксованого списку чисел, використовується код виду:

" Visual Basic
dblAverage = ThisApplication.WorksheetFunction.Average( _
 12, 14, 13, 19, 21)
 
// C#
/ / Зверніть увагу на кількість значень Type.Missing -
/ / Метод приймає 30 параметрів
dblAverage = ThisApplication.WorksheetFunction.Average(
  12, 14, 13, 19, 21, 
  Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing);

Клас Window і набір Windows

Як і можна було очікувати, об'єкт Application дозволяє
управляти вікнами програми Excel, а властивість Windows об'єкта
Application
використовується для того, щоб відкривати, закривати і
упорядковувати вікна Excel.

Властивість Windows повертає набір об'єктів Window, І ви
можете викликати метод Arrange, Щоб упорядкувати всі відкриті (або
тільки видимі) вікна. Щоб визначити, як розташувати вікна, вказується
одне зі значень перечислимого XlArrangeStyle і при необхідності
інформація про те, впорядковуються чи тільки видимі вікна і як
синхронізувати прокручування вікон. Наприклад, щоб розташувати вікна зліва
направо (tile) в робочому просторі Excel, використовується код виду:

" Visual Basic
ThisApplication.Windows.Arrange( _
  Excel.XlArrangeStyle.xlArrangeStyleTiled)
 
// C#
ThisApplication.Windows.Arrange( 
  Excel.XlArrangeStyle.xlArrangeStyleTiled, 
  Type.Missing, Type.Missing, Type.Missing);

Для програмного створення вікна можна викликати метод NewWindow
робочої книги:

" Visual Basic
ThisWorkbook.NewWindow()
 
// C#
ThisWorkbook.NewWindow();

Оскільки метод NewWindow повертає об'єкт Window,
можна написати наступний код, який присвоює заголовок новому вікну
і потім активізує його:

" Visual Basic
With ThisWorkbook.NewWindow()
  .Caption = "New Window"
  .Activate()
End With
 
// C#
Excel.Window wnd = ThisWorkbook.NewWindow();
wnd.Caption = "New Window";
wnd.Activate();

Клас Window містить властивості та методи, що керують виглядом і
поведінкою відповідного вікна: квітами, заголовком, видимістю
елементів вікна і поведінкою при прокручуванні. Для завдання властивостей вікна
можна використовувати код виду:

" Visual Basic
With ThisApplication.Windows(3)
  .GridlineColor = ColorTranslator.ToOle(Color.Red)
  .Caption = "A New Window"
  .DisplayHeadings = False
  .DisplayFormulas = False
  .DisplayWorkbookTabs = False
  .SplitColumn = 1
End With
 
// C#
wnd = ThisApplication.Windows[3];
wnd.GridlineColor = ColorTranslator.ToOle(Color.Red);
wnd.Caption = "A New Window";
wnd.DisplayHeadings = false;
wnd.DisplayFormulas = false;
wnd.DisplayWorkbookTabs = false;
wnd.SplitColumn = 1;

Рада У VBA і. NET при роботі з кольорами використовуються
аналогічні парадигми: і там, і там колір задається трьома молодшими байтами
32-бітного цілого, які відповідають червоною, зеленою і синій
складовим кольору. Але кольори все ж обробляються по-різному. Методом
System.Drawing.ColorTranslator.ToOle можна перетворити
. NET-колір в OLE-колір, з яким працює VBA.

Після клацання Work with Windows на аркуші Other Application
Members
запускається процедура-приклад TestWindows, що містить всі
фрагменти коду, які показані в цьому розділі. Після клацання Reset
Windows
на тому ж аркуші запускається процедура, що закриває всі вікна,
крім першого, а потім розгортає це вікно:

" Visual Basic
Private Sub ResetWindows()
  Dim i As Integer
  For i = ThisApplication.Windows.Count To 2 Step -1
    ThisApplication.Windows(i).Close()
  Next
  ThisApplication.Windows(1).WindowState = _
  Excel.XlWindowState.xlMaximized
End Sub
 
// C#
private void ResetWindows()
{
  for (int i = ThisApplication.Windows.Count; i >= 2; i--)
    ThisApplication.Windows[i].Close(
    false, Type.Missing, Type.Missing);
  ThisApplication.Windows[1].WindowState = 
    Excel.XlWindowState.xlMaximized;
}

Клас Name і набір Names

В об'єкта Application є властивість Names, Повертає
набір об'єктів Name. Кожен об'єкт Name відповідає
іменованого діапазону Excel. Посилання на іменований діапазон можна
отримати різними способами, зокрема через властивість Names
об'єкта Workbook або об'єкта Worksheet.

Для створення іменованого діапазону служить метод Add набору
Names
, Показаний у наступному фрагменті. Метод Add приймає
крім двох обов'язкових параметрів кілька необов'язкових:

" Visual Basic
Dim nm As Excel.Name
nm = ThisApplication.Names.Add( _
"NewName", "=" Other Application Members "! $ A $ 6")
 
// C#
Excel.Name nm;
 
nm = ThisApplication.Names.Add(
"NewName", @ "=" Other Application Members "! $ A $ 6", 
  Type.Missing, Type.Missing, Type.Missing, 
  Type.Missing, Type.Missing, Type.Missing, 
  Type.Missing, Type.Missing, Type.Missing);

Вказавши ім'я та місцезнаходження (і інші необов'язкові параметри),
можна програмно звернутися до діапазону:

" Visual Basic 
ThisApplication.Range ("NewName"). Value = "Hello, World!"
 
// C#
ThisApplication.get_Range(
"NewName", Type.Missing). Value2 = "Hello, World!";

Щоб отримати інформацію про іменованому діапазоні, використовуйте
різні властивості класу Name. Нижче наведено декілька
найбільш часто використовуваних членів.

Після клацання посилання Work with Names у прикладі викликається код,
заповнює область таблиці інформацією про всі іменованих діапазонах:

" Visual Basic
Dim nm As Excel.Name
Dim rng As Excel.Range = ThisApplication.Range ("Names")
Dim i As Integer
 
For i = 0 To ThisApplication.Names.Count - 1
  nm = ThisApplication.Names.Item(i + 1)
  rng.Offset(i, 0).Value = nm.Name
"Без ведучого" "" ці посилання обчислюються,
"А не показуються безпосередньо
rng.Offset (i, 1). Value = "" "& nm.RefersTo.ToString
rng.Offset (i, 2). Value = "" "& nm.RefersToR1C1.ToString
  rng.Offset(i, 3).Value = nm.Value
Next i
 
// C#
Excel.Range rng = ThisApplication.get_Range ("Names", Type.Missing);
for ( int i = 0 ; i <= ThisApplication.Names.Count - 1; i++)
{
  nm = ThisApplication.Names.Item(i + 1, 
    Type.Missing, Type.Missing);
  rng.get_Offset(i, 0).Value2 = nm.Name;
/ / Без ведучого "" "ці посилання обчислюються,
/ / А не показуються безпосередньо
rng.get_Offset (i, 1). Value2 = "" "+ nm.RefersTo.ToString ();
rng.get_Offset (i, 2). Value2 = "" "+ nm.RefersToR1C1.ToString ();
  rng.get_Offset(i, 3).Value2 = nm.Value;
}

Події класу Application

Поряд з методами, у класу Application є велика
кількість подій. Продемонструвати всі ці події в якому-небудь
логічно послідовному прикладі неможливо, проте за їх іменами
більш-менш зрозуміло, як їх використовувати. У наступних розділах
описується підмножина подій, які вам швидше за все доведеться
обробляти у своїх додатках.

РадаПараметри, що передаються обробникам подій додатка
Office, відрізняються від параметрів, використовуваних у вбудованих
обробниках. NET-подій. Як правило, обробники. NET-подій
приймають змінну Object, Що посилається на об'єкт, який
ініціював подія, і другий параметр, успадкований від базового
класу EventArgs і містить додаткову інформацію про
подію. У додатках Office немає настільки чітко визначеного шаблону
подій, тому кожен обробник події приймає довільне число
параметрів, заданих його розробником.

Поведінка об'єкта листа

надає ряд подій, пов'язаних з листами
(Діаграмами і робочими листами). У наступному списку наводиться
інформація про багатьох з цих подій.

Примітка І з подій, описаних у цьому розділі,
доступно і як подія класу Workbook. Події об'єкта
Application
генеруються для будь-якого аркуша, відкритого в даний момент
в Excel. Події об'єкта Workbook виникають, тільки якщо вони
відносяться до листа, який належить цій робочій книзі. Крім того, ті ж
події є у класу Worksheet. У цьому випадку в імені події
немає слова "Sheet" (наприклад FollowHyperlink замість
SheetFollowHyperlink
і т. д.), а обробникам подій не передається
посилання на лист – мається на увазі, що це об'єкт, який прийняв подія. У
іншому події, їх застосування і параметри ідентичні подіям,
описаним вище.

Поведінка вікна

Об'єкт Application (І відповідно об'єкт Workbook)
надає ряд подій, пов'язаних з поведінкою об'єктів Window.
Ці події описані в наступному списку.

Примітка У подіях класу Workbook обробники
подій не приймають посилання на Workbook – Мається на увазі, що
це об'єкт, який ініціював подія.

Управління робочою книгою

В об'єкта Application є ряд подій, які
генеруються при взаємодії з об'єктами Workbook. Кожна
процедура, обробна ці події, приймає змінну Workbook,
задаючу робочу книгу, де сталася подія. Нижче перераховано
підмножина подій управління робочою книгою.