下一个按钮用户窗体 Excel VBA
Posted
技术标签:
【中文标题】下一个按钮用户窗体 Excel VBA【英文标题】:Next buttons userform Excel VBA 【发布时间】:2018-06-23 18:12:42 【问题描述】:我有一个管理表,其中有一列包含 True 和 False 列表。我正在构建一个用户表单 UI,以便用户可以单击下一步(现在 - 在进行下一步工作后构建上一个按钮),用户表单将在管理表中显示下一个 False 项目,其在 Sheet1 中的相应数据将显示在 Textbox1 中。
原因是管理表中的行 ID 与 Sheet1 相关。因此,如果 Sheet1 行 (31) 中的数据有问题,则管理表行 (31) 中的列 (13) 将为 False。
代码:
Dim n As Long
Private Sub CommandButton1_Click()
Dim LR As Long
LR = Sheets("Sheet1").Cells(Rows.count, "B").End(xlUp).row
n = 7
With Worksheets("Admin")
For i = n To LR
If .Cells(i, 13).Value = "False" Then
With Worksheets("Sheet1")
Me.TextBox1 = .Cells(i, 2).Value
Exit For
End With
End If
Next i
End With
n = i + 1
End Sub
这成功地转到下一个 False 项目并在 Textbox1 中正确显示。但是,它不会迭代到下一个..
无论我们使用什么逻辑来设置 Next,我都会假设 Previous 将是相同的?
谢谢大家。
【问题讨论】:
每次找到“False”时都必须“记住” i 的值,然后下次用户按 Next 时,在该值 +1 处开始循环您可以使用全局变量存储值。 好的 - 所以我将数据初始化为从第一行开始。并让这段代码运行并在最后添加 n + 1 。与我之前假设的逻辑相同吗?当你在两边都到达终点时会发生什么? 当你到达终点时通知用户。n = 7
If n=0 then n=7
For i = n to 7 Step -1
【参考方案1】:
你可以这样做:
Sub cmdNext_Click()
FindRow True
End Sub
Sub cmdPrev_Click()
FindRow False
End Sub
Private Sub FindRow(bForward As Boolean)
Const RW_START As Long = 7
Dim LR As Long, t As Long, dir As Long, i As Long
LR = Sheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row
'going forwards, or back?
If bForward Then
n = IIf(n = 0, RW_START, n + 1) '<< Start at top
t = LR '<< towards here
dir = 1 '<< increasing
Else
n = IIf(n = 0, LR, n - 1) '<< Start at bottom
t = RW_START '<< towards here
dir = -1 '<< decreasing
End If
For i = n To t Step dir
If Worksheets("Admin").Cells(i, 13).Value = "False" Then
Me.TextBox1 = Worksheets("Sheet1").Cells(i, 2).Value
n = i
Exit For
End If
Next i
End Sub
【讨论】:
以上是关于下一个按钮用户窗体 Excel VBA的主要内容,如果未能解决你的问题,请参考以下文章
单击保存按钮后如何在用户窗体中添加依赖于另一个组合框的excel vba组合框而不影响清除数据功能
excel VBA窗体按钮控件设置enter事件后,为啥会在启动窗体时,自动enter一次?