我确信每个阅读标题的人都会说“哦不,不会再”。但在发布之前,我已经阅读了大约7-8个以前类似标题的问题,而且似乎没有人工作。所以这就是交易:
我的工作簿使用Workbook_Open
事件来显示用户表单:
Sub Workbook_Open()
UserForm1.Show
End Sub
Userform1
包含一个文本框和一个列表框。根据用户在文本框中的输入,列表框会动态填充数据。一切都好。
当用户点击列表框内的值时,我想要选择一个特定的单元格。所以我用过这个:
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
,就像有人建议的那样。
- 尝试将ListBox1_Click
事件的代码移动到标准模块内的子代码,并使用ListBox1_Click
事件调用此子代。
- 请先按照其他人的建议选择工作表。
-Tried Worksheets(1).Visible = True
正如其他人所建议的那样。
- 首先使用AppActivate Application.Caption
激活应用程序的主窗口。
- 选择滚动到所需的单元格,而不是选择:
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
事件之前,我通过分配给工作表中按钮/形状的宏显示UserForm1
,然后一切正常。
有人知道如何让Select
在我的案件中工作吗?
另一方面,我很清楚Select
会导致很多问题,所以我不会坚持下去。如果有人有另一种方法可以获得相同的结果,那我就全都听见了。
答案 0 :(得分:1)
我能够复制这个问题,首先我按照你描述的那样,制作了一个列表并从中挑选,看看是否会滚动到视图中,并且它有效。
如果我关闭了表单,请更改活动工作表。然后使用您看到的错误消息运行失败的表单。
尝试了一些我发现如果它不是活动工作表而无法选择单元格的东西(这是合乎逻辑的,用户无法点击他们正在查看的工作表上的单元格)< / p>
以下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
答案 1 :(得分:0)
如@ScotCraner和shown in the sample code on 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
。