Vba 使用某些条件选择整行时出错

Vba 使用某些条件选择整行时出错,vba,excel,Vba,Excel,我有下面的宏,它应该搜索D列,选择包含字母“b”的行 例如,为了让事情更清楚,我想选择A列中出现“stack”的整行 Sub SelectRowsb() Dim z As Range Dim rngb As Range For Each z In Intersect(ActiveSheet.UsedRange, Columns("D")) If z = "b" Then If rngb Is Nothing Then Se

我有下面的宏,它应该搜索D列,选择包含字母“b”的行

例如,为了让事情更清楚,我想选择A列中出现“stack”的整行

Sub SelectRowsb() 
    Dim z As Range 
    Dim rngb As Range 
    For Each z In Intersect(ActiveSheet.UsedRange, Columns("D")) 
        If z = "b" Then 
            If rngb Is Nothing Then Set rngb = z.EntireRow 
            Set rngb = Union(rngb, z.EntireRow) 
        End If 
    Next z 
    rngb.Select 
End Sub 
我得到运行时错误“13”类型不匹配。如果z=“b”那么

如果您有任何建议,我们将不胜感激

编辑到目前为止修改过的代码

Sub selectRowsB()
Dim varRange As String
Dim varRow As Long
varRange = ""
For varRow = 1 To ThisWorkbook.Sheets("sheet1").Range("A65000").End(xlUp).Row
    If ThisWorkbook.Sheets("sheet1").Range("A" & varRow).Value = "stack" Then
        If varRange = "" Then
            varRange = ThisWorkbook.Sheets("sheet1").Range("A" & varRow).EntireRow.Address
        Else
            varRange = varRange & "," & ThisWorkbook.Sheets("sheet1").Range("A" & varRow).EntireRow.Address
        End If
    End If
Next
If varRange <> "" Then
    ThisWorkbook.Sheets.Range(varRange).Select
End If
End Sub
Sub-selectRowsB()
作为字符串的Dim varRange
迪姆·瓦罗和他一样长
varRange=“”
对于varRow=1到该工作簿。工作表(“sheet1”)。范围(“A65000”)。结束(xlUp)。行
如果此工作簿.Sheets(“sheet1”).Range(“A”&varRow).Value=“stack”,则
如果varRange=“”,则
varRange=ThisWorkbook.Sheets(“sheet1”).Range(“A”)和varRow.EntireRow.Address
其他的
varRange=varRange&“,”和ThisWorkbook.Sheets(“sheet1”).Range(“A”)和varRow.EntireRow.Address
如果结束
如果结束
下一个
如果变量范围为“”,则
ThisWorkbook.Sheets.Range(varRange)。选择
如果结束
端接头
编辑修改后的代码v2

Sub test()

Dim varRange As String
Dim varRow As Long

varRange = ""

For varRow = 1 To ThisWorkbook.Sheets("Sheet1").Range("A65000").End(xlUp).Row

If ThisWorkbook.Sheets("Sheet1").Range("A" & varRow).Value = "insert_job" Then

    If varRange = "" Then

        varRange = ThisWorkbook.Sheets("Sheet1").Range("A" & varRow).EntireRow.Address

    Else

        varRange = varRange & "," & ThisWorkbook.Sheets("Sheet1").Range("A" & varRow).EntireRow.Address

    End If

End If

Next

If varRange <> "" Then

   ThisWorkbook.Sheets("Sheet1").Range(varRange).Select

End If
   End Sub
子测试()
作为字符串的Dim varRange
迪姆·瓦罗和他一样长
varRange=“”
对于varRow=1到该工作簿。工作表(“Sheet1”)。范围(“A65000”)。结束(xlUp)。行
如果此工作簿.Sheets(“Sheet1”).Range(“A”&varRow).Value=“插入作业”,则
如果varRange=“”,则
varRange=ThisWorkbook.Sheets(“Sheet1”).Range(“A”)和varRow.EntireRow.Address
其他的
varRange=varRange&“,”和ThisWorkbook.Sheets(“Sheet1”).Range(“A”)和varRow.EntireRow.Address
如果结束
如果结束
下一个
如果变量范围为“”,则
ThisWorkbook.Sheets(“Sheet1”).Range(变量范围)。选择
如果结束
端接头
子测试()
作为字符串的Dim varRange
迪姆·瓦罗和他一样长
varRange=“”
对于varRow=1到该工作簿。工作表(“Sheet1”)。范围(“A65000”)。结束(xlUp)。行
如果此工作簿.Sheets(“Sheet1”).Range(“A”&varRow).Value=“stack”,则
如果varRange=“”,则
varRange=ThisWorkbook.Sheets(“Sheet1”).Range(“A”)和varRow.EntireRow.Address
其他的
varRange=varRange&“,”和ThisWorkbook.Sheets(“Sheet1”).Range(“A”)和varRow.EntireRow.Address
如果结束
如果结束
下一个
如果变量范围为“”,则
ThisWorkbook.Sheets(“Sheet1”).Range(变量范围)。选择
如果结束
端接头

抱歉,我刚刚登录,因为它一直在困扰我,这段代码已经过测试,在我的机器上运行良好

好的,那么我应该把它改成什么?对不起,我从互联网上得到了这个新的密码。叹气。你删除了我今天早上否决的帖子,并在谷歌上搜索了一些你似乎不太了解的内容:/我猜你只是添加了
如果z=“b”,那么
并希望它能起作用?请仔细研究代码。当你说
contain
时,你的意思是,“b”是单元格中唯一的字母,还是它是较长字符串的一部分?@ScottCraner,“b”是唯一的字母。我应该指定要搜索的确切字符串。因为在下面,当D列=B列时,您回避了您想要的事实。
我正在查找“B”或B列中的任何值。所以我很困惑,是D栏中的字母“b”还是D栏=b栏?谢谢你的回答。我得到编译错误:找不到数据成员的方法。注意:我正在寻找“b”或b列中的任何值,我的活动工作表是sheet1。我不断得到相同的错误。很奇怪。我改变了b的值,我只是用b作为样本。但仍然不应该影响它。至于以上我完全是指我在d列中寻找“b”。很抱歉为了方便起见,假设我在A列中查找“stack”。抱歉,遗漏了一张表reference@AragDG,你好,Aran,它没有错误,但什么也没有发生。lol。结果是否假设选择所有这些行?它没有选择任何内容,我会再试一次。它会根据您最近的评论选择“堆栈”一词出现在A列中的行
Sub test()

Dim varRange As String
Dim varRow As Long

varRange = ""

For varRow = 1 To ThisWorkbook.Sheets("Sheet1").Range("A65000").End(xlUp).Row

If ThisWorkbook.Sheets("Sheet1").Range("A" & varRow).Value = "stack" Then

    If varRange = "" Then

        varRange = ThisWorkbook.Sheets("Sheet1").Range("A" & varRow).EntireRow.Address

    Else

        varRange = varRange & "," & ThisWorkbook.Sheets("Sheet1").Range("A" & varRow).EntireRow.Address

    End If

End If

Next

If varRange <> "" Then

    ThisWorkbook.Sheets("Sheet1").Range(varRange).Select

End If

End Sub