相关疑难解决方法(0)

并且在VBA中也是/ OrElse

我正在尝试通过执行以下操作在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中不存在惰性求值,那么构造代码的最佳方法是什么,以便评估我期望的方式?

vb.net vba

42
推荐指数
2
解决办法
2万
查看次数

VBA的隐藏功能

VBA语言的哪些功能要么记录不清,要么根本不经常使用?

vba hidden-features

29
推荐指数
9
解决办法
6万
查看次数

使用 Or 逻辑运算符在表达式内同时计算两个条件

所以,我有以下简短代码:

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 logical-operators

5
推荐指数
1
解决办法
114
查看次数

Instr条件不适用于2个或更多条件

我在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中?

excel vba excel-vba

3
推荐指数
2
解决办法
2万
查看次数

嵌套的"if"和使用"if x and y and z and .."之间的速度有什么区别吗?

我有一个简短的问题.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)

ms-access vba if-statement flow-control

3
推荐指数
1
解决办法
236
查看次数

布尔表达式 - 操作顺序

我在Excel VBA中进行了测试:

If (test1) And (test2) And (test3) Then
    'do something
End If

在C,Java等中,test1将首先运行,然后运行test2,然后运行test3.重要的是,如果test1为false,则整个测试都是错误的,因此剩余的测试不会运行.

在这种情况下,VBA会发生这种情况吗?如果是这样,测试运行的顺序是什么?

excel vba boolean excel-vba operator-precedence

2
推荐指数
1
解决办法
5623
查看次数

如果在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)

excel vba excel-vba

2
推荐指数
1
解决办法
4万
查看次数