首页 > 解决方案 > 联合范围选择失败

问题描述

我尝试选择一个变量下的联合范围,但它失败了。

Sub filter()
    'Clear prev result table
    Worksheets("main").Range("A3").CurrentRegion.Delete

    'Declare variable
    Dim selectedRows As Range
    Set selectedRows = Worksheets("contacts").Range("A1:B1")


    'Get total used range in contacts database
    numRows = Mid(Worksheets("contacts").UsedRange.Address, 9)
    For Each cell In Worksheets("contacts").Range("B1:B" & numRows)
        If cell.Value = Worksheets("main").Range("B1").Value Then
            'If true, push into array called selectedRows
            Set selectedRows = Application.Union(selectedRows, Worksheets("contacts").Range(cell.Address))
        End If
    Next

    selectedRows.Select '<------ fail here
    Copy Worksheets("main").Range("A3")
End Sub

宏失败并且错误消息说:选择方法或范围类失败。我的代码有什么问题?

标签: excelvba

解决方案


您收到错误消息,因为工作表“联系人”未处于活动状态。添加这一行:

Worksheets("contacts").Activate

像这样:

Sub filter()
    'Clear prev result table
    Worksheets("main").Range("A3").CurrentRegion.Delete

    'Declare variable
    Dim selectedRows As Range
    Set selectedRows = Worksheets("contacts").Range("A1:B1")


    'Get total used range in contacts database
    numRows = Mid(Worksheets("contacts").UsedRange.Address, 9)
    For Each cell In Worksheets("contacts").Range("B1:B" & numRows)
        If cell.Value = Worksheets("main").Range("B1").Value Then
            'If true, push into array called selectedRows
            Set selectedRows = Application.Union(selectedRows, Worksheets("contacts").Range(cell.Address))
        End If
    Next

    Worksheets("contacts").Activate

    selectedRows.Select '<------ fail here

    'this line below is incorrect
    'Copy Worksheets("main").Range("A3")
End Sub

我建议阅读这篇文章:如何避免在 Excel VBA 中使用 Select - 它将帮助您改进代码。


推荐阅读