【问题标题】:Delete matching SSN based on array根据数组删除匹配的 SSN
【发布时间】:2020-02-13 08:04:16
【问题描述】:

我在代码末尾调用了一个私有子。其目的是删除 SSN 与正在运行的数组匹配的任何个人。我有两张纸可以搜索,第二张效果很好,但是第一张似乎不起作用。

我尝试对其进行调试,它正在找到我关心的与数组匹配的正确数字,但是If statement 似乎没有影响它。这是我所拥有的,任何和所有的帮助将不胜感激。同样的问题是第一个If statement 不能正常工作。出于安全原因,我显然更改了 SSN。再次感谢!

Private Sub Delete_Deceased()

    Dim tw As Workbook: Set tw = ThisWorkbook
    Dim visa As Worksheet: Set visa = tw.Worksheets("Visa")
    Dim nav As Worksheet: Set nav = tw.Worksheets("Navigator")
    Dim rwCnt_visa As Long: rwCnt_visa = visa.Cells(Rows.Count, 1).End(xlUp).Row
    Dim rwCnt_nav As Long: rwCnt_nav = nav.Cells(Rows.Count, 1).End(xlUp).Row
    Dim x As Long
    Dim y As Long
    Dim Deceased() As Variant
    Deceased = Array(123456789, 234567890, 345678901, 456789012, 567890123, 678901234, _
        789012345, 890123456, 901234567)
    Dim visa_Inx As Long
    Dim nav_Inx As Long

    visa.Columns("P:P").NumberFormat = "@"  'Format the VISA SSN column as text

    For x = rwCnt_visa To 4 Step -1
        For visa_Inx = LBound(Deceased) To UBound(Deceased)
            If visa.Cells(x, 16).Value2 = Deceased(visa_Inx) Then
                Debug.Print "Row: " & x
                'visa.Rows(x).Delete shift:=xlShiftUp
            End If
        Next visa_Inx
    Next x

    For y = rwCnt_nav To 2 Step -1
        For nav_Inx = LBound(Deceased) To UBound(Deceased)
            If nav.Cells(y, 5).Value2 = Deceased(nav_Inx) Then
                nav.Rows(y).Delete shift:=xlShiftUp
            End If
        Next nav_Inx
    Next y

End Sub

【问题讨论】:

  • 假设您应该在两个循环中的If...End If 中添加一个Exit For,以便在删除行后停止遍历数组。至于您的主要问题,P 列的格式有什么不同(格式化为文本之前的格式是什么)?
  • @BigBen - 它甚至没有进入If...End If。尽管如此,我还是会将它添加到最佳实践中。在格式化之前,它只是一般。我改为Text,因为另一个If 效果很好,而且那个也是Text 格式。
  • 我看不出代码有什么问题。 Debug.Print visa.Cells(x, 16).Value2 返回什么?注意 - 您可以通过过滤然后删除可见单元格来避免循环。
  • @BigBen - 它返回我关心的值,我还添加了这个Debug.Print visa.Cells(x, 16).Value2 & " - " & Deceased(visa_Inx) 来比较它。我现在正在查看调试屏幕,它们是相同的数字,但 if 语句将其视为错误。我也尝试添加Trim,但没有奏效
  • 那么也许CLng的价值?

标签: arrays excel vba if-statement


【解决方案1】:

似乎是基础数据的问题,也许尝试在单元格值上使用CLng

 If CLng(visa.Cells(x, 16).Value2) = Deceased(visa_Inx) Then

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 2022-08-03
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2015-05-11
    • 2021-07-18
    • 2021-09-12
    相关资源
    最近更新 更多