這是通用的 For...Next 回圈陳述句:
For i = START To END [step]
'Repeated action
Next i
我試圖理解將“1”寫為 For...Next 陳述句的 END 和使用給定表中的總行數之間的區別。
換句話說,此代碼示例之間的區別:
Dim thisSheet As Worksheet
Dim thisTable As ListObject
Dim thisRow As Long
Set thisSheet = ThisWorkbook.Worksheets("Data")
Set thisTable = thisSheet.ListObjects(1)
For thisRow = Selection.Rows.Count To 1 Step -1
If WorksheetFunction.CountA(Selection.Rows(thisRow)) = vbNullString Then
Selection.Rows(thisRow).EntireRow.Delete
End If
Next thisRow
和這個:
Dim thisSheet As Worksheet
Dim thisTable As ListObject
Dim thisRow As Long
Set thisSheet = ThisWorkbook.Worksheets("Data")
Set thisTable = thisSheet.ListObjects(1)
For thisRow = Selection.Rows.Count To thisTable.DataBodyRange.Rows.Count Step -1
If WorksheetFunction.CountA(Selection.Rows(thisRow)) = vbNullString Then
Selection.Rows(thisRow).EntireRow.Delete
End If
Next thisRow
有任何想法嗎?
uj5u.com熱心網友回復:
在嘗試幫助您了解“For...Next”回圈的開始值和結束值如何操作之前,回圈中的代碼似乎存在問題,無論多少次都會阻止它執行您想要的操作回圈迭代。在您的 IF 陳述句中,以下條件永遠不會為真:
WorksheetFunction.CountA(Selection.Rows(thisRow)) = vbNullString
作業表函式“CountA”將始終回傳一個數字,因此它不能等于空字串。因此,我看不出您提供的任何一個示例如何洗掉一行。
好的。關于 For..Next 回圈的退出條件...
For...Next 回圈的一般用途是迭代指定次數,同時將變數的值移動到指定的整數集。考慮這個回圈:
For X = 1 to 10
Debug.Print X
Next
在這里,“Debug.print X”陳述句將被執行 10 次。第一次,它將列印“1”到直接視窗,第二次將列印“2”,依此類推,直到列印“10”。列印 10 后,解釋器將到達“Next”子句,將 X 更改為 11。當嘗試回圈的下一次迭代時,解釋器注意到 X 越界并退出回圈
在您的示例中,每次解釋器處理“Next”時,您都使用“Step”子句將 -1 添加到控制變數。考慮這個例子。
For X = 10 to 1 Step -1
Debug.Print X
Next
這里,X的初始值為10,所以解釋器第一次處理“Debug.print X”時會列印10。當到達“Next”時,解釋器會給X加上-1,所以下一次通過回圈,解釋器將列印“9”,然后是“8”,依此類推,直到它列印“1”。然后“Next”陳述句會將 X 的值移動到 0,因此當嘗試運行回圈的下一次迭代時,解釋器注意到 X 現在超出了設定的邊界并退出回圈。
重要的一點是,在我的示例中,“For...Next”回圈僅在第一次進入回圈時評估確定控制變數 (X) 邊界的運算式。無論運算式在該點計算的結果是確定退出條件的值。
在您的第一個示例中,VBA 解釋器會將“Selection.Rows.Count”評估為一個整數值,該整數值由處于活動狀態的任何作業表上的當前選擇中的行數確定。這將是第一次通過回圈的“thisRow”的值。每次解釋器到達“Next”時,它都會向 thisRow 添加 -1 直到該行小于 1,這將導致解釋器退出回圈。
在您的第二個示例中,除了評估“Selection.Rows.Count”以確定 thisRow 的第一個值之外,解釋器還評估“thisTable.DataBodyRange.Rows.Count”以確定該行的結束值。該運算式將根據名為“thisTable”的變數參考的資料表中的行數計算為整數。即使“thisTable.DataBodyRange.Rows.Count”的值由于回圈中執行的代碼而發生變化,該值也將確定回圈的退出條件。只有運算式的初始值才決定回圈何時結束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/452788.html
上一篇:嵌套在2個資料幀之間的for回圈
下一篇:計算字串長度時包含空格
