0

我有一个带有一些 VBA 代码的 Excel 工作簿,它使用 OSIsoft DataLink 插件的 PISampDat 函数来提取多列数据。工作簿由批处理文件运行,而批处理文件又由 Windows 计划任务触发。如果我手动运行工作簿或批处理文件,它会按预期工作,但如果我使用计划任务,则会收到以下错误:

1004: 无法运行宏“PISampDat”。该工作簿中的宏可能不可用,或者所有宏都可能被禁用。

“PISampDat”不是宏,而是插件中的函数名称。代码如下:

ThisWorkbook.Sheets(SheetName).Range(Cells(5, PTTagNamesCol), Cells(RangeRowCount, PTTagNamesCol)) = Application.Run("PISampDat", TagName, EDate, SDate, "5m", 0, PiServer)

似乎当它由计划任务运行时,Excel 没有加载 DataLink 加载项,因此无法识别函数名称。

更多详细信息:

  • 以管理员用户身份运行的计划任务,对涉及的所有文件和文件夹具有权限
  • 选择“无论用户是否登录都运行”选项
  • 选择了“以最高权限运行”选项
  • 为 Windows Server 2012 R2 配置
  • “程序/脚本”选项仅包含批处理文件名
  • “开始于(可选)”选项仅包含批处理文件路径

知道如何解决这个问题吗?

4

1 回答 1

0

根据计划任务的配置,它可能以系统用户身份运行,而用户配置文件无权访问正确的 Excel 加载项。也可能是该任务作为后台任务运行,其中线程无法访问 UI 内容……有很多事情,而且可能很复杂。

我认为你可能需要退后一步,问问自己你想要达到什么目标?从 PI System 中使用数据的方法有很多种,这实际上取决于您要执行的操作。您可以将 .NET 代码与 AF SDK 一起使用,这比 excel 更容易自动化。您还可以使用带有 PI ODBC 驱动程序的 ODBC 客户端从 PI System 中查询数据,这也更容易实现自动化。您还可以使用 PI System 的 powershell 脚本......很多东西。查看PI Developer Technologies,您可能会发现另一种更简单的方法来提取数据。

一旦您在平面文件(例如 csv)中获取数据,您就可以轻松地在 excel 中通过数据刷新来使用它,与 powerbi 相同。

于 2019-09-07T09:04:34.177 回答