2016-05-06 85 views
0

快速問題,下面的代碼看起來有什麼問題(找到第一個非零行)?它使退出循環,雖然第一個非零行5列,而不是行2 :(如果Excel VBA中的空循環過早退出

'Finding first non-zero row 
    y = 2 
    If IsEmpty(Range(Cells(y, 10).Address)) = True Then 
    Do 
    y = y + 1 
    Loop While IsEmpty(Range(Cells(y, 10).Address)) = True 
End If 

FirstRow = y 

非常感謝所有幫助,謝謝。

IsEmpty
+0

爲什麼你使用'if'和'環while'用相同的條件下,當你可以做到這一點'做while',只是有一次條件?此外,對條件添加'= True'沒有用處,因爲IsEmpty()已經返回一個布爾值。然後'IsEmpty(Cells(y,10)'應該足夠了。獲取地址串然後用'Range'轉換回'Cells'已經返回的內容是有點過時的。 – trincot

+0

你確定你已經提到了正確的列號?第10列是'J'列... – trincot

回答

-1

雙方應該檢查假,不是真正的

+0

對於查找非零行,需要繼續搜索,而一行是空的 – trincot

+0

奇怪的是,我的原代碼現在可以工作... –

+0

@Space_girl - 你是否改變了兩個?改變第一個會讓你在循環中,改變第二個會讓你在循環中。 – OldUgly

1

代碼應運行正常,只是確保你正在尋找在右列:。列10列J,這可能不是你預計在看一個

有然而有幾件事情需要改善我們的代碼:

  • 你不需要If。只需使用Do While來獲得相同的檢查順序;
  • 沒有用處加入= True的條件,因爲IsEmpty()已經返回Boolean;
  • IsEmpty(Cells(y, 10))應該足以進行檢查。獲取單元格的地址字符串太過矯正,然後用Range()將其轉換回Cells()已經返回的內容。

代碼:

y = 2 
Do While IsEmpty(Cells(y, 10)) 
    y = y + 1 
Loop 
FirstRow = y