Введение в программирование на VBA - eDrive

Введение в программирование на VBA - eDrive Введение в программирование на VBA - eDrive

edrive.narod.ru
from edrive.narod.ru More from this publisher
06.01.2015 Views

50 If остаток > 0 Then доля (0) = доля (0) + 1 If остаток > 1 Then доля (1) = доля (1) + 1 MsgBox введено & "=" & доля (0) & "+" & доля (1) & "+" & доля (2) End Sub Dim память As Integer Sub Счетчик () Dim массив (10) As Integer, Индекс As Integer память = 0 For индекс = 0 To 10 Step 2 массив (индекс) = индекс MsgBox Вывод (массив (), индекс) Next End Sub Function Вывод (аргумент1 () As Integer, аргумент2 As Integer) As Integer память = память + аргумент1 (аргумент2) Вывод = память End Function Если размер массива заранее неизвестен, его можно объявлять без размера, а размер задавать оператором ReDim по мере заполнения массива. В этом случае мы имеем дело с динамическим массивом, который, в отличие от статического, изменяет свой размер по ходу выполнения программы. Всякий раз при переопределении оператором ReDim содержимое массива уничтожается. Если по условию задачи этого не требуется, после ReDim следует ввести оператор Preserve. Тогда массив будет «запоминать» свое содержимое. Примеры Sub Покупки () Dim список () As String, i As Integer, количество As Integer количество = InputBox ("Сколько ") ReDim список (1 To количество) For i = 1 To количество список (i) = InputBox (Str(i) & " - Это что ") Next End Sub Sub ДинамическийМассив () Dim тест () As Integer, индекс As Integer, массив As String For индекс = 10 To 20 ReDim тест (индекс) As Integer тест (индекс) = индекс Next For индекс = 10 To 20 массив = массив & тест (индекс) тест (индекс) = индекс

51 Next MsgBox массив End Sub Sub ДинамическийМассивСПамятью () Dim тест () As Integer, индекс As Integer, массив As String For индекс = 10 To 20 ReDim Preserve тест (индекс) As Integer тест (индекс) = индекс массив = массив & тест (индекс) Next MsgBox массив End Sub Dim счетчик () As Integer Sub Очко () ‘ Популярная игра в очко: вы стараетесь набрать максимум очков, но ‘ не более 21, а компьютер “выбрасывает кубик”. Кроме динамического ‘ массива, здесь вы встретитесь с датчиком случайных чисел Rnd, ‘ с функцией его начальной установки Randomize, и с рекурсией. Static i As Integer ReDim Preserve счетчик (i) As Integer Randomize счетчик (i) = Rnd * 10 ответ = Info (счетчик (), i) i = i + 1 If ответ 0 Then ответ = MsgBox (ответ & " Еще", vbYesNo) If ответ = vbYes Then Очко Else End ' Пример рекурсии End Sub Function Info (список () As Integer, количество As Integer) As Integer Dim сумма As Integer, x As Integer сумма = 0 For x = 0 To количество сумма = сумма + список (x) Next If сумма > 21 Then MsgBox Str (сумма) & " - Вы проиграли!" Info = 0 Else If сумма = 21 Then Beep MsgBox Str (сумма) & " - Вы выиграли!" Info = 0 Else Info = сумма End If End If End Function

50<br />

If остаток > 0 Then доля (0) = доля (0) + 1<br />

If остаток > 1 Then доля (1) = доля (1) + 1<br />

MsgBox <strong>в</strong><strong>в</strong>едено & "=" & доля (0) & "+" & доля (1) & "+" & доля (2)<br />

End Sub<br />

Dim память As Integer<br />

Sub Счетчик ()<br />

Dim масси<strong>в</strong> (10) As Integer, Индекс As Integer<br />

память = 0<br />

For индекс = 0 To 10 Step 2<br />

масси<strong>в</strong> (индекс) = индекс<br />

MsgBox Вы<strong>в</strong>од (масси<strong>в</strong> (), индекс)<br />

Next<br />

End Sub<br />

Function Вы<strong>в</strong>од (аргумент1 () As Integer, аргумент2 As Integer) As Integer<br />

память = память + аргумент1 (аргумент2)<br />

Вы<strong>в</strong>од = память<br />

End Function<br />

Если размер масси<strong>в</strong>а заранее неиз<strong>в</strong>естен, его можно объя<strong>в</strong>лять без<br />

размера, а размер зада<strong>в</strong>ать оператором ReDim по мере заполнения масси<strong>в</strong>а. В<br />

этом случае мы имеем дело с ди<strong>на</strong>мическим масси<strong>в</strong>ом, который, <strong>в</strong> отличие от<br />

статического, изменяет с<strong>в</strong>ой размер по ходу <strong>в</strong>ыполнения программы.<br />

Всякий раз при переопределении оператором ReDim содержимое<br />

масси<strong>в</strong>а уничтожается. Если по усло<strong>в</strong>ию задачи этого не требуется, после<br />

ReDim следует <strong>в</strong><strong>в</strong>ести оператор Preserve. Тогда масси<strong>в</strong> будет «запоми<strong>на</strong>ть»<br />

с<strong>в</strong>ое содержимое.<br />

Примеры<br />

Sub Покупки ()<br />

Dim список () As String, i As Integer, количест<strong>в</strong>о As Integer<br />

количест<strong>в</strong>о = InputBox ("Сколько ")<br />

ReDim список (1 To количест<strong>в</strong>о)<br />

For i = 1 To количест<strong>в</strong>о<br />

список (i) = InputBox (Str(i) & " - Это что ")<br />

Next<br />

End Sub<br />

Sub Ди<strong>на</strong>мическийМасси<strong>в</strong> ()<br />

Dim тест () As Integer, индекс As Integer, масси<strong>в</strong> As String<br />

For индекс = 10 To 20<br />

ReDim тест (индекс) As Integer<br />

тест (индекс) = индекс<br />

Next<br />

For индекс = 10 To 20<br />

масси<strong>в</strong> = масси<strong>в</strong> & тест (индекс)<br />

тест (индекс) = индекс

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!