Перевод из одной системы в другую
- Назначение и возможности опера
ционной системы WINDOWS.
Операционная система WINDOWS является базовой и необходимой составляющей ПО компьютера, без нее компьютер работать не может. Операционная система – комплекс программ, обеспечивающих взаимодействие всех аппаратных и программных частей компьютера между собой и взаимодействие пользователя и компьютера.
Возможности:
- Управление устройствами компьютера (ресурсами)
- Управление процессами
- Управление доступом к данным и энергонезависимым носителям
- Введение файловой структуры
- Пользовательский интерфейс
- Многозадачность
- Взаимодействие между процессами
- Разграничение прав доступа и многопользовательский режим работы (аутентификация, авторизация)
- Программирование в VBA. Операторы присвоения.
Оператор присвоения
Оператор присвоения присваивает значение
выражения переменной, константе или свойству
объекта. Оператор присвоения всегда включает
знак равенства (=).
Синтаксис:
[Let] Переменная (или Постоянная или Свойство
Объекта) = Выражение
Инструкция Let необязательна и чаще всего
опускается. Оператор присвоения предписывает
выполнить выражение, заданное в его правой
части, и присвоить результат переменной,
имя которой указано в левой части. В результате,
например, действия следующей пары операторов
х = 2
х = х + 2
переменной х будет присвоено 4.
Для присвоения переменной ссылки на объект
применяется инструкция Set. В следующем
примере инструкция Set присваивает переменной
Область диапазон А1:B3:
Set Область = Range("Al:B3")
В общем случае инструкция set имеет следующий
синтаксис:
Set объектнаяПеременная = {[New] объектноеВыражение
| Nothing}
- ключевое слово New используется при создании нового экземпляра класса;
- ключевое слово Nothing позволяет освободить все системные ресурсы и ресурсы памяти, выделенные для объекта, на который имелась ссылка (вольно говоря, она удаляет объект из памяти).
Перенос строки
Расположение символов (пробел) + (Знак
подчеркивания) в конце строки обеспечивает
то, что последующая строка является продолжением
предыдущей. При этом надо помнить, что:
- Нельзя разбивать переносом строковые константы
- Допустимо не более семи продолжений одной и той же строки
- Сама строка не может состоять более, чем из 1024 символов
В следующем примере первая
из конструкций является разбиением
второй на две строки:
у = sin(Application.Pi()*х) + (1 + х)^(1/2)/(1 + х^2)
у = Sin (Application. Pi ()*x) + (1 + х)^(1/2)/(1 + х^2)
Комментарии
Работая с.программой, удобно использовать
комментарии, т. е. фрагменты текста программы,
не являющиеся программными кодами и игнорируемые
компилятором. Комментарии выполняют
две важные функции:
- Делают программу легко читаемой, поясняя смысл программных кодов и алгоритма.
- Временно отключают фрагменты программы при ее отладке. В языке VBA существуют два способа ввода комментариев:
- Применение апострофа (')• Его можно ставить в любом месте строки. При этом все символы, начиная от апострофа до конца строки, будут восприниматься компилятором как комментарий.
- Применение зарезервированного слова Rem вместо апострофа.
Ниже приведен пример использования
комментариев в тексте программы:
Dim a As Integer
'
' а — целая переменная
'
Dim b As String
'
b — строковая переменная
Расположение нескольких
операторов на одной строке
Использование знака двоеточия позволяет
разместить несколько операторов на одной
строке. Таким образом, следующие две конструкции
эквивалентны:
1. х = х + 1
и
2. х = х + 1:у = х + 2
у = х + 2
Операторы перехода
и выбора
Перечислим операторы перехода и выбора
VBA.
Оператор |
Действие |
||
GoTo |
Оператор безусловного перехода. |
||
Оператор |
Действие |
||
инструкции-n (необязательная часть) - одна или несколько инструкций, выполняемых в том случае, если выражение совпадает с любым компонентом списка список-Выражений-n инструкции else (необязательная часть) - одна или несколько инструкций, выполняемых в том случае, если выражение не совпадает ни с одним из предложений Case |
|||
On Error GoTo строка |
Активизирует подпрограмму
обработки ошибок, начало которой
определяется обязательным аргументом
строка, значением последнего может
быть любая метка строки или номер строки.
Для того чтобы предотвратить выполнение
программы обработки ошибок в тех случаях,
когда ошибка не возникла, необходимо
помещать соответствующую инструкцию
Exit Sub, Exit Function или Exit Property сразу после подпрограммы
обработки ошибки, как в следующем примере: |
||
On Error Resume Next |
Указывает, что при возникновении ошибки происходит передача управления на инструкцию, непосредственно следующую за инструкцией, вызвавшей ошибку |
||
On Error GoTo 0 |
Отключает любой активизированный обработчик ошибок в текущей процедуре |
||
Операторы повтора
Перечислим операторы повтора VBA.
Оператор |
Действие |
||
For — Next |
Синтаксис: |
||
For Each - Next Do Until — Loop |
[Exit For] [Инструкции] Next [Счетчик]
Повторяет выполнение группы инструкций,
пока Счетчик изменяется от начального
значения до конечного с указанным шагом.
Если Шаг не указан, то он полагается равным 1. |
||
Оператор |
Действие |
||
Do — Loop Until While — Wend |
[Инструкции] Loop Повторяет выполнение
набора инструкций, пока условие не примет
значение True. Условие проверяется после
выполнения инструкции по крайней мере
один раз. Альтернативный способ выхода
из цикла предоставляет инструкция Exit
Do |
||
Условная компиляция
В VBA имеются две инструкции компилятора,
с помощью которых можно обеспечить условную
компиляцию некоторых фрагментов исходного
кода. Для условной компиляции необходимо
определить условные константы компилятора,
значениями которых будет руководствоваться
компилятор при обработке программы. Константы
должны быть определены в разделе глобальных
объявлений модуля.
Синтаксис:
#Const имяКонстанты = выражение
Аргументы:
ИмяКонстанты |
Имя константы; должно соответствовать стандартным соглашениям об именах переменных |
||
выражение |
Константа в явном представлении, другая условная константа компилятора или любая их комбинация, которая включает любые арифметические или логические операторы, за исключением is |
||
Чтобы указать компилятору,
какие фрагменты кода компилировать
при разных условиях, используется
инструкция lif. Оператор if является объектом
компилирования в отличие от инструкции
lif, которая является служебной пометкой
в тексте, принимаемой компилятором к
сведению.
Синтаксис:
#If выражение Then
инструкции [#Elself выражение-n Then
[инструкции_elseif]] [#Еlse
[инструкции_elseif ]],
#End If
В приведенном ниже примере инструкции
условной компиляции используются для
того, чтобы в вариантах исполняемого
файла в качестве имени файла заставки
в строковую переменную загружать имена
двух различных файлов.
IConst WinPl = 1
' если Windows95, то Const WinPl = 1
' если Windows NT, то Const WinPl = 2
#If WinPl = 1 Then ФайлЗаставка = Start95.bmp"
#If WinPl = 2 Then ФайлЗаставка = "StartNT.bmp"
Процедура
Процедура является самостоятельной частью
кода, которая имеет имя и может содержать
аргументы, выполнять последовательность
инструкций и изменять значения своих
аргументов.
Синтаксис:
[Private | Public] [Static] Sub Имя [(СписокАргументов)]
[Инструкции]
[Exit Sub] [Инструкции]
End, Sub
Элементы описания:
Public |
Указывает, что процедура Sub доступна для всех других процедур во всех модулях |
||
Private |
Указывает, что процедура sub доступна для других процедур только того модуля, в котором она описана |
||
Static |
Указывает, что локальные переменные процедуры sub сохраняются в промежутках времени между вызовами этой процедуры |
||
Имя |
Имя процедуры Sub, удовлетворяющее стандартным правилам именования переменных |
||
СписокАргументов |
Список переменных, представляющий аргументы, которые передаются в процедуру Sub при ее вызове. Имена переменных разделяются запятой |
||
Инструкции |
Любая группа инструкций, выполняемых
в процедуре |
||
Инструкция Exit sub приводит
к немедленному выходу из процедуры sub.
Синтаксис элемента СписокАргументов:
[Optional] [ByVal | ByRef] [ParamArray] имяПеременной[(
)]
[As тип] [= поУмолчанию]
Optional |
Ключевое слово, указывающее,
что аргумент не является обязательным.
При использовании этого |
||
ByVal |
Указывает, что этот аргумент передается по значению |
||
ByRef |
Указывает, что этот аргумент передается по ссылке. Описание ByRef используется в VBA по умолчанию |
||
ParamArray |
Используется только в качестве последнего элемента в списке СписокАргументов для указания, что конечным аргументом является описанный как Optional массив значений типа variant. Ключевое слово paramArray позволяет задавать произвольное количество аргументов. Оно не может быть использовано со словами Byval, ByRef или Optional |
||
имяПеременной |
Имя переменной, удовлетворяющее стандартным правилам именования переменных |
||
тип |
Тип данных аргумента, переданного
в процедуру; поддерживаются типы Byte,
Boolean, Integer, Long, Currency, Single, Double, Date, String (только
строки |
||
поУмолчанию |
Любая константа или выражение, дающее константу. Используется только вместе с параметром optional. Если указан тип object, единственным значением по умолчанию может быть значение Nothing |
||
Приведенный ниже синтаксис
описывает имя, аргументы и текст
программы, составляющие тело процедуры
Function.
Синтаксис:
[Public I Private] [Static] Function Имя [(СписокАргументов)]
[As Тип]
[Инструкции]
[Имя = Выражение]
[Exit Function]
[Инструкции]
[Имя = Выражение] End Function
Синтаксис инструкции Function содержит те
же элементы, что и sub. Инструкция Exit Function
приводит к немедленному выходу из процедуры
Function.
Подобно процедуре Sub, процедура Function является
самостоятельной процедурой, которая
может получать аргументы, выполнять последовательность
инструкций и изменять значения своих
аргументов. Однако в отличие от процедуры
sub, когда требуется использовать возвращаемое
функцией значение, .процедура Function может
применяться в правой части выражения,
как и любая другая встроенная функция,
например, cos.
Процедура Function вызывается в выражении
по своему имени, за которым следует список
аргументов в скобках.
Для возврата значения из функции следует
присвоить значение имени функции. Любое
число таких инструкций присвоения может
находиться в любом месте процедуры.
Переход в подпрограмму и возвращение
из подпрограммы
В VBA от первоначальных версий BASIC сохранилась
конструкция подпрограммы GoSub- Return, которая
в настоящее время редко используется.
Для полноты изложения вкратце напомним
синтаксис этой инструкции.
Синтаксис:
GoSub строка
строка
Return
Аргумент строка может быть любой меткой
строки или номером строки. В качестве
метки строки может быть любая комбинация
символов, начинающаяся с буквы и заканчивающаяся
двоеточием.
Допускается использование инструкций
GoSub и Return в любом месте процедуры, но GoSub
и соответствующая инструкция Return должны
находиться в одной процедуре. Подпрограмма
может содержать несколько инструкций
Return. Первая обнаруженная инструкция Return
приводит к передаче управления назад
к инструкции, непосредственно следующей
за последней выполненной инструкцией
GoSub.
Вызов процедуры
Вызов процедуры sub из другой процедуры
можно произвести несколькими способами.
Первый способ вызова процедуры Sub: ИмяПроцедуры
СписокФактическихПараметров
ИмяПроцедуры |
Имя вызываемой процедуры |
||
СписокФактическихПараметров |
Список аргументов, передаваемых процедуре. Он должен соответствовать списку, заданному в процедуре по количеству и типу |
||
Если требуется использовать
несколько процедур с одинаковыми
названиями, при их вызове после
имени процедуры через точку
надо указывать имя модуля, на котором
они расположены. А именно, ИмяМодуля.ИмяПроцедуры
СписокФактическихПараметров
Второй способ вызова процедуры sub производится
с помощью инструкции Call.
ИмяПроцедуры (СписокФактическихПараметров)
Обратите внимание, что в этом случае список
фактических параметров заключается в
скобки. В первом способе скобки не использовались.
VBA позволяет вводить фактические параметры
через имена аргументов в любом порядке
и опускать необязательные (optional). При
этом после имени аргумента ставятся двоеточие
и знак равенства, после которого помещается
значение аргумента (фактический параметр).
Приведенный ниже пример показывает основные
способы передачи параметров в процедуры.
Dim с As Double ',
'
' с - глобальный параметр '
Function F(ByVal x As Integer) As Integer
F = x ^ 2
End Function
Sub Assistant(ByVal a As Integer, ByVal b As Integer)
'
' Процедура, находящая сумму двух чисел
и выводящая
' результат в диалоговом окне
'
с = а + b
'
MsgBox CStr(c)
End Sub
'
Sub Main ()
'
' Процедура, находящая сумму двух чисел
и выводящая
' результат в диалоговом окне
Dim x, у As Double
' x, у — переменные, используемые в качестве
фактических параметров
' Вызов процедуры с конкретными числами
как фактическими параметрами
'
Assistant 1, 3
' Первоначальное присвоение переменным
значений,
' с последующим вызовом процедуры
'
х = 1: у = 1 Assistant x, у + 2
' Использование функции как фактического
параметра
'
х = 1: у = 3
Assistant F(x), у
'
' Вызов процедуры с указанием фактических
параметров по имени
'
Assistant a:=l, b:=3
End Sub
Приведем пример процедуры с необязательными
параметрами. Процедура СторонаТреугольника
позволяет найти длину недостающей стороны
прямоугольного треугольника, где переменные
А и В отведены под длины катетов, а переменная
с — под гипотенузу. Например, формула
=СторонаТреугольника(;В2;С2)
вычисляет катет А по введенным в ячейки
В2 и С2 длинам катета В и гипотенузы С.
При работе с необязательными переменными
необходимо использовать функцию isMissing,
возвращающую значение True, если соответствующий
аргумент не был передан в процедуру, и
False в противном случае.
Function СторонаТреугольника(Optional A,
Optional В, Optional С)
If Not (IsMissing(A)) And Not (IsMissing(В)) Then
СторонаТреугольника = Sqr(А ^ 2 + В ^ 2)
End If
If Not (IsMissing(A)) And Not (IsMissing(C)) Then
СторонаТреугольника = Sqr(С ^ 2 - А ^ 2)
End If
If Not (IsMissing(B)) And Not (IsMissing(C)) Then
СторонаТреугольника = Sqr(C ^ 2 - В ^ 2)
End If
End Function
Назначение значений по умолчанию необязательным
параметрам
Для необязательного параметра можно
определить значение по умолчанию. В следующем
примере, если значение параметра ь не
передано в функцию, то ему присваивается
указанное по умолчанию значение 8.
Function Сумма (a As Double, Optional b As Double = 8)
Сумма = a + b End Function
Использование неопределенного количества
параметров
Как правило, количество передаваемых
параметров в процедуру совпадает с количеством
определенных у этой процедуры параметров.
Однако ключевое слово ParamArray предоставляет
возможность ввода в процедуру произвольного,
заранее не указанного числа параметров
(например, как это происходит при использовании
функции рабочего листа СУММ (sum)). В качестве
примера приведем процедуру, которая выполняет
то же действие, что и функция рабочего
листа СУММ. Отличием функции СуммаПользователя
от СУММ является то, что в ней в каждое
поле ввода диалогового окна мастера функций
можно вводить только либо число, либо
ссылку на ячейку, а не на диапазон, как
при работе с функцией СУММ.
Function СуммаПользователя(ParamArray Массив())
s = 0
For Each a In Массив
s = s + а Next a
СуммаПользователя = s
End Function
Рекурсивные процедуры
В VBA возможно создание рекурсивных процедур,
т. е. процедур, вызывающих самих себя.
Стандартным примером рекурсивной процедуры
является процедура вычисления факториала,
т. е. функции, возвращающей результат
произведения первых п натуральных чисел,
где п — аргумент функции. Для этой функции
имеется стандартное обозначение:
Fact(n) =n!, где Fact (0) =1.
Ясно, что
Fact(n) = n Fact (n - 1}
Основываясь на данном соотношении, приводимая
ниже рекурсивная функция вычисляет значение
факториала.
Function Fact(n As Integer) As Integer
If n<l Then
Fact = 1 Else
Fact = Fact(n - 1) n
End If
End Function
Другим стандартным примером применения
рекурсивных функций является нахождение
наибольшего общего делителя двух целых
чисел по алгоритму Евклида. Наибольший
общий делитель (нод) двух целых чисел
— это наибольшее целое, на которое делятся
оба числа. Например, HOД(10, 14} = 2 и НОД (15,
31} = 1.
Алгоритм Евклида состоит в следующем:
- Если а делится на b, то НОД(а, b) = b
- В противном случае — НОД(а, b) = НОД(b, a Mod b) Приводимая ниже рекурсивная функция программирует алгоритм Евклида.
Function НОД(Целое1 As Long, Целое2
As Long) As Long
If Целое2 Mod Целое1 = 0 Then
НОД = Целое1 Else
НОД = НОД(Целое2, Целое1 Mod Целое2)
End If
End Function
Несмотря на элегантность рекурсивных
процедур, применять их надо с осторожностью,
т. к. неаккуратное использование может
привести к проблемам с памятью — многократный
вызов такой процедуры быстро исчерпывает
стековую память.
Область определения
переменной
Область определения переменной задает
область, в которой может быть использована
переменная. В VBA имеется три соответствующих
уровня переменных:
- Переменные уровня процедуры используются только в процедуре, в которой они описаны при помощи инструкции Dim, размещенной в процедуре.
- Переменные уровня модуля используются только в модуле, в котором они описаны при помощи инструкции Dim, размещенной в области описания модуля, т. е. перед описанием процедур.
- Общие переменные, используемые во всех модулях данного проекта. Описываются при помощи инструкции Public, размещенной в области описания модуля.
Время жизни переменной
Личная (private) переменная сохраняет свое
значение только пока выполняется процедура,
в которой эта переменная описана. При
завершении процедуры значение переменной
теряется, и при повторном запуске процедуры
его надо заново инициализировать. Переменные,
описанные при помощи инструкции Static,
сохраняют свое значение по выходу из
процедуры, но пока работает программа.
Задача:
а) Переведите числа. 101001110011,11011112®8, 10,16
101001110011,11011112 = 101 001 110 011, 110 111 100 = 5163,6748
101001110011,11011112 =
1010011100111101111 : 27
= 1*218+0*217+1*216+0*215+0*214+
+2048+256+128+64+32+8+4+2+1=
101001110011,11011112 = 1010 0111 0011 1101 1110 = 539еf