【发布时间】:2018-01-15 23:46:36
【问题描述】:
老用户,第一次来这里询问。 全新的 VBA 并且有点挣扎。我在 Excel VBA 中专门针对“下一个记录”按钮功能的每篇文章中都查看并尝试了建议,但似乎找不到适合我情况的解决方案。
我创建了一个用户表单,旨在帮助用户查看 Excel 电子表格中非常宽泛的数据(如果需要/有帮助,可以提供工作表示例)。由于用户要求,表单需要在选择整行时启动(这是扭曲)。我已经设法让大多数控件按预期运行,除了 Next 和 Previous 按钮。我的麻烦似乎在于从 Worksheet > SelectionChange 例程获取 'txt.rownum' (Target.Row) 到按钮。这是表格的图形:
在工作表例程中,表单将当前行捕获为UserForm1.txt_rownum = Target.Row。这是确认已选择整行并填充表单的代码的第一部分:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A2:CE1000")) Is Nothing Then
If Target.Address = Target.EntireRow.Address Then
'yes, full row is selected
UserForm1.txt_prop_name = Cells(Target.Row, 1)
UserForm1.txt_alt_prop_name = Cells(Target.Row, 2)
UserForm1.txt_client_prop_code = Cells(Target.Row, 3)
UserForm1.txt_rownum = Target.Row
UserForm1.txt_mailability_score = Cells(Target.Row, 4)
UserForm1.txt_ad_descr = Cells(Target.Row, 5)...
“下一步”按钮后面的当前代码如下所示:
Dim currentrow As Long
'Next button
Private Sub CommandButton2_Click()
Dim lastrow As Long
lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
currentrow = currentrow + 1
UserForm1.txt_prop_name = Cells(currentrow, 1)
UserForm1.txt_alt_prop_name = Cells(currentrow, 2)
UserForm1.txt_client_prop_code = Cells(currentrow, 3)
End Sub
单击“下一步”按钮时,表单一次正确地向下索引一行,但它从 A1 开始,而不是从表单显示的当前行开始。如何将 txt.rownum(或 Target.Row)传递给“下一步”按钮,以便它正确地从当前行向下移动到下一条记录并显示生成的下一行数据电子表格?
提前感谢您的帮助和耐心等待 - 非常感谢!
【问题讨论】:
-
currentrow = UserForm1.txt_rownum + 1?或者只是将“下一步”按钮更改为Rows(UserForm1.txt_rownum + 1).Select(我认为这会触发Worksheet_SelectionChange事件并因此填充所有内容)? -
您最好使用标签而不是文本框作为行号(或至少禁用文本框)
-
最好使用 UserForm 的实例作为表单的蓝图,例如通过
Dim myForm As UserForm1和Set myForm = New UserForm1。相反,如果您直接引用 Userform,则您正在处理一个特殊的类,该类基本上旨在作为原型处理。您可以在 stackoverflow.com/questions/47357708/… 找到不同的方法来处理无模式 UF(允许在应用程序中执行操作)。这可以向您介绍课堂编程,但还包括一个您可以适应的工作表事件(@Excelosaurus)示例。