【问题标题】:Separating Command Buttons and VBA code in Excel在 Excel 中分离命令按钮和 VBA 代码
【发布时间】:2017-04-22 15:18:07
【问题描述】:

我有一个包含 100 多行数据的 Excel 工作表。当用户在他们的行中完成填写信息时,行末尾有一个命令按钮,它会自动向特定的电子邮件帐户发送一封电子邮件,其中包含该行中的信息。

我用 VB 代码插入了几个命令按钮来发送电子邮件,效果很好!我遇到的问题是我无法分隔命令按钮,即每个按钮的代码应该特定于它所在的行;当我使用包含该命令按钮信息的单元格位置更改代码时,它会将所有命令按钮更改为该信息。

我知道答案一定很简单,但我画了一个完整的空白。感谢任何帮助!

这是我的代码:

Option Explicit

Private Sub CommandButton2_Click()

On Error GoTo ErrHandler

    ' SET Outlook APPLICATION OBJECT.
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")

    ' CREATE EMAIL OBJECT.
    Dim objEmail As Object
    Set objEmail = objOutlook.CreateItem(olMailItem)

    With objEmail
        .to = "[email address].com"
        .Subject = Range("A3")
        .Body = "[Message]"
        .Send        ' SEND THE MESSAGE.
    End With

    ' CLEAR.
    Set objEmail = Nothing:    Set objOutlook = Nothing

ErrHandler:
    '
End Sub

每一行都应该有相同的命令,只是命令按钮编号发生变化,.Subject = Range 条目发生变化。

我做错了,因为那不起作用。

【问题讨论】:

  • 您能否为其中一个命令按钮发布一些示例代码?
  • 使用命令按钮发布您的工作表屏幕截图并发布代码。
  • 这里有一个提示:不要为此使用命令按钮。只需将单元格着色为看起来像一个按钮并挂钩Selection Changed 事件。您还可以挂钩双击事件,以便人们在单击“发送”单元格或引入简单的确认对话框时不会意外发送电子邮件。

标签: vba excel


【解决方案1】:

我在评论中说,简单地将单元格着色为看起来像按钮并让用户单击单元格以发送电子邮件可能更容易 - 然后您可以简单地使用特定行的偏移量,但如果您坚持使用命令按钮,很简单。

将您当前的代码放入一个接受范围参数的新子例程中。

然后,添加您的按钮,并将每个按钮链接到具有不同范围的自己的代码。

Option Explicit

Private Sub CommandButton3_Click()
SendEmail Range("A3")
End Sub

Private Sub CommandButton4_Click()
SendEmail Range("A4")
End Sub    

Private Sub CommandButton5_Click()
SendEmail Range("A5")
End Sub

`...

Sub SendEmail(TheRange as Range)
    On Error GoTo ErrHandler
    ' SET Outlook APPLICATION OBJECT.
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")
    ' CREATE EMAIL OBJECT.
    Dim objEmail As Object
    Set objEmail = objOutlook.CreateItem(olMailItem)
    With objEmail
        .to = "[email address].com"
        .Subject = TheRange 'Change this line
        .Body = "[Message]"
        .Send        ' SEND THE MESSAGE.
    End With
    ' CLEAR.
    Set objEmail = Nothing:    Set objOutlook = Nothing
ErrHandler:
End Sub

如果您更喜欢使用SelectionChanged 事件,您可以这样做。

然后,如果您想添加更多“按钮”,只需更新[C4:C8]

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
If Not Intersect(Target, [C4:C8]) Is Nothing Then
    SendEmail Range("A" & Target.Row)
    'Optionally select the subject we sent so we can re-click
    'You can choose any other cell not in our event range
    Range("A" & Target.Row).Select
End If
End Sub

【讨论】:

    猜你喜欢
    • 2015-06-11
    • 1970-01-01
    • 2018-05-25
    • 2012-03-23
    • 1970-01-01
    • 2012-03-25
    • 2012-01-08
    • 2022-08-12
    • 1970-01-01
    相关资源
    最近更新 更多