
- •Vba. Краткие сведения
- •Vindow (Ctrl-g) и воспользоваться конструкцией Debug.Print
- •Работа с деревом каталога
- •Работа с файлом шаблоном
- •Закрытие файлов с сохранением и без
- •Запуск при открывании рабочей книги
- •Обнуление незащищенных ячеек файла в заданном диапазоне
- •Снятие и установка защиты листа
- •Раскрашивание незащищенных ячеек
Vba. Краткие сведения
___________________________________________________________________
Структура программы
В редакторе VBE (Alt-F11) добавляем модуль. В модуле могут быть процедуры и функции
'процедура name1() имеет начало и конец
Sub name1()
....
End Sub
' Функция отличается от процедуры тем, что она возвращает значения определенного типа
Functinon name2() as Integer
....
'возвращаемый результат должен быть присвоен переменной, совпадающей с именем функции
name2=result
End Function
В процедуру и функцию могут передаваться параметры (значения определенного типа)
Function proba1(a as integer, b as integer) as Integer
proba1=a+b
End Function
'вызов процедуры:
call name1
'вызов функции с передачей параметров
c=proba(2,3)
'Если процедура или функция находится в другом модуле, то для их вызова необходимо сначала 'записать имя модуля, а затем через точку выбрать имя функции или процедуры.
Call Module2.proba2
_________________________________________________________________
Объявление переменных
Dim a as Integer
Public b as String
Private c as Long
Переменную можно не объявлять, тогда по умолчанию она будет иметь тип Variant
Если переменная объявлена в начале модуля и объявление находится вне функций и процедур, то такая переменная будет глобальной и доступной из любой функции или процедуры данного модуля
Если такая переменная объявлена с использованием ключевого слова public, то она будет доступна из других модулей.
Если переменные объявлены следующим образом:
Dim a, b as Integer, то переменная a будет иметь тип Variant, переменная b - тип Integer
Обязательность объявления переменных задается следующим выражением, записанным в начале модуля до первой функции или процедуры: Option Explicit
Переменные, являющиеся объектами определенного класса объявлять обязательно
'********************************************************************
Объявление структуры
Структура должна быть объявлена в самом начале модуля
Type MyType
name as String
age as Integer
End Type
Затем в любой функции или процедуре объявляется переменная типа новой структуры
и выполняются какие-то действия с элементами структуры
Dim a1 as MyType
MyType.name = "Vasya"
MyType.age = 10
___________________________________________________________________
Отладочный вывод информации
Для обеспечения отладочного вывода информации необходимо открыть отладочное окно View\Immediate
Vindow (Ctrl-g) и воспользоваться конструкцией Debug.Print
Debug.Print("Hello")
___________________________________________________________________
Организация задержки
Чаще всего используют два варианта организации задержки:
' метод Wait объекта Application
Application.Wait (Now + TimeValue("0:00:01")) ' задержка 1 секунда
' API функцию Sleep:
'Для использования API функции в начале модуля до функций и процедур объявляют
'библиотечную функцию:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'затем в любой процедуре вызываем объявленную функцию Sleep
Sleep 1000
' задержка 1 секунда
___________________________________________________________________
Создание статических и динамических МАССИВОВ
Ниже показаны примеры объявления одномерного массива Mas1 размерности 6 и двумерного массива Mas2 размерности 5х6:
Dim Mas1(5)
Dim Mas2(4,5)
Нумерация начинается с нулевого элемента
При необходимости изменить размерность массива можно воспользоваться оператором ReDim
ReDim MyArr(10)
При таком изменении размерности массив очищается
Если необходимо сохранить записанные ранее элементы, то используют следующую конструкцию
ReDim Preserve MyArr(100)
Если заранее неизвестен размер массива, то объявляют массив пустой размерности
MyArr2()
После того, как размерность становится известной, используем оперетор ReDim
a=3
b=4
ReDim MyArr2(a,b)
___________________________________________________________________
Операции
^ - возведение в степень,
- - отрицание,
*, / - умножение, деление
\ - целочисленное деление,
mod - остаток от деления,
+, - - арифметические операции
17 / 5 = 3.4
17 \ 5 = 3
17 mod 5 = 2
___________________________________________________________________
Использование Like для сравнения двух строк
return = string Like pattern
Элементы для pattern ? - единичный символ
* - 0 или любое кол-во символов
# - любая цифра
[ ] - набор символов
[! ]- любой символ не из набора
"aBBBa" Like "a*a" 'True
"F" Like "[A-Z]" 'True
"F" Like "[!A-Z]" 'False
"a2b" Like "a#a" 'True
"aM5b" Like "a[L-P]#[!c-e]" 'True
"BAT123khg" Like "B?T*" 'True
"CAT123khg" Like " B?T*" 'True
___________________________________________________________________
Циклы , прерывание циклов
for next с разным шагом
while wend
do loop
do until loop
for each next
___________________________________________________________________
Конструкции управления потоком выполнения программы
if else
___________________________________________________________________
select case
case
end select
___________________________________________________________________
Проверка наличия файла в каталоге
path = ActiveWorkbook.path & "\" ' получение текущего каталога
fNameIn = "Input.txt"
ss = Dir(path + fNameIn)
If ss = "" Then
MsgBox "Не могу найти файл " + path + fNameIn
Else
'Работа с файлом
End If
___________________________________________________________________
Работа с файлом Чтение из файла
Dim path As String
Dim fNameIn As String
Dim fNameOut As String
Dim hFileOut As Long
Dim hFileIn As Long
Dim strBuf As String
fNameIn = "Input.txt"
path = ActiveWorkbook.path & "\"
hFileIn = FreeFile
Open path + fNameIn For Input Access Read As hFileIn
Do Until EOF(hFileIn)
Line Input #hFileIn, strBuf
Loop
Close hFileIn
___________________________________________________________________
Запись в файл
fNameOut="Output.txt"
hFileOut = FreeFile
Open path + fNameOut For Output Access Write As hFileOut
Print #hFileOut, Trim(strBuf)
Close hFileOut
___________________________________________________________________
Работа с XLS файлом
For i = 1 To all
StrFile = Dir(path_x + mybook(i))
If StrFile = "" Then
MsgBox "Не могу найти файл: " & path_x & mybook(i)
Exit Function
End If
Next i
For i = 1 To all
Workbooks.Open FileName:=path_x + mybook(i)
Next i
_____________________________________________________________________________________