如何使用VBA在工作表中添加按钮,并在按下另一个按钮时分配其点击事件。
如何使用VBA在工作表中添加按钮,并在按下另一个按钮时分配其点击事件。
我正在尝试为一家当地药店自动化一个季度病人报告,并将其转移到Excel中。自动化的一部分是报告封面上的添加病人按钮,该按钮会进入一个相关信息的表单。表单上的确定按钮将信息格式化到一个名为病人姓名的新表中。该按钮还会在病人表中添加两个新创建的按钮,即删除和编辑按钮。我可以创建并放置这些按钮,但是我找不到任何办法为这些按钮分配点击事件,因为它们在每个页面上都被视为新对象。
我已经将按钮的主要代码移动到工作簿本身中,所以我实际上只需要在按钮的点击事件中调用那个方法,但是我找不到任何方法来通过VBA访问新按钮的点击事件,而且由于我需要在VBA本身中调用一个方法,所以我不确定是否可以使用宏(请注意,我对Excel宏并不是非常熟悉,所以如果解决方案在宏中,我也可以使用)。
以下是实例化并放置/调整新表上删除按钮的代码:
Dim btn As OLEObject Set btn = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False) With btn .Name = "deletePatientButton" .Object.Caption = "删除病人" .Top = 5.25 .Left = 290.25 .Width = 75 .Height = 24.75 .PrintObject = False
End With
以下是放置在工作簿代码本身的删除按钮的主要方法(请注意,它实际上只是调用另一个确认表单,所以这可能是多余的,但是为了测试,我希望将其放在工作簿部分,因为我认为它具有最大的范围):
Public Sub mainDeleteButton(sheet As Worksheet) Dim confirmer As New deleteConfirmationForm sheet.Activate confirmer.Show End Sub
最后,这是我希望能够放置的点击事件示例,或者用其他解决方案替换:
Private Sub deletePatientButton_Click() Call ThisWorkbook.mainDeleteButton(Me) End Sub
非常感谢任何帮助!
出现的原因:问题的提问者可能在添加事件代码时遇到了困难,想知道如何使用VBA在工作表中添加按钮并在按下另一个按钮时分配其点击事件。
解决方法:可以通过编程方式将事件代码添加到工作表模块中。但是,更容易的方法是将按钮放在已经具有事件代码的模板工作表上。只需将模板复制到新工作表中,重命名它,并添加患者数据。
' 代码示例 Sub AddButton_Click() Dim ws As Worksheet Dim btn As Button ' 创建新的工作表 Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) ws.Name = "New Sheet" ' 在新工作表上添加按钮 Set btn = ws.Buttons.Add(10, 10, 100, 30) btn.Name = "Button1" btn.Text = "Click Me" ' 分配点击事件 With ws.CodeModule ' 在工作表模块中添加事件过程 .InsertLines .CountOfLines + 1, "Private Sub Button1_Click()" .InsertLines .CountOfLines + 1, " ' 执行点击事件的代码" .InsertLines .CountOfLines + 1, " MsgBox ""Button Clicked!""" .InsertLines .CountOfLines + 1, "End Sub" End With End Sub
对于问题的提问者来说,这个解决方法将使整个项目更加高效。