在excel vba中使用一个sub用于多个按钮

时间:2016-06-20 13:27:06

标签: excel vba excel-vba

我有一个包含客户端数据的电子表格,每行一个客户端,每行都有一个按钮,用于启动显示该客户端数据的用户窗体,然后您可以更新该客户端的数据并将其写回到该行的行客户。在我们开始使用电子表格之前,每个案例工作者都会进行过滤,以便只显示其客户端。

我想知道是否有一种方法为每行上的按钮设置一个命令按钮程序,即当您按下第6行中的按钮时,它会运行CommandButton6的程序来调用该行中的数据,当您按下按钮时在第8行,它运行一个CommandButton8的过程来调用第8行中的数据。但是两者的过程是相同的,所以我可以有一个CommandButtoni子,其中我是行号。

这是一个非常简单的程序,但我不想复制它350次!

Private Sub CommandButton1_Click()

UserForm1.TextBox1.Value = Worksheets("Sheet1").Range("C2").Value
GetData

UserForm1.Show

End Sub

3 个答案:

答案 0 :(得分:1)

在实施Rory的建议后,我认为这是最简单,最优雅的代码解决方案。如果与代码统一完成,则允许复制和粘贴按钮而无需任何进一步配置。

Sub AddVote()

' This is a simple vote tally counter.  Each time a button is clicked,
' the vote count in the third column is incremented by one.
' Imagine: first column = candidate name; second column holds form button;
' Thid column = vote count
' Create a Form button and assign this macro. Copy and paste button!

Dim rngTally As Range

' Use rngTally to point to the cell in the third column (3, in the formula)
' in the same row as the top left corner of the button.
Set rngTally = Cells(ActiveSheet.Buttons(Application.Caller).TopLeftCell.Row, 3)

' Increment the value of the cell pointed to by rngTally by 1
rngTally = rngTally + 1

End Sub

如果您不想/需要设计自定义用户表单,可以使用Form ...命令:

  1. 单击Excel中的“自定义快速访问工具栏”下拉菜单 标题栏。
  2. 选择更多命令。
  3. 如果文档将分发给其他用户,请更改"对于所有文档(默认)"文档名称的选项。
  4. 选择以从以下选项中选择命令:不在功能区中的命令。
  5. 选择表单...命令。
  6. 单击“添加”将按钮添加到右侧菜单中。
  7. 单击“确定”。
  8. 如果选择了表格中的任何单元格,请单击“表单”按钮。编辑并按Enter键。也可以使用Criteria过滤值。遗憾的是无法编辑表单,但对于窄单元格内容很有用。无需编码。

    https://support.office.com/en-us/article/Add-edit-find-and-delete-rows-by-using-a-data-form-9443c80d-66c6-4c17-b844-64aac5ae841d

答案 1 :(得分:0)

您需要一个参数化的Click处理程序,您无法在VBA中使用该处理程序。您可以将350个表单按钮分配给相同的处理程序,但是他们都会分配UserForm1.TextBox1.Value Worksheets("Sheet1").Range("C2").Value中的Selection,而实际上正在阅读您似乎想要的一些问题"行参数"。

工作表上有350个表单/ ActiveX按钮通常不是一个好主意:我试着考虑采用不同的方法。

单击按钮时,您需要行中的SelectionChanged吗?您可以以某种方式使当前/活动行突出显示(处理Selection工作表事件),并在某处(在功能区?中)使用一个按钮,该按钮可以在UserForm1.TextBox1.Value = Sheet1.Range("C" & Selection.Row).Value 下工作:< / p>

sqlsrv_query

除此之外,Rory's suggestion可以正常工作......但表格按钮并不打算像这样使用。

答案 2 :(得分:0)

为每个按钮设置一个更整洁的方式。

Old