我正在尝试通过执行以下操作在Excel宏中使用"和"进行惰性评估:
If Not myObject Is Nothing *And* myObject.test() Then
'do something'
Else
'do something else'
End If
Run Code Online (Sandbox Code Playgroud)
我知道在VB.NET中存在懒惰的评估AndAlso,OrElse但在VBA中找不到类似的东西.如果VBA中不存在惰性求值,那么构造代码的最佳方法是什么,以便评估我期望的方式?
所以,我有以下简短代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'More code here
If Target.Cells.Count > 1 Or Target = Empty Then
Exit Sub
End If
'More code here.
End Sub
Run Code Online (Sandbox Code Playgroud)
如果 A 部分为假,它不会先评估 A,然后再评估 B,而是同时评估两者,这是我不记得 vba 之前做过的事情。
抱歉,如果我的解释不够好,请使用英语(如果不是我的母语)。请全面且富有建设性。最近我在这里的评论经历了很多不好的经历。
我在Excel VBA中有以下INSTR条件,它不起作用(始终)
STR_TEXT="SKU1234 $100/10' $200/20'" ' < example string
IF INSTR(STR_TEXT,"/10'") AND INSTR(STR_TEXT,"/20'") THEN
' code
ELSE
' code
END IF
Run Code Online (Sandbox Code Playgroud)
由于某些不明原因,它似乎无法检查这两个条件,所以第一个IF,即使两个条件匹配,似乎也不起作用并进入ELSE.
以下工作:
STR_TEXT="SKU1234 $100/10' $200/20'" ' < example string
IF INSTR(STR_TEXT,"/10'") THEN
IF INSTR(STR_TEXT,"/20'") THEN
' code
END IF
ELSE
' code
END IF
Run Code Online (Sandbox Code Playgroud)
如您所见,如果我将第一个IF上的条件分开,它就可以了.但我宁愿在同一个IF中同时具备这两个条件,因为代码是"更清洁"的.
任何人都知道为什么和/或如何修复它而不必将IF放在另一个IF中?
我有一个简短的问题.VBA之间有什么不同吗?
if x1 and x2 and x3 and ... and x10 then
foo
end if
Run Code Online (Sandbox Code Playgroud)
和
if x1 then
if x2 then
if x3 then
...
foo
end if
end if
end if
Run Code Online (Sandbox Code Playgroud)
关于速度?
更具体地说:我有10列数据,需要逐行比较数据库中的重复数据(SELECT DISTINCT之类的东西在这种情况下不起作用).
我可以想象,那是用的
x1 = recordset.fields("Field1").value
if x1 then
x2 = recordset.fields("Field2").value
if x2 then
x3 = recordset.fields("Field3").value
if x3 then
...
foo
end if
end if
end if
Run Code Online (Sandbox Code Playgroud)
会快于
x1 = recordset.fields("Field1").value
x2 = recordset.fields("Field2").value
...
if x1 and x2 and x3 and ... and …Run Code Online (Sandbox Code Playgroud) 我在Excel VBA中进行了测试:
If (test1) And (test2) And (test3) Then
'do something
End If
在C,Java等中,test1将首先运行,然后运行test2,然后运行test3.重要的是,如果test1为false,则整个测试都是错误的,因此剩余的测试不会运行.
在这种情况下,VBA会发生这种情况吗?如果是这样,测试运行的顺序是什么?
我想将带有14列的Excel文件重新分发到正确的列(具有12.000行).
为此,我必须使用一些If和Or语句将数字放在矩阵中.但显然我没有从中得到正确的东西.
它使我的所有单元格为零,而具有值的单元格应保持该值.
我哪里出错?:
For i = 1 To LastRow
If Cells(i, 8).Value2 = "" Then Cells(i, 8).Value2 = 0
If Cells(i, 1).Value2 < 437 And Cells(i, 5).Value2 = "aa" _
Or Cells(i, 5).Value2 = "bb" _
Or Cells(i, 5).Value2 = "cc" _
Or Cells(i, 5).Value2 = "dd" _
Or Cells(i, 5).Value2 = "ee" _
Or Cells(i, 5).Value2 = "ff" _
Or Cells(i, 5).Value2 = "gg" _
And Cells(i, 7).Value2 = "" _
Then Cells(i, 7).Value2 = 0
Next i …Run Code Online (Sandbox Code Playgroud) vba ×7
excel ×4
excel-vba ×3
boolean ×1
flow-control ×1
if-statement ×1
ms-access ×1
vb.net ×1