错误“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
。