大家好,我是永不止步的老牛。
上一篇我們介紹了VBA判斷語句,本篇我們介紹VBA循環(huán)語句Do…While。
當我們在VBA編碼中,在程序中需要重復執(zhí)行某些代碼時,就要用到循環(huán)語句,那些被重復執(zhí)行的代碼叫循環(huán)體,循環(huán)體加上循環(huán)的終止條件就是循環(huán)語句。
我們先看下Do...While的語法:
Do While 條件
代碼1
代碼2
代碼n
Loop
執(zhí)行這個循環(huán)語句時,首先先判斷條件,如果是False,就執(zhí)行Loop后面的代碼,就是跳出循環(huán)體,相當于循環(huán)結(jié)束;如果是True,就執(zhí)行代碼1…代碼n,當執(zhí)行到loop時,就再次回到Do While 條件處,再次判斷條件,如果是False,就執(zhí)行Loop后面的代碼,如果是是True,就執(zhí)行代碼1…代碼n,當執(zhí)行到loop時,就繼續(xù)回到Do While 條件處,繼續(xù)判斷條件……一直這樣循環(huán),直到條件等于False。
我們用例子來展示一下,下表中如果1月銷量大于100,就將數(shù)字變成粗體,代碼如下:
Sub 設置粗體()
Dim i As Integer
i = 2
Do While Range('C' & i) <> ''
If Range('C' & i).Value >= 100 Then
Range('C' & i).Font.Bold = True
End If
i = i + 1
Loop
End Sub
首先定義了變量i,并給i賦值2,執(zhí)行到Do While語句時,判斷條件,條件中的Range('C' & i)就表示單元格C2,就是判斷單元格C2的值是不是為空,如果不為空就執(zhí)行循環(huán)體代碼,循環(huán)體內(nèi)的IF語句判斷單元格C2的值,如果大于等于100,就將單元格C2的值設置成粗體,此時因為我們下來要判斷的是C3單元格,所以就要給i加1,讓下次Do While條件中的Range('C' & i) 變成了單元格C3,以此類推,直到循環(huán)到C6單元格,等于空,就跳出Do While循環(huán),執(zhí)行Loop語句后面的代碼。
還可以用Cells(行號, 列號)來表示一個單元格,上述代碼可以修改成:
Sub 設置粗體()
Dim i As Integer
i = 2
Do While Cells(i, 3) <> ''
If Cells(i, 3).Value >= 100 Then
Cells(i, 3).Font.Bold = True
End If
i = i + 1
Loop
End Sub
還可以用ActiveCell來控制,如下:
Sub 設置粗體3()
Range('C2').Select
Do While ActiveCell.Value <> ''
If ActiveCell.Value >= 100 Then
ActiveCell.Font.Bold = True
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
語句Range('C2').Select表示選中了C2單元格,此時ActiveCell就是C2單元格,因為沒有用到變量來控制循環(huán),所以在循環(huán)體尾部,ActiveCell.Offset(1, 0).Select,就是讓單元格往下移動1格。
Do While循環(huán)就是判斷某個條件,如果是True,就執(zhí)行循環(huán)體,直到條件返回False。
上述代碼我們設置的條件是判斷單元格是否為空,和具體有多少行數(shù)據(jù)沒有關(guān)系,我們演示多復制一些數(shù)據(jù),代碼不需要變化,一樣的效果。
特別要注意的是:一定要正確設計循環(huán),避免無限循環(huán),就是俗稱的死循環(huán),ESC也無法停止該循環(huán),新手特別容易忽視循環(huán)的正確退出。
Do…While循環(huán)還有另外一種形式,語法如下:
Do
代碼1
代碼2
代碼n
Loop While 條件
先執(zhí)行代碼1…代碼n,然后判斷條件,如果條件返回False,就跳出循環(huán),如果條件返回True,就繼續(xù)執(zhí)行循環(huán)體代碼1…代碼n,然后再次判斷,直到條件返回False,跳出循環(huán)。
這種形式的循環(huán),循環(huán)體代碼1…代碼n最少被執(zhí)行一次。
如果在循環(huán)體代碼1…代碼n中,如果滿足某種情況,不想繼續(xù)執(zhí)行循環(huán),直接跳出循環(huán),可以使用語句Exit Do。
Exit Do 表示立即停止循環(huán),跳出循環(huán)執(zhí)行Loop之后的代碼。
下面的示例演示了,從C2開始,往下循環(huán),將第一個大于等于100的數(shù)字變成粗體。
為了看清楚循環(huán)體執(zhí)行了幾次,循環(huán)體的第一句就是將Range('C' & i)的值輸出到立即窗口,可以看到執(zhí)行到第5次,就是單元格C6時,因為值是110,大于100,設置成粗體,執(zhí)行Exit Do,跳出循環(huán)。
今天就介紹到這,大家最好能自己實際練習一下,下一篇文章我們介紹VBA的其他循環(huán)語句。
聯(lián)系客服