首页 > 解决方案 > VBA 评估功能不起作用。错误 2015

问题描述

我正在尝试将 OsiSoft Pi Datalink 与 Excel VBA 连接并将输出放入变量中以进行进一步的 VBA 处理。

在 excel 单元格中运行命令时,它工作正常,但是当我尝试在 VBA 中运行它时,我得到“错误 2015”</p>

在此处输入图像描述

这是在单元格中运行良好的代码:

= PITimeDat("PP2941FIC01_PV_S", "7/07/2018  11:01:58 AM", "", "interpolated")

将其转换为 VBA:

Sub getPiData()

    Dim tagName As String
    tagName = "PP2941FIC01_PV_S"

    Dim timeStamp As String
    timeStamp = "7/07/2018  11:01:58 AM"

    Dim rootPath As String
    rootPath = ""

    Dim retrieveMode As String
    retrieveMode = "interpolated"

    Dim result As String
    result = CStr(Application.Evaluate("=PITimeDat(tagName, timeStamp, rootPath, retrieveMode)"))

    Debug.Print (result)

End Sub

我检查了 VBA 参考如下,它们似乎也正确:

在此处输入图像描述

用户指南中没有任何信息,或者我可以在互联网上找到用于将 VBA 正确连接到 Pi Datalink 的信息。

我在stackoverflow上找到了这个,但它没有解释这个问题:

使用 VBA 从 PI DataLink 中提取数据

我可能遗漏了一些非常基本的东西,但似乎我在 VBA 中执行与单元格中完全相同的代码。单元格返回一个值,而 VBA 只是返回一个错误。

在此先感谢您的帮助

标签: vbaexcel

解决方案


cyboashu提出的观点很好。但是,也可能是因为您的语法而收到此错误。

使用 时Evaluate,您必须完全按照您希望它被评估的方式传递字符串。您的代码正在传递变量的名称而不是它们的值。如果我可以简化一个例子。以下代码将返回错误(在本例中为 2029,即 #NAME 错误):

Dim dat As Variant
Dim txt As String

txt = "25 December 1966"

dat = Application.Evaluate("=DateValue(txt)")

在此示例中,您需要创建字符串以便评估 的txt如下所示:

Dim dat As Variant
Dim txt As String

txt = "25 December 1966"

dat = Application.Evaluate("=DateValue(""" & txt & """)")

我怀疑这是原因,因为如果所需字符串中缺少引号,则 Evaluate 将返回 2015 错误。例如,这将做到这一点:

Dim dat As Variant
Dim txt As String

txt = "25 December 1966"

dat = Application.Evaluate("=DateValue(" & txt & ")")

我没有库来测试您的确切代码,但请尝试重写您的评估字符串以合并变量的值,并记住也要传入引号。


推荐阅读