【问题标题】:Excel VBA: string comparison does not workExcel VBA:字符串比较不起作用
【发布时间】:2021-05-11 16:37:04
【问题描述】:

我正在尝试将 activeSheet 代码名称与简单字符串进行比较,但结果始终为真。我调试过,变量值不同。

Sub Button_Supprimer()
    
Dim a, b As String
a = CStr(ActiveSheet.CodeName)
b = "Sheet1"

If (a = b) Then:
    frmSupprimer.Caption = "Supprimer un matériel"
    'frmSupprimer.UserForm_Initialize ("Matériel")
    frmSupprimer.Show
End               
End Sub

result

【问题讨论】:

  • 去掉:End应该是End If
  • 谢谢@ScottCraner !!现在可以工作了。

标签: excel vba excel-2010


【解决方案1】:

结果并不总是正确的,只是代码中没有任何语句实际上是有条件的。

: 指令分隔符标记的存在通常应该被忘记并留给从 立即 窗格 (Ctrl+G) 运行的最小化的即发即弃代码.

通过用冒号结束If {condition} Then,您已经使条件表达式成为一个空指令。

没有它,代码将停止编译,并且会出现“If block without End If”编译错误。

条件代码块的正确语法如下:

If {condition} Then
    {conditional statements}
End If

注意End指令本质上是一个用于终止程序执行的核选项;全局变量被重置为其默认值,执行上下文终止:根据经验,您想让执行到达End Sub 语句,并让 VBA 运行时正常展开其调用堆栈:End 指令停止所有死在它的就在那儿和然后 - 您实际上需要这样做非常非常罕见。

【讨论】:

  • 太棒了@Mathieu Guindon!很好的解释!非常感谢!!
  • @BAMDeveloper 我的荣幸!请注意,If {condition} Then {conditional statement} 也是合法语法 on one line (这就是冒号终止语句“有效”的原因,至少就编译器而言),但建议始终使用即使[当前]只有一个条件语句,也可以使用块语法。干杯!
猜你喜欢
  • 2011-09-20
  • 2014-04-03
  • 2012-01-22
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多