2014-07-08 102 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