Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«VBA для Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 43

Автор Π‘Ρ‚ΠΈΠ² Каммингс

While. . .Loop ΠΈ Do Until... Loop.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²Π΅Π΄Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΏΠΎ ΠΊΡƒΠ»ΠΈΠ½Π°Ρ€ΠΈΠΈ ΠΈ рассказываСтС своим ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡΠΌ Ρ€Π΅Ρ†Π΅ΠΏΡ‚. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ: "ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ Π²Ρ‹ΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ масло, ΠΏΠΎΠΊΠ° Π² Π½Π΅ΠΌ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ нСоднородности" ΠΈΠ»ΠΈ "ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ Π²Ρ‹ΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ масло Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΎ Π½Π΅ станСт ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹ΠΌ". И ΠΏΠ΅Ρ€Π²ΠΎΠ΅, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅.

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Π·Π°ΠΈΠΌΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Do While ΠΈ Do Until. Если Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Do While условиСм являСтся А = Π’, Ρ‚ΠΎ эквивалСнтным Π΅ΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚

Do Until с условиСм А ΠΎ Π’.

Do ΠΈΠ»ΠΈ Π½Π΅ Do

Π¦ΠΈΠΊΠ» Do Π² своСм условном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ обСспСчиваСт всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π° основании ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ VBA ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ выполнСния Ρ†ΠΈΠΊΠ»Π°. К соТалСнию, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π΅Π»ΠΎ Π½Π΅ всСгда обстоит Ρ‚Π°ΠΊ идСально, ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ условия Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°, для Ρ‡Π΅Π³ΠΎ Π² VBA прСдусмотрСн ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Exit Do.

Π”Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Do, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Exit Do Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ сразу послС Ρ†ΠΈΠΊΠ»Π°. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ выполняСтся конкатСнация строковой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ строкой, Π½ΠΎ Ссли пСрСмСнная содСрТит большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа, Ρ†ΠΈΠΊΠ» прСкращаСтся:


Do While strA <= "2"

If Len(strA) > 1 Then

Exit Do

End If

strB = strB & strA

strA = GetNextCharacter

Loop


ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Exit Do ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Ρ†ΠΈΠΊΠ» ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… If. . .Then ΠΈ Select Case. Π’ этих случаях Ρ†ΠΈΠΊΠ» выполняСтся Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ происходит Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ особоС ΠΈΠ»ΠΈ Π½Π΅ появляСтся нСпрСдусмотрСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Exit Do ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ выполнСния Ρ†ΠΈΠΊΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ апостроф (') Π² Π½Π°Ρ‡Π°Π»Π΅ строк Ρ†Π΅Π»ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π’ стандартных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… Do While/Until. . . Loop условиС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π»ΠΈΠ±ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅, Π»ΠΈΠ±ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ†ΠΈΠΊΠ»Π°. Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ условиС Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°?

Π’ этом случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Do... Loop Π±Π΅Π· While ΠΈ Until. Но ΠΏΡ€ΠΈ этом Π²Π°ΠΌ понадобится Π²Π»ΠΎΠΆΠΈΡ‚ΡŒ Π² Ρ†ΠΈΠΊΠ» Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ If, Π»ΠΈΠ±ΠΎ Select Case. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Exit Do, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ условиС окаТСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌ.

Π’ΠΎΡ‚ схСматичСскоС прСдставлСниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Do ... Loop:


Do

(ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π°)

If условиС Then

Exit Do

End If

(ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ)

Loop


Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, эта Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° годится Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² Ρ†ΠΈΠΊΠ»Π΅, нСзависимо ΠΎΡ‚ выполнСния ΠΈΠ»ΠΈ нСвыполнСния условия, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ссли Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π² зависимости ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ условия.

НапримСр, часто приходится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ ряда ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π². Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ структуры Do... Loop Ρ†ΠΈΠΊΠ» Π²Π²ΠΎΠ΄Π° повторяСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π²Π²Π΅Π΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ ΠΎΡ‚Π²Π΅Ρ‚Π°:


Sub GetAnAnswer()

Dim strAnswer As String

strAnswer = InputBox("Enter your answer (A-E)")

Do

If strAnswer = "" Then

strAnswer = InputBox("You di dn't enter anything." _

& " Please type a letter between A and E.")

ElseIf Len(strAnswer] > 1 Then

strAnswer = InputBox("Your answer should be" _

& " only one letter long. Please t ry agai n.")

ElseIf strAnswer < "A" Or strAnswer > "E" Then

strAnswer = InputBox("You typed an invalid" _

& " charact er. Type a letter from A to E.")

Else

Exit Do

End If

Loop

End Sub


Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Exit Do Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° всС Ρ‚Ρ€ΠΈ условия, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… If n ElseIf, Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹.

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ для достиТСния Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ†Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Do WhiLetrue Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС структуры, Π·Π°Π΄Π°ΡŽΡ‰Π΅ΠΉ Ρ†ΠΈΠΊΠ». ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ True (константа) всСгда ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True, условиС всСгда выполняСтся, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, VBA ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡Π½Π΅Ρ‚ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Exit Do.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠ² For...Next

Если ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ†ΠΈΠΊΠ»Π° извСстно, сколько Ρ€Π°Π· ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» For. . . Next. Число ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² Ρ†ΠΈΠΊΠ»Π° задаСтся значСниями Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π΄Π°ΠΆΠ΅ слоТными выраТСниями. Π’ процСссС выполнСния Ρ†ΠΈΠΊΠ»Π° пСрСмСнная счСтчик Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ числС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² Ρ†ΠΈΠΊΠ»Π°. Когда Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика становится Ρ€Π°Π²Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Π΅Ρ†, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ синтаксис структуры For. . . Next ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

For счСтчик = Π½Π°Ρ‡Π°Π»ΠΎ Π’ΠΎ ΠΊΠΎΠ½Π΅Ρ†

(ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π°)

Next счСтчик

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для отобраТСния сообщСния ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π° Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΊΠ½ΠΎ Immediate (Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Visual Basic ΠΎΠΊΠ½ΠΎ Immediate открываСтся Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ клавиш <Ctrl+G>):


Sub CountToTen()

Dim j As Integer

For j = 1 To 10

Debug.Print "Π”ΡƒΠ±Π»ΡŒ β„– " & j

Next j

End Sub


Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ числовыми значСниями. Когда Ρ†ΠΈΠΊΠ» начинаСтся, j ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1; Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ счСтчик присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»ΠΎ. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° Ρ†ΠΈΠΊΠ»Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Next j ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ j (Π½Π° 1) ΠΈ отсылаСт ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ снова Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ†ΠΈΠΊΠ»Π°. Когда j достигаСт значСния 10, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° прСкращаСтся.

Π’Π°ΠΆΠ½Ρ‹Π΅ замСчания ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Ρ†ΠΈΠΊΠ»ΠΎΠ² For.. .Next

Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ всСгда оставался понятным. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ 1 Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния для Ρ†ΠΈΠΊΠ»Π° For. . . Next, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ вас Π½Π΅Ρ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ для этого Π΄Ρ€ΡƒΠ³ΠΎΠ΅ число.

Π’Π°ΠΊΠΈΠ΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π½Π° самом Π΄Π΅Π»Π΅ Π±Ρ‹Π²Π°ΡŽΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² самом Ρ†ΠΈΠΊΠ»Π΅ (Π½ΠΎ, ΡƒΡ‚ΠΎΡ‡Π½ΡŽ, Π½Π΅ мСняСтся Π² Ρ†ΠΈΠΊΠ»Π΅). Если Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ элСмСнтам Ρ‚ΠΈΠΏΠ° Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² страниц, Ρ‚ΠΎ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ значСния Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² этих элСмСнтов. Π’ частности, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ выбираСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 0 (подробности - Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅).

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Next счСтчик, Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅ΠΌ Ρ†ΠΈΠΊΠ» For. . . Next, имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-счСтчика ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ - ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Next автоматичСски вычислит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΠΈ ΠΎΡ‚ΠΎΡˆΠ»Π΅Ρ‚ VBA Π² Π½Π°Ρ‡Π°Π»ΠΎ структуры. Однако ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ стоит ΠΏΡ€ΠΈΡƒΡ‡ΠΈΡ‚ΡŒ сСбя Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ имя счСтчика Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Next.

Π’ΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ Π² случаС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² For. . .Next Π²Ρ‹ всСгда смоТСтС с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ†ΠΈΠΊΠ»Ρƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Next. He мСняйтС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° For. . .Next. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ счСтчик являСтся ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ - Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ Π·Π°ΠΌΠ°Π½Ρ‡ΠΈΠ²ΠΎ - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика. НС ΠΏΠΎΠ΄Π΄Π°Π²Π°ΠΉΡ‚Π΅ΡΡŒ!

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ со счСтчиком ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρƒ Π²Π°ΠΆΠ½Ρ‹Ρ… шагов ΠΈΠ»ΠΈ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ бСсконСчно.

Π₯отя ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π΅Ρ† для Ρ†ΠΈΠΊΠ»Π° For . . . Next Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ значСния Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ послС Π½Π°Ρ‡Π°Π»Π° выполнСния Ρ†ΠΈΠΊΠ»Π° Π½Π΅ повлияСт Π½Π° процСсс выполнСния. Π¦ΠΈΠΊΠ» всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Π·Π°Π΄Π°Π½ΠΎ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Π΅Ρ†.

Π¦ΠΈΠΊΠ»Ρ‹ For... Next ΠΈ массивы

Π¦ΠΈΠΊΠ»Ρ‹ For. . .Next особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами, ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ для мноТСств элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ массивы ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 13, Π½ΠΎ дискуссия ΠΎ Ρ†ΠΈΠΊΠ»Π°Ρ… For. . . Next ΠΎΡΡ‚Π°Π»Π°ΡΡŒ Π±Ρ‹ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠΉ Π±Π΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… слов ΠΎ пользС Ρ‚Π°ΠΊΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² совокупности с этими ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ большоС практичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Π·ΠΈΠ½Π°ΠΌΠΈ для Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° For. . .Next нСслоТно Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив мноТСством вычислСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:


Dim intΠœΠ°ΡΡΠΈΠ²ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² (14) As Integer

For a = 0 To 14

intMacΡΠΈΠ²ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ²( a) = a * a

Next a


Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° начинаСтся с объявлСния массива ΠΈΠ· 15 Ρ†Π΅Π»Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (15, Π° Π½Π΅ 14, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ VBA приписываСт ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту Π² массивС индСкс 0). Π—Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†ΠΈΠΊΠ» For . . . Next, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива, ΠΎΡ‚ 0 Π΄ΠΎ 14, присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ пСрСмСнная Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ счСтчик, Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ индСкс массива, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ элСмСнта Π² массивС.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ For... Next

Подобно Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ структурам VBA, Ρ†ΠΈΠΊΠ»Ρ‹ For. . .Next ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ - ΠΈΠ»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ структуры, - Ρ‚Π°ΠΊ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ, ΠΊΠ°ΠΊ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ бСсполСзный Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ:

Dim sngC ' Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, C ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "случайноС число"

Randomize ' инициализация Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл


For A = 1 To 5

sngC = Rnd()

For B = 1 To 5

Debug.Print sngC * Rnd()

Next

Next A


Если Π²Ρ‹ достаточно Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, Ρ‚ΠΎ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° смоТСтС ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° шагами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ VBA Π² процСссС выполнСния этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.