我有一个运行3000 ++行数据的宏,我想创建一个排除列表,所以例如当我的if语句去查看一个范围,如果它匹配一组特定的名称就可以跳过那一行并继续前进。
示例是:
如果A栏的值为" J Smith"为了让它跳过那条线并继续保持原样,这些姓氏已经变成了史密斯'但这些可能会有所不同。
如果我从宏中删除代码,它的整个代码都可以正常工作,它没有任何问题,但是只要我添加它就可以让我对它死掉的数据有一点灵活性:
If Range("A" & r).Value = "C Hopcroft" Or "M Pyatt" Or "D Freeman" Or "D Jolley" Or "A Marsh" Or "M Heslop" Or "K Knowles" Or "J Robertson" Or "D Wood" Then
r = r + 1
Else
除了在A列中找到名称时,它会在“类型不匹配”中崩溃。但是这个名字似乎完全匹配,好像我将鼠标悬停在' If Range(" A"& r).Value它给了我正确的值,如果我从数据中删除名字就是在宏观上将完美地完成。
有什么想法吗?
我的宏代码如下:
Sub unusedMacro()
Dim lr As Long, lr2 As Long, r As Long
Set Sh1 = ThisWorkbook.Worksheets("Depot Dashboard")
Set Sh2 = ThisWorkbook.Worksheets("Summary Data")
Sh2.Select
lr = Sh2.Cells(Rows.Count, "A").End(xlUp).Row
x = 39
For r = 2 To lr
If Range("C" & r) = "TRUE" Then
If Range("N" & r).Value = Worksheets("Depot Dashboard").Range("B17") Then
If Range("A" & r).Value = "C Hopcroft" Or "M Pyatt" Or "D Freeman" Or "D Jolley" Or "A Marsh" Or "M Heslop" Or "K Knowles" Or "J Robertson" Or "D Wood" Then
r = r + 1
Else
Sh2.Cells(r, 15).Copy
Sh1.Cells(x, 7).PasteSpecial xlPasteValues 'Date
Sh2.Cells(r, 1).Copy
Sh1.Cells(x, 8).PasteSpecial xlPasteValues 'Name
Sh2.Cells(r, 28).Copy
Sh1.Cells(x, 9).PasteSpecial xlPasteValues 'Turn ID
Sh2.Cells(r, 29).Copy
Sh1.Cells(x, 10).PasteSpecial xlPasteValues 'Turn Desc
x = x + 1
End If
End If
End If
Next r
Sh1.Select
Set Sh1 = Nothing
Set Sh2 = Nothing
Set x = Nothing
End Sub
答案 0 :(得分:1)
IF
语句的IF
行必须返回Boolean
值[True,False]。就目前而言,If Range("A" & r).Value = "C Hopcroft" Or "M Pyatt" Or "D Freeman" Or "D Jolley"
中的第一个测试返回一个布尔值,但其他测试不会。要更正它,必须根据单元格中的值测试每个字符串(名称)。
例如:
If Range("A" & r).Value = "C Hopcroft" Or Range("A" & r).value = "M Pyatt" Or Range("A" & r).value) = "D Freeman" Or Range("A" & r).value = "D Jolley"
这样可以解决问题吗?