结束(xlUp)仅在工作表处于活动状态时有效

时间:2013-05-01 08:52:41

标签: excel excel-vba range vba

我有以下代码

Set wb = ThisWorkbook`

ComboBox7.RowSource = wb.Worksheets("Sheet5").Range("A2", _
Range("A65536").End(xlUp)).Address

如果我没有在此行之前放置wb.Sheets("Sheet5").Select,则此代码会抛出错误

"Application defined or object-defined error"

我希望此代码能够在不选择Sheet5的情况下工作。

如果我放ComboBox7.RowSource = wb.Worksheets("Sheet5").Range("A2:A7").Address,那么它可以正常工作而不选择sheet5。

有没有办法在不选择表单的情况下使用End(xlUp)

2 个答案:

答案 0 :(得分:5)

是的,这是可能的。

逻辑:找到最后一行,然后使用它创建一个可以分配给组合框的范围。

这是你在尝试的吗?

Private Sub CommandButton1_Click()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim lRow As Long
    Dim rng As Range

    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet5")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row
        Set rng = .Range("A1:A" & lRow)
    End With

    ComboBox5.RowSource = rng.Address
End Sub

答案 1 :(得分:-1)

另一件事就是在一行中做到这一点

Private Sub CommandButton1_Click()
Set wb = ThisWorkbook
Set ws = wb.sheets("sheets5")

ComboBox7.RowSource = ws.Range("A2", ws.Range("A65536").End(xlUp)).Address

第二个范围认为它是在活动工作表中工作,否则你需要告诉它。

使用With更好,但如果您为了完成某项工作而快速编写代码,则这是一行。