ОПЕРАТОРЫ В VISUAL BASIC
На занятии 7, вы познакомились с логическими операциями AND, OR, NOТ, XOR. В
Basic как и в других языках тоже используются логические операции, которые записывают с
помощью аналогичных логических операторов
AND
OR
XOR
NOT
EQV -этот оператор означает логическое равенство или эквивалентность выражения слева
от знака EQV выражению стоящему справа от этого знака.
IMP -этот оператор означает Implication (if the first expression is true, then the second must
also be true). Мы его пока использовать не будем.
Кроме логических операторов, в Basic используются операторы сравнения:
= - это обычный знак равенства, и как обычно, это знак означает равенство стоящего
справа от него стоящему слева.
< > - это знак неравенства. Т.е. он говорит, что стоящий справа от него НЕ РАВЕН
стоящему слева.
> - это знак больше. Он говорит, что стоящий слева от него БОЛЬШЕ стоящего справа.
>= - это знак больше или равен. Он говорит, что стоящий слева от него больше БОЛЬШЕ
или РАВЕН (другими словами не меньше) стоящего справа.
< - знак меньше. Он говорит, что стоящий слева от него МЕНЬШЕ стоящего справа.
<= - это знак больше или равен. Он говорит, что стоящий слева от него МЕНЬШЕ или
РАВЕН (другими словами не больше) стоящего справа.
Есть также хорошо вам известные математические операторы:
+ сложение
- вычитание
* умножение
/ деление
^ возведение в степень.
Два других математических оператора, которые мы пока не будем использовать:
\ целая часть от деления, и
MOD остаток от деления.
Для сложения (добавления) стрингов (текстов), используется оператор :
& -этот оператор вы использовали ранее при программировании MsgBox сообщений.
ВЕТВЛЕНИЕ В VISUAL BASIC
Вы знаете сказки, когда богатырь стоит перед камнем на распутии дорог и думает куда
ему пойти. А надпись на камне говорит, что если он на право пойдет -то коня потеряет; если
налево — то с жизнью распрощаешься, а по средней пойдешь- с Кощеем повстречаешься.
Это пример ветвления, который тоже используется в программировании. В Visual Basic
используются следующие ветвления по условию:
1.
If. . . Then. . . Else
Пример:
If A < 5 Then
B = 6
Else
B = 1
End If
В этом примере если А меньше 5 то B=6, c во всех остальных случаях B=1 (т.е. если А
больше или равно 5, то B=1 ).
Обратите внимание, ветвление по условию, кончается
2.
Select. . . Case
Пример:
Select Case DayOfWeek
Case 1:
NameOfWeekday = "Sunday"
Case 2:
NameOfWeekday = "Monday"
Case 3:
NameOfWeekday = "Tuesday"
Case 4:
NameOfWeekday = "Wednesday"
Case 5:
NameOfWeekday = "Thursday"
Case 6:
NameOfWeekday = "Friday"
Case 7:
NameOfWeekday = "Saturday"
End Select
В этом примере существует переменная DayOfWeek. Елси она равна 1, то другой
переменной NameOfWeekday присваивается стринг «Sunday”. Если она рава 2, то
присваивается «Monday”. И так далее до ”Sunday”.
Ветвление по выбору заканчивается командой End Select.
При моделировании шкалы Нониуса и вращении отрезка вы уже сталкивались с
периодическим повторением. В жизни вы можете найти очень много других примеров
периодических событий. Например, стрелки часов регулярно повторяют свое движение по
кругу, стартуя с 12 и проходя по очереди 1,2,3,4 и далее до 11, и далее завершая полный
оборот вставая на 12. А затем все повторяется сначала. Вы ходите в школу- это другой
пример периодического, или другими словами повторяющегося движения. Причем, вы
ходите в школу в рабочие дни недели, а в выходные эта периодичность нарушается.
Колебания маятника- еще один пример периодического/повторяющегося движения.
Для программирования таких повторяющихся явлений существуют циклы. По
английски они называются cycles или loops:
1.
For. . . Next
Пример:
Dim n As Integer
For n = 1 To 10
''''''''Здесь располагаются коды которые будут циклично выполняться'''''''
''''''''при этом переменная n увеличивается на 1 по выполнению каждого цикла'''''
Next n
////////////////////////////////////////////////////////////////////
Пример с немного другой формой записи For....Next:
Dim n As Integer
For n = 1 To 10 Step 2
''''''''Здесь располагаются коды которые будут циклично выполняться'''''''
''''''''при этом переменная n увеличивается на 2 по выполнению каждого цикла'''''
Next n
////////////////////////////////////////////////////////////////
Пример с выходом из цикла по выполнению условия (условие может быть любым. Пусть это
будет условие k<n.
Dim n As Integer
Dim k As Integer
k=20
For n = 1 To 10
k=k-4
''''''''Здесь располагаются другие коды которые будут циклично выполняться'''''''
''''''''при этом переменная n увеличивается на 1 по выполнению каждого цикла,'''''
''''''''а переменная k уменьшается на 4 за каждый выполненный цикл'''''''''''''''''''''''''
If k<n Then
Exit For ''''''''выход из цикла как только k станет меньше n
End If
Next n
2.Do While. . . Loop
Пример:
Do While A > 10
'''''''''''''''Здесь располагаются другие коды которые будут циклично выполняться'''''''
''''''''''''Например это может быть A=A+1 и тогда А растет на 1 после каждого цикла'''
А=A+1
Loop
3.
While . . . Wend
Пример:
While A > 7
A=A+2
' '''''''''... здесь пишутся команды которые будут выполняться пока А больше 7''''''''''''''''''''''''''
Wend
А теперь рассмотрим конкретные коды:
Сначала откроем новый SpreadSheets файл.
Открываем Organize Dialogs... в Macros :
Затем открываем Modules. На этой страничке выделяем левой клавишeй мышки любой
модуль, например Module1 и нажимаем на кнопку New ( если вы уже это делаете повторно и
вас уже есть нужный вам , то жмите на Edit).
В появившемся окне напишите имя нового модуля GreenCell :
У вас опять появятся Modules с новым только что созданным модулем GreenCell. Выделите
его с помощью левой клавиши и нажмите теперь на кнопку Edit:
Теперь у вас появится следующий экран с новой программой Sub Main:
Программа «Бегающая зеленая ячейка»
Удалите Sub Main и End Sub. А вместо них скопируйте и вставьте нижеследующий код,
начиная с Sub GreenCell до End Sub включительно:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub GreenCell
Dim Sheet0 As Object
Dim oCells As Object
Dim oList As Object
Dim n As Integer
Dim m As Integer
Dim k As Integer
Dim a As Single
Dim b As Single
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
REM this part of the subrouting will clean certain praramters in the certain cells
''''Set Sheet which will be used for this program.
''''Remember the first Sheet1 in OpenOffice has position index number of 0 !!!!!
''''So, our Sheet0 and Sheets(0) are related to the Sheet1 of the open SpreadSheet''''''''''''''''''''
Sheet0= ThisComponent.Sheets(0)
''''''''''Set Cells which will be cleaned'''''''''''''''''''''''''
oCells=Sheet0.getCellRangeByName("A1:L26")
'''''''''''Set parameters (strings, values, formulas and hardattr) of cells that will be erased''''''''''''''''''''''
Flags=com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE +
com.sun.star.sheet.CellFlags.HARDATTR + com.sun.star.sheet.CellFlags.FORMULA
'''''''''''clean selected parameters of the selected cells''''''''''''''''''''''''''''''''
oCells.clearContents(Flags)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
REM This part of program is creating the running green cell
MsgBox("Push ""OK"" to start program")
For k=0 to 1 '''set number of cycles
'''''clean the variable b'''''''''''''
b=0
For m=0 to 3 ''''this cycle sets the raw coordinate of the running cell
'''''clean the variable a'''''''''''''
a=0
For n=0 to 5 step 1 ''''this cycle sets the column coordinate of the running cell
''''getCellByPosition(x,y) points to the cell, which is located at the intersect of column x with raw y.
''''remember the first column and first raw in OpenOffice have index of 0.
''''RGB(0,128m0) and RGB(38,229,38) are codes of the green color'''
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(38,229,38)
Wait 300
''''''Clean the green color of the cell
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(255,255,255)
''''''create new column coordinates of the green cell
a=a+1
Next n
''''''create new raw coordinates of the green cell
b=b+1
Next m
Next k
MsgBox("The End")
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
После этого откройте Sheet1 в SpreedSheets. Затем откройте Tools/Macros/Run Macro
В появившимся окне Macro Selector, откройте My Macros/Standard/GreenCell и нажмите на
кнопу Run:
После этого программа запустится и зеленая ячейка пробежит два круга.
Примечание:
После того как вы скопировали коды из pdf файла в ваш модуль, у вас при запуски
программы скорее всего появиться сообщение об ошибки такого вида:
Сообщение говорит, что есть синтаксическая ошибка (т.е. написано не по правилам) и
поясняет, что появился не к месту символ CRLF (carriage returns and line feeds- перенос
строки и знак окончания строки). Ошибка вам сразу станет понятной, если вы вспомните, что
в Basic все команды должны занимать только одну строку. Стрелка же указывает на команду,
присваивающую значение переменной Flags, которая заняла две строки. Исправить это легко.
Как вы помните в Basic есть знак переноса строки « _ », который надо поставить в конце
строки после знака « + ». Правильно будет так:
Flags=com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE + _
com.sun.star.sheet.CellFlags.HARDATTR + com.sun.star.sheet.CellFlags.FORMULA
И исправленные коды станут такими:
После того, как вы исправите эту ошибку, ваша программа должна заработать.
Те же коды не содержащие ошибки можно скопировать из текстового GreenCell_codes.txt ,
который прилагается. Чтобы было легче копировать, можно, открыв текстовый файл,
выделить весь текст с помощью одновременного нажатия клавиш CTRL и A (такое
одновременное нажатие пары клавиш обозначается обычно так: CTRL+A). После этого
нажимаете две другие клавиши: CTRL+C. Затем указав мышкой место в вашем модуле, куда
хотите поместить эти коды нажмите одновременно две другие кнопки CRTL+V. После этого
сохраните всё с помощью CTRL+S и можно запускать программу.
ЗАДАНИЕ НА ПЕРВУЮ НЕДЕЛЮ (обязательное)
Внимательно рассмотрите коды. Напомню, что слово REM и знак одиночная кавычка « ' »
(один такой знак или их целая строка -это не играет значения) указывают на комментарии,
которые компьютер не воспринимает. Эти комментарии написаны для людей. Если вы
удалите строки начинающиеся знаками комментариев, то для компьютера ничего не
изменится, и программа будет работать по прежнему. Но вот вам будет сложнее разобраться в
такой программе, особенно спустя некоторое время, когда вы подзабудите, как вы писали
программу.
Найдите в программе блоки циклов For. . . Next. Обратите внимание, что в программе есть
три таких цикла, находящихся один в другом, как матрёшка. Комментарии объясняют, что
делает каждый из этих циклов.
Выполните следующие обязательные задания:
1. Измените цвет бегающей ячейки меняя числа в RGB(xx, yy, zz)
2. Сделайте так чтобы ячейка пробегала 5 кругов (5 циклов).
3. Измените скорость бега ячейки (напомню, это определяет команда Wait )
4. Сделайте так, чтобы ячейка пробегала 5 строк
5. Сделайте так, чтобы ячейка пробегала 2 столбца только, а затем перескакивала на новую
строку.
6. Что будет, если вы удалите в вашем коде строки первого, внешнего цикла For...Next k,
выделенного красным ? (Примечание: далее я не привожу все строки программы. Показаны
только строки вблизи кодов циклов, которые вы будите редактировать) :
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
MsgBox("Push ""OK"" to start program")
For k=0 to 1 '''set number of cycles
'''''clean the variable b'''''''''''''
b=0
For m=0 to 3 ''''this cycle sets the raw coordinate of the running cell
'''''clean the variable a'''''''''''''
a=0
For n=0 to 5 step 1 ''''this cycle sets the column coordinate of the running cell
''''getCellByPosition(x,y) points to the cell, which is located at the intersect of column x with raw y.
''''remember the first column and first raw in OpenOffice have index of 0.
''''RGB(0,128m0) and RGB(38,229,38) are codes of the green color'''
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(38,229,38)
Wait 300
''''''Clean the green color of the cell
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(255,255,255)
''''''create new column coordinates of the green cell
a=a+1
Next n
''''''create new raw coordinates of the green cell
b=b+1
Next m
Next k
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
После этого у вас останутся такие строки:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
MsgBox("Push ""OK"" to start program")
'''''clean the variable b'''''''''''''
b=0
For m=0 to 3 ''''this cycle sets the raw coordinate of the running cell
'''''clean the variable a'''''''''''''
a=0
For n=0 to 5 step 1 ''''this cycle sets the column coordinate of the running cell
''''getCellByPosition(x,y) points to the cell, which is located at the intersect of column x with raw y.
''''remember the first column and first raw in OpenOffice have index of 0.
''''RGB(0,128m0) and RGB(38,229,38) are codes of the green color'''
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(38,229,38)
Wait 300
''''''Clean the green color of the cell
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(255,255,255)
''''''create new column coordinates of the green cell
a=a+1
Next n
''''''create new raw coordinates of the green cell
b=b+1
Next m
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
7. Что будет, если вы теперь удалите в этих кодах второй цикл,
выделенный зеленым?
8. А теперь удалите строки выделенные синим. Что теперь делает
программа?
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
MsgBox("Push ""OK"" to start program")
'''''clean the variable b'''''''''''''
b=0
'''''clean the variable a'''''''''''''
a=0
For n=0 to 5 step 1 ''''this cycle sets the column coordinate of the running cell
''''getCellByPosition(x,y) points to the cell, which is located at the intersect of column x with raw y.
''''remember the first column and first raw in OpenOffice have index of 0.
''''RGB(0,128m0) and RGB(38,229,38) are codes of the green color'''
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(38,229,38)
Wait 300
''''''Clean the green color of the cell
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(255,255,255)
''''''create new column coordinates of the green cell
a=a+1
Next n
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
9. А что получится если вы удалите все циклы и оставите только
следующие строки (для проверки работы получившейся программы,
предварительно напишите в Sheet1 вашего SpreadSheets, что нибудь в
ячейки А2, B3, С4 и D5, например любые цифры или слова)?:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub GreenCell
Dim Sheet0 As Object
Dim oCells As Object
Dim oList As Object
Dim n As Integer
Dim m As Integer
Dim k As Integer
Dim a As Single
Dim b As Single
Sheet0= ThisComponent.Sheets(0)
oCells=Sheet0.getCellRangeByName("A1:L26")
Flags=com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE +_
com.sun.star.sheet.CellFlags.HARDATTR + com.sun.star.sheet.CellFlags.FORMULA
oCells.clearContents(Flags)
REM This part of program is creating the running green cell
MsgBox("Push ""OK"" to start program")
MsgBox("The End")
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
10. Решите аналитически следующие уравнения:
A) 7*х+6= 3*x +42
Б) 6 – 7*x= 30-3*x
11. Раскройте правильно скобки и запишите получившиеся выражения:
A) ((1+x)*4)/2=
B) (12+x)*3+x*(3+4*5)=
В) (3+x)*(4-y)=
На занятии 7, вы познакомились с логическими операциями AND, OR, NOТ, XOR. В
Basic как и в других языках тоже используются логические операции, которые записывают с
помощью аналогичных логических операторов
AND
OR
XOR
NOT
EQV -этот оператор означает логическое равенство или эквивалентность выражения слева
от знака EQV выражению стоящему справа от этого знака.
IMP -этот оператор означает Implication (if the first expression is true, then the second must
also be true). Мы его пока использовать не будем.
Кроме логических операторов, в Basic используются операторы сравнения:
= - это обычный знак равенства, и как обычно, это знак означает равенство стоящего
справа от него стоящему слева.
< > - это знак неравенства. Т.е. он говорит, что стоящий справа от него НЕ РАВЕН
стоящему слева.
> - это знак больше. Он говорит, что стоящий слева от него БОЛЬШЕ стоящего справа.
>= - это знак больше или равен. Он говорит, что стоящий слева от него больше БОЛЬШЕ
или РАВЕН (другими словами не меньше) стоящего справа.
< - знак меньше. Он говорит, что стоящий слева от него МЕНЬШЕ стоящего справа.
<= - это знак больше или равен. Он говорит, что стоящий слева от него МЕНЬШЕ или
РАВЕН (другими словами не больше) стоящего справа.
Есть также хорошо вам известные математические операторы:
+ сложение
- вычитание
* умножение
/ деление
^ возведение в степень.
Два других математических оператора, которые мы пока не будем использовать:
\ целая часть от деления, и
MOD остаток от деления.
Для сложения (добавления) стрингов (текстов), используется оператор :
& -этот оператор вы использовали ранее при программировании MsgBox сообщений.
ВЕТВЛЕНИЕ В VISUAL BASIC
Вы знаете сказки, когда богатырь стоит перед камнем на распутии дорог и думает куда
ему пойти. А надпись на камне говорит, что если он на право пойдет -то коня потеряет; если
налево — то с жизнью распрощаешься, а по средней пойдешь- с Кощеем повстречаешься.
Это пример ветвления, который тоже используется в программировании. В Visual Basic
используются следующие ветвления по условию:
1.
If. . . Then. . . Else
Пример:
If A < 5 Then
B = 6
Else
B = 1
End If
В этом примере если А меньше 5 то B=6, c во всех остальных случаях B=1 (т.е. если А
больше или равно 5, то B=1 ).
Обратите внимание, ветвление по условию, кончается
2.
Select. . . Case
Пример:
Select Case DayOfWeek
Case 1:
NameOfWeekday = "Sunday"
Case 2:
NameOfWeekday = "Monday"
Case 3:
NameOfWeekday = "Tuesday"
Case 4:
NameOfWeekday = "Wednesday"
Case 5:
NameOfWeekday = "Thursday"
Case 6:
NameOfWeekday = "Friday"
Case 7:
NameOfWeekday = "Saturday"
End Select
В этом примере существует переменная DayOfWeek. Елси она равна 1, то другой
переменной NameOfWeekday присваивается стринг «Sunday”. Если она рава 2, то
присваивается «Monday”. И так далее до ”Sunday”.
Ветвление по выбору заканчивается командой End Select.
При моделировании шкалы Нониуса и вращении отрезка вы уже сталкивались с
периодическим повторением. В жизни вы можете найти очень много других примеров
периодических событий. Например, стрелки часов регулярно повторяют свое движение по
кругу, стартуя с 12 и проходя по очереди 1,2,3,4 и далее до 11, и далее завершая полный
оборот вставая на 12. А затем все повторяется сначала. Вы ходите в школу- это другой
пример периодического, или другими словами повторяющегося движения. Причем, вы
ходите в школу в рабочие дни недели, а в выходные эта периодичность нарушается.
Колебания маятника- еще один пример периодического/повторяющегося движения.
Для программирования таких повторяющихся явлений существуют циклы. По
английски они называются cycles или loops:
1.
For. . . Next
Пример:
Dim n As Integer
For n = 1 To 10
''''''''Здесь располагаются коды которые будут циклично выполняться'''''''
''''''''при этом переменная n увеличивается на 1 по выполнению каждого цикла'''''
Next n
////////////////////////////////////////////////////////////////////
Пример с немного другой формой записи For....Next:
Dim n As Integer
For n = 1 To 10 Step 2
''''''''Здесь располагаются коды которые будут циклично выполняться'''''''
''''''''при этом переменная n увеличивается на 2 по выполнению каждого цикла'''''
Next n
////////////////////////////////////////////////////////////////
Пример с выходом из цикла по выполнению условия (условие может быть любым. Пусть это
будет условие k<n.
Dim n As Integer
Dim k As Integer
k=20
For n = 1 To 10
k=k-4
''''''''Здесь располагаются другие коды которые будут циклично выполняться'''''''
''''''''при этом переменная n увеличивается на 1 по выполнению каждого цикла,'''''
''''''''а переменная k уменьшается на 4 за каждый выполненный цикл'''''''''''''''''''''''''
If k<n Then
Exit For ''''''''выход из цикла как только k станет меньше n
End If
Next n
2.Do While. . . Loop
Пример:
Do While A > 10
'''''''''''''''Здесь располагаются другие коды которые будут циклично выполняться'''''''
''''''''''''Например это может быть A=A+1 и тогда А растет на 1 после каждого цикла'''
А=A+1
Loop
3.
While . . . Wend
Пример:
While A > 7
A=A+2
' '''''''''... здесь пишутся команды которые будут выполняться пока А больше 7''''''''''''''''''''''''''
Wend
А теперь рассмотрим конкретные коды:
Сначала откроем новый SpreadSheets файл.
Открываем Organize Dialogs... в Macros :
Затем открываем Modules. На этой страничке выделяем левой клавишeй мышки любой
модуль, например Module1 и нажимаем на кнопку New ( если вы уже это делаете повторно и
вас уже есть нужный вам , то жмите на Edit).
В появившемся окне напишите имя нового модуля GreenCell :
У вас опять появятся Modules с новым только что созданным модулем GreenCell. Выделите
его с помощью левой клавиши и нажмите теперь на кнопку Edit:
Теперь у вас появится следующий экран с новой программой Sub Main:
Программа «Бегающая зеленая ячейка»
Удалите Sub Main и End Sub. А вместо них скопируйте и вставьте нижеследующий код,
начиная с Sub GreenCell до End Sub включительно:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub GreenCell
Dim Sheet0 As Object
Dim oCells As Object
Dim oList As Object
Dim n As Integer
Dim m As Integer
Dim k As Integer
Dim a As Single
Dim b As Single
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
REM this part of the subrouting will clean certain praramters in the certain cells
''''Set Sheet which will be used for this program.
''''Remember the first Sheet1 in OpenOffice has position index number of 0 !!!!!
''''So, our Sheet0 and Sheets(0) are related to the Sheet1 of the open SpreadSheet''''''''''''''''''''
Sheet0= ThisComponent.Sheets(0)
''''''''''Set Cells which will be cleaned'''''''''''''''''''''''''
oCells=Sheet0.getCellRangeByName("A1:L26")
'''''''''''Set parameters (strings, values, formulas and hardattr) of cells that will be erased''''''''''''''''''''''
Flags=com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE +
com.sun.star.sheet.CellFlags.HARDATTR + com.sun.star.sheet.CellFlags.FORMULA
'''''''''''clean selected parameters of the selected cells''''''''''''''''''''''''''''''''
oCells.clearContents(Flags)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
REM This part of program is creating the running green cell
MsgBox("Push ""OK"" to start program")
For k=0 to 1 '''set number of cycles
'''''clean the variable b'''''''''''''
b=0
For m=0 to 3 ''''this cycle sets the raw coordinate of the running cell
'''''clean the variable a'''''''''''''
a=0
For n=0 to 5 step 1 ''''this cycle sets the column coordinate of the running cell
''''getCellByPosition(x,y) points to the cell, which is located at the intersect of column x with raw y.
''''remember the first column and first raw in OpenOffice have index of 0.
''''RGB(0,128m0) and RGB(38,229,38) are codes of the green color'''
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(38,229,38)
Wait 300
''''''Clean the green color of the cell
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(255,255,255)
''''''create new column coordinates of the green cell
a=a+1
Next n
''''''create new raw coordinates of the green cell
b=b+1
Next m
Next k
MsgBox("The End")
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
После этого откройте Sheet1 в SpreedSheets. Затем откройте Tools/Macros/Run Macro
В появившимся окне Macro Selector, откройте My Macros/Standard/GreenCell и нажмите на
кнопу Run:
После этого программа запустится и зеленая ячейка пробежит два круга.
Примечание:
После того как вы скопировали коды из pdf файла в ваш модуль, у вас при запуски
программы скорее всего появиться сообщение об ошибки такого вида:
Сообщение говорит, что есть синтаксическая ошибка (т.е. написано не по правилам) и
поясняет, что появился не к месту символ CRLF (carriage returns and line feeds- перенос
строки и знак окончания строки). Ошибка вам сразу станет понятной, если вы вспомните, что
в Basic все команды должны занимать только одну строку. Стрелка же указывает на команду,
присваивающую значение переменной Flags, которая заняла две строки. Исправить это легко.
Как вы помните в Basic есть знак переноса строки « _ », который надо поставить в конце
строки после знака « + ». Правильно будет так:
Flags=com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE + _
com.sun.star.sheet.CellFlags.HARDATTR + com.sun.star.sheet.CellFlags.FORMULA
И исправленные коды станут такими:
После того, как вы исправите эту ошибку, ваша программа должна заработать.
Те же коды не содержащие ошибки можно скопировать из текстового GreenCell_codes.txt ,
который прилагается. Чтобы было легче копировать, можно, открыв текстовый файл,
выделить весь текст с помощью одновременного нажатия клавиш CTRL и A (такое
одновременное нажатие пары клавиш обозначается обычно так: CTRL+A). После этого
нажимаете две другие клавиши: CTRL+C. Затем указав мышкой место в вашем модуле, куда
хотите поместить эти коды нажмите одновременно две другие кнопки CRTL+V. После этого
сохраните всё с помощью CTRL+S и можно запускать программу.
ЗАДАНИЕ НА ПЕРВУЮ НЕДЕЛЮ (обязательное)
Внимательно рассмотрите коды. Напомню, что слово REM и знак одиночная кавычка « ' »
(один такой знак или их целая строка -это не играет значения) указывают на комментарии,
которые компьютер не воспринимает. Эти комментарии написаны для людей. Если вы
удалите строки начинающиеся знаками комментариев, то для компьютера ничего не
изменится, и программа будет работать по прежнему. Но вот вам будет сложнее разобраться в
такой программе, особенно спустя некоторое время, когда вы подзабудите, как вы писали
программу.
Найдите в программе блоки циклов For. . . Next. Обратите внимание, что в программе есть
три таких цикла, находящихся один в другом, как матрёшка. Комментарии объясняют, что
делает каждый из этих циклов.
Выполните следующие обязательные задания:
1. Измените цвет бегающей ячейки меняя числа в RGB(xx, yy, zz)
2. Сделайте так чтобы ячейка пробегала 5 кругов (5 циклов).
3. Измените скорость бега ячейки (напомню, это определяет команда Wait )
4. Сделайте так, чтобы ячейка пробегала 5 строк
5. Сделайте так, чтобы ячейка пробегала 2 столбца только, а затем перескакивала на новую
строку.
6. Что будет, если вы удалите в вашем коде строки первого, внешнего цикла For...Next k,
выделенного красным ? (Примечание: далее я не привожу все строки программы. Показаны
только строки вблизи кодов циклов, которые вы будите редактировать) :
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
MsgBox("Push ""OK"" to start program")
For k=0 to 1 '''set number of cycles
'''''clean the variable b'''''''''''''
b=0
For m=0 to 3 ''''this cycle sets the raw coordinate of the running cell
'''''clean the variable a'''''''''''''
a=0
For n=0 to 5 step 1 ''''this cycle sets the column coordinate of the running cell
''''getCellByPosition(x,y) points to the cell, which is located at the intersect of column x with raw y.
''''remember the first column and first raw in OpenOffice have index of 0.
''''RGB(0,128m0) and RGB(38,229,38) are codes of the green color'''
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(38,229,38)
Wait 300
''''''Clean the green color of the cell
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(255,255,255)
''''''create new column coordinates of the green cell
a=a+1
Next n
''''''create new raw coordinates of the green cell
b=b+1
Next m
Next k
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
После этого у вас останутся такие строки:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
MsgBox("Push ""OK"" to start program")
'''''clean the variable b'''''''''''''
b=0
For m=0 to 3 ''''this cycle sets the raw coordinate of the running cell
'''''clean the variable a'''''''''''''
a=0
For n=0 to 5 step 1 ''''this cycle sets the column coordinate of the running cell
''''getCellByPosition(x,y) points to the cell, which is located at the intersect of column x with raw y.
''''remember the first column and first raw in OpenOffice have index of 0.
''''RGB(0,128m0) and RGB(38,229,38) are codes of the green color'''
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(38,229,38)
Wait 300
''''''Clean the green color of the cell
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(255,255,255)
''''''create new column coordinates of the green cell
a=a+1
Next n
''''''create new raw coordinates of the green cell
b=b+1
Next m
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
7. Что будет, если вы теперь удалите в этих кодах второй цикл,
выделенный зеленым?
8. А теперь удалите строки выделенные синим. Что теперь делает
программа?
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
MsgBox("Push ""OK"" to start program")
'''''clean the variable b'''''''''''''
b=0
'''''clean the variable a'''''''''''''
a=0
For n=0 to 5 step 1 ''''this cycle sets the column coordinate of the running cell
''''getCellByPosition(x,y) points to the cell, which is located at the intersect of column x with raw y.
''''remember the first column and first raw in OpenOffice have index of 0.
''''RGB(0,128m0) and RGB(38,229,38) are codes of the green color'''
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(38,229,38)
Wait 300
''''''Clean the green color of the cell
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(255,255,255)
''''''create new column coordinates of the green cell
a=a+1
Next n
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
9. А что получится если вы удалите все циклы и оставите только
следующие строки (для проверки работы получившейся программы,
предварительно напишите в Sheet1 вашего SpreadSheets, что нибудь в
ячейки А2, B3, С4 и D5, например любые цифры или слова)?:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub GreenCell
Dim Sheet0 As Object
Dim oCells As Object
Dim oList As Object
Dim n As Integer
Dim m As Integer
Dim k As Integer
Dim a As Single
Dim b As Single
Sheet0= ThisComponent.Sheets(0)
oCells=Sheet0.getCellRangeByName("A1:L26")
Flags=com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE +_
com.sun.star.sheet.CellFlags.HARDATTR + com.sun.star.sheet.CellFlags.FORMULA
oCells.clearContents(Flags)
REM This part of program is creating the running green cell
MsgBox("Push ""OK"" to start program")
MsgBox("The End")
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
10. Решите аналитически следующие уравнения:
A) 7*х+6= 3*x +42
Б) 6 – 7*x= 30-3*x
11. Раскройте правильно скобки и запишите получившиеся выражения:
A) ((1+x)*4)/2=
B) (12+x)*3+x*(3+4*5)=
В) (3+x)*(4-y)=