长时间用户,第一次询问此处。 全新到VBA并挣扎了一下。我已经在每篇专门介绍Excel VBA中的下一个记录按钮功能的帖子中查看并尝试过建议,但似乎无法找到适合我情况的解决方案。
我创建了一个用户表单,旨在帮助用户查看Excel电子表格中的非常宽的数据(如果需要/有帮助,可以提供工作表示例)。由于用户要求,表单需要在选择整行时启动(这是扭曲)。我设法让大多数控件按预期运行,但Next和Previous按钮除外。我的麻烦似乎是从工作表中获取'txt.rownum'(Target.Row)> SelectionChange例程到按钮。以下是表格的图形:
在工作表例程中,表单将当前行捕获为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)...
我在Next按钮后面的当前代码如下所示:
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)传递给Next按钮,以便它正确地从当前行向下移动到下一个记录,并且显示从下一行的数据。电子表格?
提前感谢您的帮助和耐心 - 非常感谢!
答案 0 :(得分:2)
一些代码建议:
这样,您就不再需要在两个函数之间复制代码。
Public RowNumber as Integer
Sub PopulateForm()
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)...
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A2:CE1000")) Is Nothing Then // Whatever This Is?
If Target.Address = Target.EntireRow.Address Then
RowNumber = Target.Row
Call PopulateForm
End If
End If
End Sub
Private Sub CommandButton2_Click()
RowNumber = RowNumber + 1
Call PopulateForm
End Sub