Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA1.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
44.93 Кб
Скачать

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

_____________________________________________________________________________________