【问题标题】:Why Array value in variable not equal in if statement?为什么if语句中变量中的数组值不相等?
【发布时间】:2021-08-30 14:11:51
【问题描述】:

此语句回答否,我可以回答是吗? Arr(0) 是否返回 2 但 2 不等于 2。我认为 A_arr 作为字符串如何将其替换为数组中的整数?

Private Sub aaa()
    Dim aaa As String
    A = "2,3,4"
    A_arr = Split(A, ",")
    MsgBox A_arr(0)

    Dim B_arr As Variant: B_arr = Array(2, 3, 4)
    MsgBox B_arr(0)

    If A_arr(0) = B_arr(0) Then
        MsgBox "YES"
    Else
        MsgBox "NO"
    End If
End Sub

【问题讨论】:

  • If Int(A_arr(0)) = B_arr(0) Then 但这只会将其作为整数返回以进行检查,而不是实际上将其转换为数组中的整数
  • 这与数组无关,与变体有关。 Dim a, b: a = 2: b = "2": Msgbox a = b => 错误。 Dim a as long, b as string: a = 2: b = "2": Msgbox a = b => 是的。
  • 非常感谢克里斯托弗。
  • 技术上是 stackoverflow.com/q/18678481/11683 的副本,但它是 not very satisfactory。
  • 这实际上是我第一次看到 same 代码在 VBA 和 VBScript 中的工作方式的重要区别。 "2" = 2 在 VBA 和 VBScript 中均为 True,但 CStr(2) = CLng(2) 在 VBA 中为 True,在 VBScript 中为 False(出于相同的变体比较原因)。

标签: excel vba


【解决方案1】:

将 A_arr 中的值替换为其整数等效项:

Option Explicit
Private Sub aaa()
Dim A As String
Dim A_arr, B_arr, C_arr
Dim I As Long

A = "2,3,4"
A_arr = Split(A, ",")
MsgBox A_arr(0)
 
B_arr = Array(2, 3, 4)
MsgBox B_arr(0)

If A_arr(0) = B_arr(0) Then
    MsgBox "YES"
Else
    MsgBox "NO"
End If

'====================================
'change A_arr from string to numbers
ReDim C_arr(LBound(A_arr) To UBound(A_arr))
For I = LBound(A_arr) To UBound(A_arr)
    C_arr(I) = CLng(A_arr(I))
Next I
A_arr = C_arr

If A_arr(0) = B_arr(0) Then
    MsgBox "YES"
Else
    MsgBox "NO"
End If

End Sub

【讨论】:

    猜你喜欢
    • 2015-07-06
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2013-09-17
    • 2020-03-13
    • 2021-08-13
    相关资源
    最近更新 更多