将特定单元格中的数据作为电子邮件中的文本加载

时间:2015-10-12 20:50:42

标签: excel excel-vba email outlook.application vba

我正在尝试通过点击按钮生成一封电子邮件,并让它从该按钮所在行的第一个单元格中加载数据(作为电子邮件的主题行)。

示例:在第22行中,我在第X列放置一个按钮,单击该按钮时,它会使用单元格A22作为我的电子邮件的主题创建一封电子邮件。

我知道如何通过直接将主题行数据输入到脚本中来实现此目的,但我想避免为电子表格中的大量行创建数百个脚本。

以下是我目前的手动输入方法:

Private Sub CommandButton1_Click()

          Dim outobj, mailobj
          Set outobj = CreateObject("Outlook.Application")
          Set mailobj = outobj.CreateItem(0)

            With mailobj
            .To = "xxxxxxxxx@xxxxxxxx.com"
            .Subject = "XXXXXXXXXXXX"
            .Body = "XXXXXXXXXXXXXXXXXXXXXXX"
            .Display
          End With
          'Clear the memory
          Set outobj = Nothing
          Set mailobj = Nothing

End Sub

我只需要在相应的按钮行中填充A列中的主题。 我想我需要创建另一个对象,但我不确定正确的代码是什么,我不知道如何将脚本拉为“.subject =”。

以下是我尝试过的基本数据:

►ActiveSheet.Buttons(Application.Caller).TopLeftCell

►“按下按钮的行:”& ActiveSheet.ShapesApplication.Caller).TopLeftCell.Row

►DimSubjectTo作为字符串
SubjectTo = Cells(XXX,XXX).Value
.subject = SubjectTo

网上还有其他一些建议。

所有人都使用原始剧本,但我无法弄清楚如何将它们融入到我想要做的事情中。

我甚至尝试使用Form Shape而不是ActiveX Button。

1 个答案:

答案 0 :(得分:0)

从您的代码示例中,您似乎使用的是 ActiveX 样式按钮。我知道无法从ActiveX按钮确定行号,但如果切换到表单控件类型按钮,则检索行很容易。

Sub Button2_Click()
    MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
End Sub

对于大量行,每行一个按钮是不切实际的。您可以使用一个依赖于所选单元格或活动单元格的按钮来标识该行。另一种可能性是Worksheet.BeforeDoubleClick事件宏,只要双击其中一行(因此根本没有按钮),就会打开电子邮件。