下一个和上一个按钮 - 打破我的精神状态

Posted

技术标签:

【中文标题】下一个和上一个按钮 - 打破我的精神状态【英文标题】:Next and Previous Button - Breaking my mental state 【发布时间】:2020-03-12 02:20:06 【问题描述】:

我已经尝试了几天来获得一个在 excel VBA 表单中工作的下一步按钮。我有一个包含多个项目的表单,包括一些组合框。我反复尝试让代码正常工作,这样我就可以添加下一个项目按钮和上一个项目按钮。我希望这些按钮搜索表格数据并显示上一组数据和下一组数据。最终,一旦按钮工作,就可以编辑这些。上一个按钮将我带到第一组数据,但不会循环,下一个按钮在我的行名中出现对象错误(txt.name.text = cells(currentrow,1) 代码。获取这些按钮的任何帮助或帮助工作将不胜感激。

Private Sub cmdnext_Click()
  Dim lastrow As Long
  Dim currentrow As Long

lastrow = Sheet1.Cells(Rows.Count, 2).End(xlUp).Row

currentrow = currentrow + 2

txtname = Cells(currentrow, 1)
txtposition = Cells(currentrow, 2)
txtassigned = Cells(currentrow, 3)
cmbsection.Text = Cells(currentrow, 4)
txtdate.Text = Cells(currentrow, 5)
    txtjoint = Cells(currentrow, 7)
txtDAS.Text = Cells(currentrow, 8)
txtDEROS.Text = Cells(currentrow, 9)
txtDOR.Text = Cells(currentrow, 10)
txtTAFMSD.Text = Cells(currentrow, 11)
txtDOS.Text = Cells(currentrow, 12)
txtPAC.Text = Cells(currentrow, 13)
ComboTSC.Text = Cells(currentrow, 14)
txtTSC.Text = Cells(currentrow, 15)
txtAEF.Text = Cells(currentrow, 16)
txtPCC.Text = Cells(currentrow, 17)
txtcourses.Text = Cells(currentrow, 18)
txtseven.Text = Cells(currentrow, 19)
txtcle.Text = Cells(currentrow, 20)

If currentrow = lastrow Then
MsgBox "Why wont this work"
End If
End Sub

Private Sub CommandButton6_Click()
Dim lastrow As Long
 Dim currentrow As Long

 If lastrow = currentrow Then
   MsgBox "this doesn work yet"
 End If

 currentrow = currentrow - 2

 txtname.Text = Cells(currentrow, 1)
 txtposition = Cells(currentrow, 2)
 txtassigned = Cells(currentrow, 3)
 cmbsection.Text = Cells(currentrow, 4)
 txtdate.Text = Cells(currentrow, 5)
 txtjoint = Cells(currentrow, 7)
 txtDAS.Text = Cells(currentrow, 8)
 txtDEROS.Text = Cells(currentrow, 9)
 txtDOR.Text = Cells(currentrow, 10)
 txtTAFMSD.Text = Cells(currentrow, 11)
 txtDOS.Text = Cells(currentrow, 12)
 txtPAC.Text = Cells(currentrow, 13)
 ComboTSC.Text = Cells(currentrow, 14)
 txtTSC.Text = Cells(currentrow, 15)
 txtAEF.Text = Cells(currentrow, 16)
 txtPCC.Text = Cells(currentrow, 17)
 txtcourses.Text = Cells(currentrow, 18)
 txtseven.Text = Cells(currentrow, 19)
 txtcle.Text = Cells(currentrow, 20)

 End Sub

【问题讨论】:

【参考方案1】:

好吧,我可以告诉你为什么CommandButton6_Click 不起作用。 currentrow 的初始值为零,然后减去 2 并将其用作单元格行索引。

使用Cells(-2, something)不会有好的结局。


而且,现在我仔细观察,您对cmdnext_Click 也有同样的问题。因为每次运行此函数时currentrow 都从零开始,并且您向其添加两个,所以您总是得到Cells(2,something)


我认为您可能需要找到一种方法使currentrow 持久化,这样每次单击按钮时它就不会被初始化为零。

【讨论】:

【参考方案2】:

类似这样的:

Dim currentrow As Long '<< you should set a value for this
                       '   when your form first loads

Private Sub LoadRow()
    With Sheet1.Rows(currentrow)
        txtname = .Cells(1)
        txtposition = .Cells(2)
        txtassigned = .Cells(3)
        '... etc etc
        txtcle.Text = .Cells(20)
    End With
End Sub

Private Sub cmdnext_Click()
    If currentrow < Sheet1.Cells(Rows.Count, 2).End(xlUp).Row Then
        currentrow = currentrow + 2
        LoadRow
    Else
        MsgBox "Already at end"
    End If
End Sub

Private Sub cmdPrev_Click()
    If currentrow > 2 Then
        currentrow = currentrow - 2
        LoadRow
    Else
        MsgBox "Already at top"
    End If
End Sub

无需重复所有加载代码。

【讨论】:

谢谢。我试过了,它没有给我任何错误,但上一个按钮只返回到第一行。我试图让它循环遍历所有行。有什么建议吗? 是的 - 尝试调试,看看哪里出了问题。您可能需要在表单加载时添加一些代码,将currentRow 定位到您希望加载的第一个记录的任何位置。 谢谢它的工作。现在开始使用更新按钮。

以上是关于下一个和上一个按钮 - 打破我的精神状态的主要内容,如果未能解决你的问题,请参考以下文章

将下一个和上一个按钮添加到我的图像滑块

编码下一个和上一个按钮

滚动库中的下一个和上一个按钮中的错误

colorbox:如何禁用下一个和上一个按钮

将下一个和上一个按钮添加到 ListView

如何处理 AVPlayerViewController 中的下一个和上一个按钮?