2014-07-08 101 views
3
Do Until Sheets("Sheet1").Cells(x, y).Value = stringOne Or "" 

     x = x + 1 

Loop 

在上面的VBA代碼片段中,我得到運行時錯誤'13':類型不匹配。 stringOne被聲明爲一個String。我可以消除或「」和循環的作品。我可以消除stringOne,只有「」和循環工作。只有當我添加Or「」時,循環纔會停止運作。我甚至換了訂單,即=「」或者stringOne。有什麼想法嗎?VBA做循環或「」條件

+4

它通常有助於得到解答,如果您包括您所使用的語言的標籤。我懷疑是VBA還是VB.Net,但是如果你要編輯包含正確的語言標記,這會有很大的幫助。 –

+1

爲什麼downvote OPs Q?這是一個有效的問題,至少有兩個人理解它是一個值得+1的解決方案? –

+0

謝謝你肯。對不起,我是新來的論壇作爲海報,並認爲我擁有一切。我編輯添加VBA。我已經在這一行代碼上工作了一整天,並決定需要外部幫助。我不確定爲什麼它值得下調......我對進攻表示歉意。請讓我知道是什麼導致了downvote,所以我可以從錯誤中學習。謝謝! – KeithG

回答

9

任何條件的需求表達式和運算符。

Do until exp1 op exp2 OR exp3 

只有在exp3是布爾類型時纔有效。 「」(String)不是。

所以應該像

Do Until Sheets("Sheet1").Cells(x, y).Value = stringOne Or Sheets("Sheet1").Cells(x, y).Value = "" 
+0

完美的作品Axel!感謝您的解釋。你今天已經教會了我一些新的東西! – KeithG

4

您需要或之後布爾運算,所以你基本上需要:

Do Until Sheets("Sheet1").Cells(x, y).Value = stringOne Or Sheets("Sheet1").Cells(x, y).Value = "" 

     x = x + 1 

Loop 

或「」不是布爾運算,因此,你必須 Do Until (boolean operation) OR (string constant),而不是Do Until (boolean operation) OR (boolean operation)

+0

謝謝艾倫!我沒有接受過VBA的正式培訓,只學習了必要的知識,所以我不熟悉語言的規則,但它確實幫助我知道或者將需要布爾操作而不是字符串。我會讚揚你和Axel的迴應,但我還沒有任何代表。雖然你們應該得到讚賞! – KeithG