如何使用VBA在工作表中添加按钮,并在按下另一个按钮时分配其点击事件。

10 浏览
0 Comments

如何使用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

非常感谢任何帮助!

0
0 Comments

出现的原因:问题的提问者可能在添加事件代码时遇到了困难,想知道如何使用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

对于问题的提问者来说,这个解决方法将使整个项目更加高效。

0