【问题标题】:VBA If statement inside for loop is not evaluating truefor循环内的VBA If语句未评估true
【发布时间】:2018-09-11 20:50:09
【问题描述】:

我正在开发一个使用多维数组来保存多列数据的宏。然后,宏将数组值放入新工作簿中。一切正常,除了一个 if 语句。这是 if 语句的子程序

Sub push(toWorkbook As Workbook, ByRef code() As Variant)
'activeBook = "TempEDI.xlsm"

'Workbooks(activeBook).Activate 'set new workbook as active book
Dim newSheet As Worksheet
Set newSheet = toWorkbook.Sheets(1)
h = 2
f = 0
g = 0
newSheet.Cells(1, 1).Value = "Customer"
newSheet.Cells(1, 2).Value = "Invoice #"
newSheet.Cells(1, 6).Value = "ASN"
For i = 0 To UBound(code)
    newSheet.Cells(h, 1).Value = code(i, 0)
    newSheet.Cells(h, 2).Value = code(i, 1)
    If code(f, 2) = code(i, 1) Then
        newSheet.Cells(h, 6).Value = code(f, 2)
        f = f + 1
    End If
    If code(g, 3) = code(i, 1) Then '****** <--- THIS IS THE STATEMENT 
        newSheet.Cells(h, 3).Value = code(g, 3)
        newSheet.Cells(h, 4).Value = code(g, 4)
        newSheet.Cells(h, 5).Value = code(g, 5)
        g = g + 1
    End If
    h = h + 1
Next i
MsgBox code(g, 3) & " " & code(g, 1)
End Sub

看,我的第一个 if 语句按其应有的方式工作,但第二个永远不会评估为真,即使我知道 code(0,3) = code(0,1) 的事实。我什至在子例程的末尾放了一个 MsgBox 来吐出两个值,它们是相同的。知道发生了什么吗?为什么这个陈述永远不会评估为真?任何帮助、想法或指针表示赞赏。提前致谢。

【问题讨论】:

  • 这两个值是否完全相同?可以有一个额外的空间("text" vs "text ")或不同的大小写吗? ("Text" vs "text")?
  • 消除@cybernetic.nomad 的评论,也许可以试试If Trim(code(g, 3)) = Trim(code(i, 1)) Then
  • @cybernetic.nomad 你叫它,谢谢。
  • @dwirony 现在使用 trim 并且效果很好,感谢您告诉我有关 Trim() 的信息

标签: arrays excel vba multidimensional-array


【解决方案1】:

如果code()是二维的,那么试试:

For i = Lbound(code,1) To UBound(code,1)

可能还有其他问题。

【讨论】:

    【解决方案2】:

    正如@cybernetic.nomad 所说 代码(0,3)中有空格。解决方案正如@dwirony 所说,像这样使用修剪功能

    If Trim(code(g, 3)) = Trim(code(i, 1)).
    为了高枕无忧,我建议对任何涉及有未知空白风险的数据的内容使用修剪。 在此处使用修剪更新代码:

    Sub push(toWorkbook As Workbook, ByRef code() As Variant)
    'activeBook = "TempEDI.xlsm"
    
    'Workbooks(activeBook).Activate 'set new workbook as active book
    Dim newSheet As Worksheet
    Set newSheet = toWorkbook.Sheets(1)
    h = 2
    f = 0
    g = 0
    newSheet.Cells(1, 1).Value = "Customer"
    newSheet.Cells(1, 2).Value = "Invoice #"
    newSheet.Cells(1, 6).Value = "ASN"
    For i = 0 To UBound(code)
        newSheet.Cells(h, 1).Value = code(i, 0)
        newSheet.Cells(h, 2).Value = code(i, 1)
        If code(f, 2) = code(i, 1) Then
            newSheet.Cells(h, 6).Value = code(f, 2)
            f = f + 1
        End If
        If Trim(code(g, 3)) = Trim(code(i, 1)) Then '****** <--- THIS IS THE STATEMENT 
            newSheet.Cells(h, 3).Value = code(g, 3)
            newSheet.Cells(h, 4).Value = code(g, 4)
            newSheet.Cells(h, 5).Value = code(g, 5)
            g = g + 1
        End If
        h = h + 1
    Next i
    MsgBox code(g, 3) & " " & code(g, 1)
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      相关资源
      最近更新 更多