如何自动刷新Excel文件并通过电子邮件发送?

如何自动刷新Excel文件并通过电子邮件发送?,excel,Excel,我有一些Excel文件(透视表和图表),它们与Access数据库有数据连接。我希望能让他们在每个月的第一天自动刷新并收到电子邮件 我在Access中也做了类似的事情,在Access中,我有一个数据库,其中包含一个可以运行并通过电子邮件发送的查询。我在数据库中创建了一个表单,当数据库打开时表单会自动打开,然后在表单中使用VBA来运行查询(DoCmd.OpenQuery),然后通过电子邮件发送(DoCmd.SendObject)来实现这一点 我可以对Excel文件执行类似操作吗?我想我可以将数据选项

我有一些Excel文件(透视表和图表),它们与Access数据库有数据连接。我希望能让他们在每个月的第一天自动刷新并收到电子邮件

我在Access中也做了类似的事情,在Access中,我有一个数据库,其中包含一个可以运行并通过电子邮件发送的查询。我在数据库中创建了一个表单,当数据库打开时表单会自动打开,然后在表单中使用VBA来运行查询(DoCmd.OpenQuery),然后通过电子邮件发送(DoCmd.SendObject)来实现这一点

我可以对Excel文件执行类似操作吗?我想我可以将数据选项卡下的连接属性设置为“打开文件时刷新数据”,但这假设用户有一个活动的网络连接,因为数据库位于服务器上。此外,如果用户保存文件并在将来再次打开,则该文件将包含当前数据而不是原始数据

因此,简而言之,我需要:

  • 打开Excel文件
  • 刷新数据
  • 电子邮件文件

  • 下面是我最后做的:

    在Access中,我有一些生成表格的查询,这些查询生成Excel文件将使用的表格(duh)。我创建了一个表单,在数据库打开时自动将其打开,并在
    form\u Load()
    事件中输入以下内容:

    With DoCmd
        .SetWarnings False
        .OpenQuery "My Query 1"
        .OpenQuery "My Query 2"
        .SetWarnings True
    End With
    Application.Quit
    
    ActiveSheet.Unprotect
    ActiveWorkbook.Connections("MyConnection").Refresh
    ActiveSheet.Protect
    
    Call FunctionThatCreatesPDFAndEmails
    
    ActiveWorkbook.Close False
    
    在每个Excel文件中,我都在线找到一些VBA代码来创建PDF,然后通过电子邮件发送。在
    工作簿\u Open()
    事件中,我有以下内容:

    With DoCmd
        .SetWarnings False
        .OpenQuery "My Query 1"
        .OpenQuery "My Query 2"
        .SetWarnings True
    End With
    Application.Quit
    
    ActiveSheet.Unprotect
    ActiveWorkbook.Connections("MyConnection").Refresh
    ActiveSheet.Protect
    
    Call FunctionThatCreatesPDFAndEmails
    
    ActiveWorkbook.Close False
    

    然后,我将一些任务放入Windows任务计划程序。。一个用于打开Access数据库(这会导致生成表查询运行,然后自行关闭),然后为我需要更新和发送电子邮件的每个Excel文件执行一个任务。所以现在我有权更新源数据表,然后Excel打开每个文件,刷新数据,并通过电子邮件发送PDF文件。任务完成了

    宏可以写在一个模块中,该模块可以根据用户的意愿运行。关于覆盖原始数据的问题,宏将使用刷新的数据创建Excel文件的副本,然后邮寄该副本。但我有一个问题:如果用户没有活动网络,那么用户将如何刷新?
    此外,如果用户保存文件并在将来再次打开,它将具有当前数据而不是原始数据。
    这是一个问题还是一个请求??是否要将工作表中的数据副本发送给其他人?或具有活动连接的活动工作表,该工作表将被刷新,并会导致1001安全警报关闭。很抱歉,不清楚。。我希望用户收到数据的副本。电子表格在发送之前需要刷新,然后将数据的静态副本发送给用户。