【问题标题】:Excel VBA - navigate through worksheet using 'next' and 'previous' buttonsExcel VBA - 使用“下一个”和“上一个”按钮浏览工作表
【发布时间】:2012-08-05 07:43:46
【问题描述】:

我有一个 Excel 表单,它从 80 行工作表的每一行中读取数据,并将每个单元格填充到一个文本框中。

初始表单的代码如下。

Private Sub UserForm_Initialize()

txtbox_revri_idnum.Text = Worksheets("Risk&Issues").Range("A4").Value
txtbox_revri_projname.Text = Worksheets("Risk&Issues").Range("B4").Value
txtbox_revri_isrefnum.Text = Worksheets("Risk&Issues").Range("C4").Value
txtbox_revri_riskrefnum.Text = Worksheets("Risk&Issues").Range("D4").Value
...
txtbox_revri_projname.SetFocus

End Sub

理想情况下,我想做的是当按下“下一个”按钮时,下一行(A5、B5、C5、D5...)被解析为一个数组,并且范围更新为下一行的数据。相反,“上一个”按钮将朝相反的方向移动(A3、B3、C3、D3...)。本质上,我想在工作表中上下导航,查看新文本框中每个单元格的整行。

我尝试过各种 VBA 组合(请记住,我是 VBA 新手,虽然有一些 Java 和 PHP 经验)。我的“下一步”按钮当前的代码如下所示。

Private Sub button_revri_next_Click()

txtbox_revri_idnum.Text = ActiveCell.Next.Text
...
End Sub

谢谢...我知道你们比我聪明多了!

【问题讨论】:

  • next_Click 处理程序应该增加一个包含行号的变量,并调用一个函数来读取该行的单元格以填充文本框。 prev_Click 处理程序应该类似地递减变量。在initialize 函数中,设置变量并调用填充例程。
  • 问什么可能是一个愚蠢的问题,但我如何捕获变量中的行号?然后将其加入到字母中,例如B+row_num, C+row_num, ...

标签: forms excel rows vba


【解决方案1】:

你可以使用.Offset来实现你想要的。

久经考验

Dim i As Long, j As Long
Dim rng As Range

Private Sub UserForm_Initialize()      
    Set rng = Worksheets("Risk&Issues").Range("A4")

    i = 0: j = 1

    txtbox_revri_idnum.Text = rng.Offset(i).Value
    txtbox_revri_projname.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_isrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_riskrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    '
    '
    txtbox_revri_projname.SetFocus
End Sub

'~~> Next Button
Private Sub button_revri_next_Click()
    i = i + 1: j = 1

    If i > (Sheets("Risk&Issues").Rows.Count - 4) Then
        MsgBox "Max rows Reached"
        Exit Sub
    End If

    txtbox_revri_idnum.Text = rng.Offset(i).Value
    txtbox_revri_projname.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_isrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_riskrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    '
    '  
    txtbox_revri_projname.SetFocus
End Sub

类似上一个按钮

'~~> Previous Button
Private Sub button_revri_prev_Click()
    i = i - 1: j = 1

    If i < 0 Then
        MsgBox "1st Row Reached"
        Exit Sub
    End If

    txtbox_revri_idnum.Text = rng.Offset(i).Value
    txtbox_revri_projname.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_isrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    txtbox_revri_riskrefnum.Text = rng.Offset(i, j).Value: j = j + 1
    '
    '  
    txtbox_revri_projname.SetFocus
End Sub

【讨论】:

  • 在实现上一个按钮时,我假设运算符将是 '-' 而不是 'next' 运算符是 '+'。但是,在执行此操作时,我收到以下错误消息:运行时错误“1004”应用程序定义或对象定义错误调试指向最后一行代码:Private Sub button_revri_prev_Click() i = i - 1: j = 1 txtbox_revri_idnum.Text = rng.Offset(i).Value txtbox_revri_projname.Text = rng.Offset(i, j).Value: j = j - 1 txtbox_revri_isrefnum.Text = rng.Offset(i, j).Value: j = j - 1 txtbox_revri_riskrefnum.Text = rng.Offset(i, j).Value: j = j - 1
  • 这是一个例子 :) 我已经更新了上面的代码以反映这些变化。
  • 非常感谢,能否请您告诉我应该对我的代码进行哪些更改,我会再试一次。
  • 这与我给出的代码相同,它基于您的帖子 1 代码。
  • 谢谢 - 导航按钮有效!一个相关的问题,当我有单元格填充文本框并且我对这些文本框进行更改时,我想按下一个“更新”按钮,该按钮将使用文本框中的新内容更新单元格......我有这个代码如下: ActiveCell.Value = txtbox_revri_projname.Value ActiveCell.Offset(0, 1) = txtbox_revri_isrefnum.Value ActiveCell.Offset(0, 2) = txtbox_revri_riskrefnum.Value... 不幸的是,它填充在当前选定单元格的任何位置,并且不是填充文本框的行...你能帮忙吗?
猜你喜欢
  • 2014-11-15
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多