【发布时间】: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