End(xlUp)仅在工作表处于活动状态时才起作用

我有以下代码

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"

我希望这个代码在没有selectSheet5的情况下工作。

如果我把ComboBox7.RowSource = wb.Worksheets("Sheet5").Range("A2:A7").Address然后它工作正常,没有selectsheet5。

有没有什么办法可以在不select工作表的情况下使用End(xlUp)

对的,这是可能的。

逻辑 :find最后一行,然后使用它来创build一个可以分配给combobox的范围。

这是你正在尝试?

 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 

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

 Private Sub CommandButton1_Click() Set wb = ThisWorkbook Set ws = wb.sheets("sheets5") ComboBox7.RowSource = ws.Range("A2", ws.Range("A65536").End(xlUp)).Address 

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

使用With比较好,但是如果你为了完成某些事情而快速编写代码,这是一条线。