【问题标题】:Automatically trigger VBA Macro whenever file with certain name is downloaded下载具有特定名称的文件时自动触发 VBA 宏
【发布时间】:2017-06-10 03:36:59
【问题描述】:

用户从仪表板下载定期报告。此报告以 .xls 文件的形式下载。用户要求我编写一个 VBA 程序,每次她下载此报告时都会完成几个操作。

她不想在下载报告时记住启动此宏 - 她希望它在下载文件时自行启动。

报告始终具有相同的名称和格式。

有没有办法让 Excel 检测到已下载具有特定名称的文件并启动宏?

【问题讨论】:

  • 来自 Excel,没有。您必须使用她正在使用的浏览器才能打开 excel 文档,然后在打开 excel 事件时触发它。为此(根据浏览器中的名称自动打开文档),您需要研究这是否可能(tbh,我不这么认为)。
  • 根据此电子表格的在线位置,如果您“反转”该过程,也许有一种使用 VBA 的方法。让她打开 Excel,然后让 Excel 下载报告,运行宏。 - 如果您知道要使用的 url,您可以使用 Excel 询问 URL,然后下载/操作文件。 ...当然,这都需要员工记住使用 Excel。
  • 如果用户乐于让 Excel(或其他可以使用 Excel 对象模块的应用程序)在后台一直运行,则可以将其设置为持续监视创建/更新硬盘驱动器上的文件,然后打开工作簿并执行必要的操作。 (但是 Batm ..,我的意思是 Bruce 的建议,如果有机会重新培训用户使用新方法,我会采用 Excel 进行下载的建议。)
  • 您可以将您的 VBA 转换为 VBScript 并在 Windows 调度程序中定期运行它。这里正在进行什么样的后台处理?如果在任何时候将此数据上传到数据库,您应该使用数据库工具来管理自动过程

标签: vba excel


【解决方案1】:

在这里。

感谢大家的回复。我想发布我最终做的事情,以防其他人需要完成类似的任务。

我创建了一个插件来实现这一点。

它包括一个类模块,用于侦听 WindowActivate 事件何时发生并检查工作簿名称是否与报告名称匹配。如果是,它会执行请求的转换。

Public WithEvents appevent As Application

Private Sub appevent_WindowActivate(ByVal wb As Workbook, ByVal Wn As Window)
If ((wb.Name Like "WB NAME GIVEN BY USER*")
     DO REQUESTED TRANSFORMATIONS

ThisWorkbook 对象调用类模块如下:

'Make instance of Class1 with global scope'
  Dim myobject As New Class1


Private Sub Workbook_Open()
  Set myobject.appevent = Application
End Sub

显然,此解决方案取决于各种假设,并且对性能非常不利。但是,我发布它是因为它可以完成工作并且可能对其他人有用。

英语不是我的母语 - 对于任何错误,我深表歉意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2012-02-29
    • 2022-11-10
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多