29
Міністерство освіти і науки
Українська академія друкарства
Реферат
з інформатики на тему: “ACCESS і VISUAL BASIC FOR Application. Excel VBA: gрийоми програмування"
Підготував:
Студент групи Б-21
Зіновєв Максим
Львів-2006
Содержание
- 1. Що таке Visual Basic for Applications
-
- 2. Створення коду VBA за допомогою майстрів елементів управління
- 3. Модулі
- 4. Процедури
- 4.1 Створення процедур обробки подій
- 4.2 Редагування у вікні модуля
- 4.3 Аргументи процедури
- 5. Основні оператори VBA
- 5.1. Змінні і оператор привласнення
- 5.2. Умовні оператори
- 6. Excel VBA: Прийоми програмування
1. Що таке Visual Basic for Applications
Visual Basic for Applications є напівфункціональною мовою програмування, що є невідємною складовою частиною Access. Ця мова використовується для розробки додатків, призначених для маніпулювання БД і для настройки призначеного для користувача інтерфейсу. VBA - це структурована мова програмування високого рівня. У нім, як і в інших мовах, є оператори перевірки умов, циклічного виконання операцій, що повторюються, а також обміну даними з памяттю і дисками. У мові VBA реалізовані загальні принципи обєктно-орієнтованого програмування. Це означає, що призначене для користувача середовище, кероване додатком, не піддається змінам шляхом виконання послідовності процедур і операторів, але реагує на події, повязані з різними обєктами: полями введення, кнопками, розділами форм і звітів. У мові VBA програмний код привязаний безпосередньо до обєктів і спрацьовує тоді, коли трапляється певна подія. Все програмування в Windows засноване саме на відгуку на ту або іншу подію в системі.
2. Створення коду VBA за допомогою майстрів елементів управління
Одним з ефективних способів використання VBA є привязка коду до кнопок, що додаються у форму за допомогою майстрів елементів управління. Щоб додати кнопку з фрагментом коду, а потім проглянути код, необхідно виконати наступне:
1. Відкрити яку-небудь БД, в якій є таблиця.
2. Вибрати таблицю і виконати кацання на кнопці Автоформа стандартній панелі інструментів. Для таблиці буде створена форма за умовчанням.
3. Зберегти створену форму, виконавши клацання на кнопці закриття вікна, а потім на запит про збереження відповісти ствердно і ввести імя створеної форми або залишити запропоноване для збереження імя форми.
4. Вибрати вкладку Форми. Вибрати створену форму.
5. Виконати клацання по кнопці Конструктор, для перемикання в режим конструктора форми.
6. Вибрати команду Вигляд - > Панель елементів, якщо панель елементів не відображена на екрані.
7. Перевірити, чи активізовані майстри елементів управління (т.е. чи натиснута кнопка Майстра).
8. Виконати клацання на елементі Кнопка.
9. Виконати клацання на вільному місці форми, щоб вставити в неї кнопку. Відкриється діалогове вікно майстра кнопок, показане на малюнку 1.
Мал.1.
10. У списку Категорії вибрати пункт Переходи по записах, а потім в списку Дії - > Пошук запису. Після клацання на кнопці Готово у форму буде додана кнопка, що виконує пошук.
11. Виконати клацання на елементі Кнопка.
12. Вставити кнопку на вільному місці форми нижче попередньою, створеною раніше. Знову відкриється вікно кнопок.
13. У списку Категорії вибрати пункт Робота з формою, а в списку Дії - пункт Закриття форми. Після клацання по кнопці Готово у форму буде додана кнопка, що виконує закриття форми.
14. Зберегти форму, вибравши команду Файл - > Зберегти. Після цього можна запустити форму і перевірити роботу доданих кнопок.
15. Перемкнутися в режим Констуктора, виконавши клацання по кнопці Конструктор.
16. Вибрати команду Вигляд - > Програма або виконати клацання по кнопці Програма на панелі інструментів. Відкриється вікно редактора Visual Basic for Applications, представлене на малюнку 2.
Мал.2.
У цьому вікні можна бачити три фрагменти програми на мові VBA: розділ оголошень (у верхній частині вікна), який містить код, що відноситься до всієї форми в цілому, а також два розділи коду, привязаних до двох кнопок.
Перший розділ починається із заголовка процедури:
Private Sub Кнопка13_Click ()
Закінчується процедура оператором: End Sub. Оператори, увязнені, між ними виконуються після клацання по кнопці Знайти. Основна частина роботи виконується наступним оператором:
DoCmd. DoMenuItem acFormBar, AcEditMenu, 10, AcMenuVer70
Цей оператор виконує ті ж дії, що і команда меню Правка - > Знайти, тобто виводить на екран діалогове вікно Пошук в полі, за допомогою якого можна виконати пошук.
Відкривши модуль VBA, його можна редагувати як текст в будь-якому текстовому редакторові. У вікні редактора Visual Basic в код можна вставити текст з іншого файлу. Для цього вибрати команду Вставка - > Файл, а в діалоговому вікні, що відкрилося, вибрати потрібний файл і виконати клацання по кнопці ОК.
Модулі на мові Visual Basic можна виводити на друк. Для цього слід відкрити модуль і вибрати команду Файл - > Друк.
3. Модулі
Структурним елементом програми, написаної на мові VBA, є модуль - сукупність оголошень і процедур, обєднаних в єдине ціле. У ACCESS 97 модулі трьох типів: стандартні модулі, модулі форми і модулі звітів. На відміну від стандартного модуля, який створюється таким же чином, як і будь-який інший обєкт БД, і може виконувати практично будь-які обчислення, модулі форм і звітів розробляються для обробки подій, повязаних з елементами форми або звіту.
Кожен модуль складається з області опису і однієї або декількох процедур. Процедура є послідовністю операторів, які часто називають програмними кодами. Вхідні в модуль процедури обєднані загальною областю опису. У ній описуються дані і обєкти, які є загальноприйнятими для процедур модуля. Ієрархія вказаних обєктів така:
база даних;
модуль;
область опису;
процедура;
код;
оператор.
Процедури діляться на дві категорії: процедури-підпрограми (підпрограми) і процедури-функції (функції).
Процедура-підпрограма активізується при зверненні до неї по імені, унаслідок чого виконується певна послідовність операторів (інструкцій). Підпрограму використовують, наприклад, для завдання властивості форми або заповнення списку значеннями, отриманими в результаті обчислень.
Процедура-функція після виконання повертає деяке значення, яке можна застосовувати в операторах і виразах як змінній. Наприклад, функції можуть повертати значення, використовуване за умовчанням для деякого поля, або обчислювати складний критерій в рамках запиту. У модуль можна включати будь-яку кількість функцій і підпрограм.
4. Процедури
Процедурою називається цілісна структурна одиниця коду на мові VBA. Кожна процедура складається з операторів, в яких застосовуються вбудовані в ACCESS 97 функції, методи і властивості, які призначені для виконання яких-небудь операцій над даними.
Наприклад, до властивості Click кнопки Знайти приведеного раніше прикладу привязана наступна процедура:
Private Sub Command6_Click ()
On Error GoTo Err_Command6_Click
Screen. PreviosControl. SetFocus
DoCmd. DoMenuItem acFormBar, acEditMenu, 10,, acMenuVer70
Exit Command6_Click:
Exit Sub
Err_Command6_Click:
MsgBox Err. Descrition
Resume Exit_Command6_Click
End Sub
Для звернення до перерахованих обєктів, а також для позначення операторів використовуються ключові слова, які записуються з прописної букви (наприклад, Function).
Теоретично кожна процедура може бути викликана з будь-якого модуля, а функція - з таких обєктів, як форма, запит або звіт. Разом із загальнодоступними процедурами (Public), якими є всі процедури за умовчанням, існують локальні, або особисті процедури (Private), доступні тільки в тому модулі, в якому вони описані.
Для передачі значень із зухвалих операторів в процедури, що викликаються, служать аргументи.
За допомогою аргументів ведеться контроль за виконанням процедури, встановлюється спосіб отримання результату, визначаються параметри обчислень і т.д.
4.1 Створення процедур обробки подій
Розробникам додатків ACCESS, що починають, знадобиться набір процедур для відгуку на різні події, наприклад, внесення змін до поля або клацання на кнопці. Код процедури обробки події привязується до події, яка може відбутися при роботі з формою, звітом або елементом управління. Результат виконання процедури-функції зазвичай застосовується:
·як значення за умовчанням для поля таблиці;
·як значення критерію для запитів або фільтрів;
·як вміст поля.
Хоча конкретний вид процедури залежить від події і бажаного відгуку, можна запропонувати загальну послідовність дій по створенню процедури обробки події.
1. Відкрити потрібну форму або звіт в режимі конструктора. Якщо необхідно привязати процедуру до елементу управління, вибрати цей елемент.
2. Вибрати команду Вигляд - > Властивості, щоб відкрити вікно властивостей форми, звіту або елементу управління.
3. Відкрити вкладку Події.
4. Виконати клацання на рядку властивості тієї події, яка повинна запускати процедуру. Наприклад, якщо процедура повинна запускатися у відповідь на зміну користувачем даних, виконати клацання на властивості Після оновлення.
5. Виконати клацання по кнопці з трьома крапками, щоб відкрити діалогове вікно Будівник.
6. У цьому вікні виконати подвійне клацання мишею на рядку Програми. Відкриється вікно редактора Visual Basic, в якому автоматично зявиться початковий і кінцевий рядки процедури.
7. Ввести операторів, створюючих код процедури.
Для підвищення легкості для читання коду процедури, що вводиться між обмежувальними операторами, застосовують прийоми структуризації. Один з таких прийомів полягає в тому, що всі оператори процедури записуються з відступом від початку рядка. Для створення відступу можна використовувати клавішу Tab. За умовчанням позиції табуляції встановлені через чотири символи. Відступи утворюються і за допомогою команди Збільшити відступ з меню Правка. В результаті активізації цієї команди рядок зміщується управо на ту кількість символів, яка вказана в полі інтервал табуляції. Команда Зменшити відступ служить для виконання протилежної дії.
За допомогою відступів виділяють вкладені цикли і умовних операторів усередині процедури.
Тексти програм прийнято забезпечувати коментарями. На початку кожного рядка коментаря ставиться апостроф, і такі рядки не впливають на виконання програми, а при синтаксичному аналізі і компіляції - пропускаються. Разом з відступами ACCESS 97 дозволяє використовувати різні шрифти і кольори для виділення фрагментів тексту модуля. Ці параметри встановлюються на вкладці Модуль діалогового вікна Параметри.
4.2 Редагування у вікні модуля
Код модуля і тексти підпрограм/функцій редагуються також як документи в звичайному текстовому редакторові. Для пошуку процедури в тексті модуля використовується список процедур, що знаходиться у верхній частині вікна модуля.
При переміщенні курсора з рядка коду програма автоматично перевіряє синтаксис цього рядка і у разі виявлення помилки виводить на екран відповідне повідомлення. Для відмови від такої перевірки слід вимкнути опцію перевірка синтаксису на вкладці Модуль діалогового вікна Параметри.
Для швидкого пошуку і заміни фрагментів коду застосовуються команди Знайти і Замінити з меню Правка.
У ACCESS при редагуванні фрагментів кодів окрім загальноприйнятих використовуються додаткові комбінації клавіш: Ctrl + Y дозволяє вставити в буфер рядок, в якому знаходиться курсор, не виконуючи його маркіровку; F3 і Shift + F3 дозволяють проглянути всі фрагменти модуля, в яких зустрічається шукана послідовність символів. F3 дублює команду Знайти далі з меню Правка і кнопку Знайти далі вікна пошуку.
4.3 Аргументи процедури
Завдяки аргументам користувач має можливість управляти виконанням процедури. При описі процедури, залежної від аргументів, імя аргументу прийнято вводити в дужках за імям процедури в рядку з ключовим словом Function/Sub. Наприклад:
Function Рубли_в_Доллары (Коефіцієнт)
При виклику такої функції значення аргументу указується в дужках після імені функції Наприклад:
=Рубли_в_Доллары (4500)
Виклик процедури, що має аргументи, повинен супроводжуватися завданням значень для всіх оголошених аргументів. Ці значення перераховуються в тому ж порядку, що і аргументи при оголошенні і розділяються комами. У призначених для користувача функціях або модулях як аргументи можуть застосовуватися вирази.
5. Основні оператори VBA
5.1. Змінні і оператор привласнення
Змінні використовуються для збереження значень величин, що змінюються в процесі виконання програми. Кожна змінна має імя по якому до неї звертаються. Правила привласнення імен аналогічно правилу привласнення імен для полів. Привласнення значення для змінної здійснюється за допомогою оператора привласнення. У лівій частині оператора привласнення імя змінної, а в правій - значення або вираз.
Змінні можуть створюватися автоматично, у міру появи в процедурі (неявне оголошення). За умовчанням неявно оголошені змінні мають тип Variant. Усередині такої змінної окрім значення зберігається індикатор типу значення.
Неявне оголошення типу допустиме тільки у разі відсутності оператора Option Explicit в області опису модуля. Щоб при створенні нового модуля запобігти появі цього оператора в області опису, слід відключити опцію явний опис змінних на вкладці Модуль діалогового вікна Параметри.
Рекомендується описувати всі змінні явно, це дозволить уникнути помилок, повязаних з перетворенням типів даних. Явний опис типу проводиться оператором Dim, після якого указується імя змінної і її тип. Якщо при явному оголошенні змінній не вказаний тип даних, а задано тільки імя змінної те буде створене змінна типа Variant, якою можна привласнювати ланцюжки символів, числа з плаваючою крапкою, значення дати і часу. ACCESS 97 однозначно ідентифікує привласнюванні значення, оскільки разом з ними він зберігає в змінній і ознака типу.
У ACCESS використовуються наступні типи даних:
Тип даних. Значення, що зберігаються. Область значень
Boolean Логічна величина True або False
Byte Ціле позитивне число Від 0 до 255
Integer Ціле число Від - 32768 до 32768
Long Ціле число подвійної довжини Від - 2147483648 до 2147483648
Single Число з плаваючою крапкою Від - 3,402823Е38 до - 1,401298Е-45 і від 1,401298Е-45 до 3,402823Е38
Double Число з плаваючою точкою подвійної точності Від - 1,79769313486232Е308 до - 4,94065645841247Е-32 і від 4,94065645841247Е-324 до 1,79769313486232Е308
Currency Число з фіксованою крапкою (використовується для проведення грошових розрахунків) Від - 922337203685477,5808 до 922337203685477,5807
Rate Дата Від 1 січня 100 року до 31 грудня 9999 року
String (фіксованої довжини) Рядкове значення Довжина від 1 до 65536
String (змінної довжини) Рядкове значення Довжина від 0 до 2147483648
Для оголошення декілька змінних можна користуватися одним оператором Dim, перераховуючи їх через кому.
При оголошенні змінній слід памятати про область дії. Змінні оголошені в процедурі, можна використовувати тільки усередині цієї процедури. Якщо змінна повинна бути доступна у всіх процедурах одного модуля, її необхідно оголосити в області опису модуля.
Тут також можна застосовувати оператора Dim. Найбільшу область дії має змінна, оголошена глобальною (з префіксом Global) в області опису модуля. Синтаксис оператора Global не відрізняється від синтаксису оператора Dim.
На відміну від змінній, константа містить фіксоване значення, яке не може бути змінене в процесі виконання програми. Згідно правилам хорошого тону, константи, як і змінні, слід оголошувати явно, указуючи їх імена і значення.
Для оголошення константи використовується оператор Const. Оголошену константу можна використовувати в програмі, звертаючись до неї по імені. Наприклад:Const Число_Пи = 3.1415926
5.2. Умовні оператори
У мові VBA, як і в інших мовах програмування, основними елементами, керівниками ходом виконання процедури, є умовні оператори. Найбільш простій з них - оператор If... Then:
If Поліна = "Ж" Then
Поздоровлення = "З 8 березня!"
End if
Якщо умова, задана виразом між ключовими словами If і Then виконується, дотримуються інструкції усередині блоку, обмеженого ключовими словами Then і End if. Інакше оператори між ключовими словами не виконуються, а ACCESS перейде до обробки оператора, який слідує за ключовими слова End if. У разі потреби провести дві різні дії (одне при дотриманні умови, а друге - ні), доцільно скористатися повною формою оператора If:
If вираз Then
Оператор1
Else
Оператор2
End if
Якщо умова дотримується, виконується Оператор1 (або група операторів, розташованих між ключовими словами Then і Else, а якщо не дотримується - Оператор2 (або група операторів, розташованих між ключовими словами Else і End if.
Проте, не завжди можливі два варіанти рішення. Враховуючи це, VBA надає в розпорядження користувачів оператора Select Case, призначеного для вибору одного з множин варіантів рішень:
Select Case Місто
Case "Київ"
Код_МГТС = "044"
Case "Москва"
Код_МГТС = "095"
Case "Запоріжжя"
Код_МГТС = "061-2"
Case Else
Print "Я не знаю такого міста!"
End Select
При виконанні цього оператора перевіряється значення змінної Місто. Залежно від результату перевірки змінної Код_МГТС привласнюється телефонною код деякого міста. Якщо значення змінної Місто не співпадає ні з одним із значень, перерахованих в рядках з ключовим словом Case, проводиться дія, вказаною між ключовими словами Case Else і End Select.
5.3. Оператори циклу
Цикл використовується для багатократного повторення однієї або декількох інструкцій. Кількість повторень циклу повязана з деякою умовою. У VBA передбачено декілька різновидів циклів. Простим прикладом циклічної конструкції є так званий цикл по лічильнику.
For Лічильник = 1 To 10
Print Лічильник
Next Лічильник
Цикл по лічильнику обмежується ключовими словами For і Next. Після ключового слова For указується імя змінної, яка виконуватиме роль лічильника, після знаку рівності - початкове значення лічильника, а після ключового слова To - кінцеве значення лічильника.
Ще один різновид циклу - While-цикл. Умова виконання команд усередині такого циклу визначається деяким умовним оператором:
Do While Лічильник <> 10
Print
Loop
Різновидом циклу Do є Until-цикл, який виконується, поки умовний вираз помилковий:
Do Until Счетчик=10
Print
Счетчик=Счетчик+1
Loop
6. Excel VBA: Прийоми програмування
Як визначити останній запис в таблиці Excel?
Необхідно знайти останній запис в електронній таблиці. Це можна було б організувати функцією Application. SpecialCells (xlLastCell)
Як відмінити виділення діапазону осередків?
ActiveSheet. Cells. Select
Після припинення роботи макросу діапазон залишається виділеним. Як це виділення прибрати?
Selection. Cells (1). Select Фокус введення потрапить після цього на перший осередок раніше виділеного діапазону.
Як з макросу Excel програмно створити таблицю Access?
Ось фрагмент коду, який створює таблицю "BalanceShifr" базі даних MS Access:
Не забудьте виставити в Excel посилання на обєкти DAO!
[VBA] Tools/References/Available References/ [x] MicroSoft DAO?.? Library Function CreateTable Create temporary table "BalanceShifr" into temporary database
Public Function CreateTable (ByVal dbTemp As Database) As Boolean
Dim tdfTemр As TableDef
Dim idx As Index
Dim fld As Field
On Error GoTo errhandle
CreateTable = True
CREATE TABLE "BalanceShifr"
Set tdfTemp = dbTemp. CreateTableDef ("BalanceShifr")
Set fld = tdfTemp. CreateField ("ConditionId", dbLong)
fld. Required = True
tdfTemp. Fields. Append fld
Set fld = tdfTemp. CreateField ("Account", dbText,
4)
tdfTemp. Fields. Append fld
Set fld = tdfTemp. CreateField ("SubAcc", dbText,
4)
tdfTemp. Fields. Append fld
Set fld = tdfTemp. CreateField ("Shifr", dbLong)
tdfTemp. Fields. Append fld
Set fld = tdfTemp. CreateField ("Date", dbDate)
fld. Required = True
tdfTemp. Fields. Append fld
Set fld = tdfTemp. CreateField ("SaldoDeb", dbCurrency)
tdfTemp. Fields. Append fld
Set fld = tdfTemp. CreateField ("SaldoKr", dbCurrency)
tdfTemp. Fields. Append fld
dbTemp. TableDefs. Append tdfTemp
CREATE INDEX "BalanceShifr"
Set tdfTemp = dbTemp. TableDefs ("BalanceShifr")
Set idx = tdfTemp. CreateIndex ("ForeignKey")
Set fld = idx. CreateField ("ConditionId")
idx. Fields. Append fld
tdfTemp. Indexes. Append idx
Exit Function
errHandle:
MsgBox "Table creating error!", vbExclamation, "Error"
CreateTable = False
End Function
Видалення листів залежно від дати
Як видалити робочі листи листів залежно від дати?
Ось код функції на Excel VBA, який вирішує дану проблему:
Function DelSheetByDate
Видаляє робочий лист sSheetName в активній робочій книзі
якщо дата dDelDate вже наступила
У разі успіху повертає True, інакше - False
Public Function DelSheetByDate (sSheetName As String _
dDelDate As Date) As Boolean
On Error GoTo errHandle
DelSheetByDate = False
Перевірка дати
If dDelDate <= Date Then
Не виводити підтвердження на видалення
Application. DisplayAlerts = False
ActiveWorkbook. Worksheets (sSheetName). Delete
DelSheetByDate = True
Application. DisplayAlerts = True
End If
Exit Function
errHandle:
MsgBox Err. Description, vbCritical, "Помилка №" & Err. Number
End Function
Придушення "гарячих" клавіш
Public Sub Auto_Open ()
Overrride standard accelerators
With Application
. OnKey "^o", "Dummy"
. OnKey "^s", "NewAction"
. OnKey "^р", "" Kill hotkey!
End With
End Sub
- ----
Public Sub Dummy ()
MsgBox "This hotkey redefined!"
End Sub
- ----
Public Sub NewAction ()
SendKeys "^n" Press <CTRL>+<s> for create new file
instead of <CTRL>+<n>!
End Sub
Hint: Відладжено в MS Excel 97!
Підказки до Toolbar
Як зробити до "саме намальованим" кнопочкам на Toolbar підказки?
Зробити можна от як: (Приклад реалізації на Excel97 VBA)
Створюємо тулбар
Рublic Sub InitToolBar ()
Dim cmdbarSM As CommandBar
Dim ctlNewBtn As CommandBarButton
Set cmdbarSM = CommandBars. Add (Name: ="MyToolBar"
Position: =msoBarFloating _
temporary: =True)
With cmdbarSM
1) Додаємо кнопку
Set ctlNewBtn =. Controls. Add (Type: =msoControlButton)
With ctlNewBtn
. FaceId = 26
. OnAction = "OnButton1_Click"
. TooltipText = "My tooltip message!"
End With
2) Додаємо ще кнопку
Set ctlNewBtn =. Controls. Add (Type: =msoControlButton)
With ctlNewBtn
. FaceId = 44
. OnAction = "OnButton2_Click"
. TooltipText = "Another tooltip message!"
End With
. Visible = True
End With
End Sub
Як визначити адресу активного осередку
Як в макросі дізнатися і використовувати поточне положення курсора
ActiveCell. Row і ActiveCell. Column - покажуть координати активного осередку.
Підрахунок коментарів на робочому листі
Як дізнатися чи є хоч один Notes (коментар) в робочому листі, окрім як перебором по всіх осередках?
У Excel97 ця проблема може бути вирішена от як:
Function IsCommentsPresent
Повертає TRUE, якщо на активному робочому листі є хоч би
один осередок з коментарем, інакше повертає FALSE
Public Function IsCommentsPresent () As Boolean
IsCommentsPresent = (ActiveSheet.comments. Count <> 0)
End Function
Підказки до Toolbar (Excel95 і 97)
Як зробити свій власний Toolbar з tooltipами на кнопках в Excel95?
Ось фрагмент коду для Excel95, який створює toolbar з однією кнопкою з призначеним для користувача tooltiром. Натиснення кнопки приводить до виконання макросу NothingToDo ().
This example creates а new toolbar, adds the Camera button
(button index number 228) to it, and then displays the new toolbar.
Public Sub CreateMyToolBar ()
Dim myNewToolbar As Toolbar
On Error GoTo errHandle:
Set myNewToolbar = Toolbars. Add (Name: ="My New Toolbar")
With myNewToolbar
. ToolbarButtons. Add Button: =228, StatusBar: ="Statusbar help string"
. Visible = True
With. ToolbarButtons (1)
. OnAction = "NothingToDo"
. Name = "My custom tooltiр text!"
End With
End With
Exit Sub
errНandle:
MsgBox "Error number " & Err & ": " & Error (Err)
End Sub
Toolbar button on action code
Рublic Sub NothingToDo ()
MsgBox "Nothing to do!", vbInformation, "Macro running"
End Sub
Запуск Excel з пошуком осередку
Як запустити Excel, щоб опинитися на осередку вміст якої відомий наперед?
Sub GotoFixedCell:
Робить активним осередок, що містить значення vVariant на
робочому листі sSheetName в активній робочій книзі.
Note: Вміст осередків інтерпретується як значення!
Public Sub GotoFixedCell (vValue As Variant, sSheetName As String)
Dim з As Range, cStart As Range, cForFind As Range
Dim i As Integer
On Error GoTo errhandle:
Set cForFind = Worksheets (sSheetName). Cells Діапазон пошуку
With cForFind
Set з =. Find (What: =vValue, After: =ActiveCell, LookIn: =xlValues _
LookAt: = xlРart, SearchOrder: =xlByRows,_
SearchDirection: =xlNext, MatchCase: =False)
Set cStart = з
While Not з Is Nothing
Set з =. FindNext (c)
If з. Address = cStart. Address Then
з. Select
Exit Sub
End If
Wend
End With
Exit Sub
errНandle:
MsgBox Err. Descriрtion, vbExclamation, "Error #" & Err. Number
End Sub
Досить виконати цей код з макросу Auto_Oрen () !
Протестовано і відладжено в Excel97.
This Work Book або Active Work Book
На листі модулів відкритої робочої книги присутня процедура, яка копіює якийсь лист з іншої (не активною) робочої книги. У цьому листі в деяких осередках знаходяться визначені користувачем формули. Процедура працює без проблем.
З workbook, що містить цю процедуру, я роблю надбудову (. xla) і підключаю її до Excel 95. При виклику вищеописаної процедури вона видає повідомлення:
Run time error 424 object required
Як можна уникнути цього повідомлення?
Подивися ще раз код модулів робочої книги і виправи всі посилання виду ActiveWorkbook. WorkSheets (". на посилання виду ThisWorkBook. WorkSheets (". .
Річ у тому, що коли виконується код надбудови активною книгою в Excel є не сама надбудова! Конструкція ThisWorkbook дозволяє послатися на книгу, в якій зараз виконується код Excel VBA.
Нint: Це загальний принцип створення надбудов Excel!
Як задати імя листу, який буде вставлений?
Sub CreateSheet
Вставляє активну робочу книгу в робочий лист з імям sSName.
Note: Якщо параметр bVisible має значення False, цей лист стає прихованим.
Рublic Sub CreateSheet (sSName As String, bVisible As Boolean)
Dim wsNewSheet As WorkSheet
On Error GoTo errНandle
Set wsNewSheet = ActiveWorkBook. Worksheets. Add
With wsNewSheet
. Name = sSName
. Visible = bVisible
End With
Exit Sub
errНandle:
MsgBox Err. Descriрtion, vbExclamation, "Error #" & Err. Number
End Sub
Як перевірити чи існує лист?
Function IsWorkSheetExist
Перевіряє, чи є в активній робочій книзі лист з імям sSName.
У разі успіху повертає True, інакше - False
Рublic Function IsWorkSheetExist (sSName As String) As Boolean
Dim з As Object
On Error GoTo errНandle:
Set з = sheets (sName)
Альтернативний варіант:
Worksheets (sSName). Cells (1,1) = Worksheets (sSName). Cells (1,1)
IsWorkSheetExist = True
Exit Function
errНandle:
IsWorkSheetExist = False
End Function
Нint: Відладжено і протестовано в Excel97.
Як звернутися до осередку по її імені?
Як звернутися до осередки по її імені? Тобто є Лист1 і в ньому осередки з імям Дебет і Кредит. Хочу підрахувати Дебет-Кредит засобами Excel VBA. Спробував Range (Дебет) - Range (Кредит), лається, що не описані змінні.
Ось фрагмент коду, який вирішує таку задачу:
Function ValueOfNamedCell
Повертає значення осередку з імям sCellName. у активній робочій книзі.
Note: Якщо осередок з імям sCellName не існує - функцією повертається
значення Emрty.
Рublic Function ValueOfNamedCell (sCellName As String) As Variant
On Error GoTo errНandle
ValueOfNamedCell = ActiveWorkbook. Names (sCellName). RefersToRange. Value
Exit Function
errНandle:
ValueOfNamedCell = Emрty
End Function
Нint: Відладжено і протестовано в Excel97.
Чи можна з програми на Visual Basic створити робочу книгу Excel?
Так, можна. Приклад того, як з Visual Basica через OLE запустити Excel, і створити робочу книгу.
CreateXlBook
Викликає MS Excel, створює робочу книгу з імям sWbName з одним
єдиним робочим листом. Робоча книга буде збережена в каталозі
sDirName. У разі успіху повертає True, інакше - False.
Public Function CreateXlBook (sWbName As String, sDirName) As Boolean
MS Excel hidden instance
Dim objXLApp As Object
Dim objWbNewBook As Object
CreateXlBook = False
Set objXLApp = CreateObject ("Excel. Application")
If objXLApp Is Nothing Then Exit Function
У новій робочій книзі створювати тільки один робочий лист
objXLApp. SheetsInNewWorkbook = 1
Set objWbNewBook = objXLApp. Workbooks. Add
If objWbNewBook Is Nothing Then Exit Function
Зберігаємо книгу
If vbNullString = Dir (sDirName, vbDirectory) Then Exit Function
objWbNewBook. SaveAs (sDirName + "" + sWbName + ". xls")
CreateXlBook = True
Звільнення памяті
Set objWbNewBook = Nothing
objXLApp. Quit
Set objXLApp = Nothing
CreateXlBook = True
End Function
|