错误“1004”:select范围类失败的方法

我相信每个读过标题的人都会说“不,不是”。 但是在发表这篇文章之前,我已经阅读了大约7-8个类似标题的问题,似乎没有人能够工作。 所以这是交易:

我的工作簿使用Workbook_Open事件来显示一个用户窗体:

 Sub Workbook_Open() UserForm1.Show End Sub 

Userform1包含一个文本框和一个列表框。 根据用户在文本框中input的内容,dynamic地为列表框填充数据。 到目前为止一切正常。

当用户单击列表框中的一个值时,我想要select一个特定的单元格。 所以我用这个:

 Private Sub ListBox1_Click() Dim Cell As Range With ThisWorkbook.Worksheets(1) Set Cell = .Range("C3", .Cells(.Rows.Count, 3).End(xlUp)).Find(UserForm1.ListBox1.Text, LookIn:=xlValues) .Range(Cell, Cell.Offset(0, 2)).Select End With End Sub 

但是和我之前的许多其他人一样,我无法正确Select工作,并且此代码给出了错误,如标题。

我尝试了几件事情来使这个代码工作。

-Tried Application.GoTo ,用它来代替Select ,就像有人build议的那样。

– 尝试将ListBox1_Click事件的代码移动到标准模块内的子元素,并使用ListBox1_Click事件调用该子ListBox1_Click

– 尽量先按其他人的build议select工作表。

Worksheets(1).Visible = True正如其他人所build议的。

– 尝试使用AppActivate Application.Caption激活应用程序的主窗口。

– 尝试滚动到所需的单元格而不是select:

 Private Sub ListBox1_Click() Dim foundRow As Integer With ThisWorkbook.Worksheets(1) foundRow = .Range("C3", .Cells(.Rows.Count, 3).End(xlUp)).Find(UserForm1.ListBox1.Text, LookIn:=xlValues).Row End With ActiveWindow.ScrollRow = foundRow - 1 End Sub 

我也尝试了其他不太重要的改变,但是我坚持不懈。 有趣的是,在使用Workbook_Open事件之前,我已经通过一个macros分配给工作表中的button/形状显示UserForm1 ,并且一切工作正常。

有谁知道我将如何做我的情况下Select工作?

另一方面, Select很好地理解了Select引起了很多问题,所以我并没有被卡住。 如果有人有另一种方式来获得相同的结果,我全部耳朵。

我能够复制这个问题,首先我遵循你所描述的,做了一个清单,并从中挑选出来,看看是否会滚动查看,它的工作。

如果我closures表格,改变活动表格。 然后运行失败的表单,并显示错误消息。

尝试一些我发现的东西,如果它不是活动工作表(这是合乎逻辑的,用户不能点击他们正在查看的工作表上的单元格)

下面的Activate行应该修复它。

 Private Sub ListBox1_Click() Dim Cell As Range With ThisWorkbook.Worksheets(1) Set Cell = .Range("C3", .Cells(.Rows.Count, 3).End(xlUp)).Find(UserForm1.ListBox1.Text, LookIn:=xlValues) ThisWorkbook.Worksheets(1).Activate .Range(Cell, Cell.Offset(0, 2)).Select End With End Sub 

正如@ScotCraner指出的那样,如MSDN上的示例代码所示,在使用/显示它之前,您应该首先检查是否有东西被发现。

以下应该完美地工作:

 Private Sub ListBox1_Click() Dim Cell As Range Application.DisplayStatusBar = True With ThisWorkbook.Worksheets(1) Set Cell = .Range("C3", .Cells(.Rows.Count, 3).End(xlUp)).Find(UserForm1.ListBox1.Text, LookIn:=xlValues, LookAt:=xlWhole) If Not Cell Is Nothing Then Application.StatusBar = "Found " & UserForm1.ListBox1.Text .Activate .Range(Cell, Cell.Offset(0, 2)).Select Else Application.StatusBar = "Couldn't find " & UserForm1.ListBox1.Text End If End With End Sub 

请注意,您正在使用UserForm1.ListBox1.Text不考虑UserForm1.ListBox1.MultiSelect