【问题标题】:generate automatic statement from an excel list to multiple recipient从excel列表生成自动报表给多个收件人
【发布时间】:2016-05-27 23:06:40
【问题描述】:

当我的同事参加将在国外举行的会议或会议时,他们有权获得少量津贴。每个月计算每个津贴并在excel上进行批量付款如下(图片) 在这个列表中,我正在寻找一种方法来自动为列表中的每个员工创建单独的报表(其中包含一个或多个交易)。

有谁知道我应该从哪里开始,直到可以自动生成一堆报表以通过电子邮件发送给列表中的每个员工?

语句应包含:

全名 采购订单 排序代码 帐号 金额(欧元) 金额(英镑) 汇率 用户参考 底部可能有一两句话(使用的付款条款和政策)

提前感谢您的帮助。 绝对值

【问题讨论】:

  • (1) 如果你没看错,你会注意到我写了“有谁知道“i”应该从哪里开始”,而没有人可以为我做! (2) 如果不了解代码的作用,我不会使用代码。我建议您忽略您不准备提供帮助的帖子。

标签: excel automation excel-formula vba


【解决方案1】:

编辑:下面将只接受个别交易并将其通过电子邮件发送给用户。最好使用用户表单将完整的语句组合在一起,这样您就可以控制要包含的数据。我建议初学者 VBA 课程(检查 w3 学校)以熟悉基础知识,然后可以调整以下内容以完成您正在寻找的内容。

在 Excel 中点击Alt + F11,然后双击此工作表,然后粘贴以下代码:

Sub sendemails()

Application.DisplayAlerts = False

Dim i As Long
i = 7

Dim UserNameCol As String
UserNameCol = "U"

Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")

Do Until Len(Cells(i, UserNameCol).Value) = 0 'will stop when blank cell appears

'Set up all the variables you need for your emails and fill them
    Dim UserName As String
    Dim FullName As String
    Dim PO As String
    Dim SortCode As String
    Dim AccountNum As String
    Dim Euro As String
    Dim Pound As String
    Dim ExchRate As String

'i is the counter to move through the list and the username col is U
    UserName = Cells(i, UserNameCol).Value
    FullName = Cells(i, UserNameCol).Offset(, -19).Value
    SortCode = Cells(i, UserNameCol).Offset(, -16).Value
    AccountNum = Cells(i, UserNameCol).Offset(, -15).Value
    PO = Cells(i, UserNameCol).Offset(, -14).Value
    Euro = Cells(i, UserNameCol).Offset(, -13).Value
    Exchange = Cells(i, UserNameCol).Offset(, -12).Value
    Pound = Cells(i, UserNameCol).Offset(, -11).Value
    ExchRate = Cells(i, UserNameCol).Offset(, -10).Value

    Set OutMail = OutApp.CreateItem(0) 'this goes here because a new email is needed each time
    On Error Resume Next
    With OutMail

        'Customise the below as required
        .To = UserName
        .Importance = 1
        .Subject = "Hello"
        .Body = "Full Name: " & FullName & vbCr & _
                    "PO: " & PO & vbCr & _
                    "Sort Code: " & SortCode & vbCr & _
                    "Account Number: " & AccountNum & vbCr & _
                    "Amount Euro: " & Euro & vbCr & _
                    "Amount Pound: " & Pound & vbCr & _
                    "Exchange Rate: " & ExchRate & vbCr & vbCr & _
                    "Thanks for reading."

        'display shows each email before sending
        .Display
        'send sends email automatically
        '.Send

    End With
    On Error GoTo 0

    i = i + 1

Loop

'destroy outlook when finished processing all mails
Set OutMail = Nothing
Set OutApp = Nothing

Application.DisplayAlerts = True

End Sub

我会在一对保持 .Display 属性集的情况下尝试它,一旦你满意它的工作原理,注释掉 .Display 并取消注释掉 .Send(在开头添加或删除撇号)必要时行)。

同时确保您启用了 Microsoft Outlook 对象库(工具 > 参考 > MS Outlook 对象库)。

希望这会有所帮助。

【讨论】:

  • 重读我想我可能错过了问题的重点。此代码旨在获取电子表格中已列出的信息并将其放入电子邮件中。它不会进行任何计算。
  • 感谢您的宝贵时间。我正在浏览您共享的信息,以了解如何将其用于我的目的。我不需要进行计算。我将把这段代码链接到一个按钮,然后一步一步地让它工作。谢谢
  • 好声音,它至少会给用户发送每笔交易的摘要,我相信你可以修改它或者至少使用一些代码来扩展并发送一个完整的陈述。如果您需要对代码的任何部分进行任何说明,请大声告诉我。
  • 以上似乎对我不起作用。我引入了一个按钮并将公式链接到它。我还尝试将用户参考作为电子邮件主题,但目前不起作用。
  • 您遇到什么错误?您是否启用了 MS 对象库?另外,请记住,这只会通过电子邮件发送单个交易,而不是摘要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
相关资源
最近更新 更多