Windows 11下Excel VBA调用PI Datalink标签搜索编译报错求助
PI SDK VBA标签搜索编译错误解决方向
问题说明
更换Windows 11系统后,原Excel VBA批量拉取PI数据程序的标签搜索功能失效,在代码行Dim search As New PISDKD1g.TagSearch处触发编译错误:用户定义类型未定义。对象浏览器中可看到PISDKD1g和PISDK引用,但代码无法识别该类型;手动输入有效PI标签时,数据拉取功能可正常运行。已尝试添加PtrSafe、将变量声明为Variant/Object并使用CreateObject、直接调用TagSearch.Show等方法,均未解决问题。
原按钮点击子程序代码:
Private Sub SearchButton_Click() Dim search As New PISDKD1g.TagSearch Dim Selected As PointList Dim point As PIPoint Dim p As Variant Set Selected = search.Show For Each p In Selected Set point = p If PItagsbox.Text = "" Then PItagsbox.Text = point Else: PItagsbox.Text = PItagsbox.Text & ", " & point End If Next End Sub
解决方向
- 核对PI SDK与Excel的位数兼容性:Windows 11多为64位系统,若安装的是32位PI SDK但使用64位Excel,会导致引用无法正常识别。需:
- 查看Excel位数:打开Excel→「文件」→「账户」→「关于Excel」
- 卸载当前PI SDK,安装与Excel位数匹配的版本(从OSIsoft官方渠道下载对应版本)
- 重新注册PI SDK组件:Win11的权限限制可能导致组件注册失效,以管理员身份运行命令提示符,执行以下注册命令(路径需替换为实际PI SDK安装路径):
regsvr32 "C:\Program Files\PIPC\PISDK\PISDK.dll" regsvr32 "C:\Program Files\PIPC\PISDK\PISDKD1g.dll" regsvr32 "C:\Program Files\PIPC\AF\PublicAssemblies\OSIsoft.AFSDK.dll" - 调整引用优先级:在VBA编辑器中依次点击「工具」→「引用」,将
PI SDK和PI SDK Dialog 1.0 Type Library(对应PISDKD1g)移至引用列表最上方,避免与其他引用产生冲突 - 修正后期绑定写法:之前的后期绑定尝试写法有误,正确写法如下,替换原变量声明部分可绕过编译类型识别问题:
注:后期绑定会丢失代码智能提示,但可解决编译错误Dim search As Object Dim Selected As Object Dim point As Object Set search = CreateObject("PISDKD1g.TagSearch") Set Selected = search.Show - 检查系统权限设置:将Excel设置为「以管理员身份运行」,避免组件访问权限不足;同时确保PI SDK安装目录的读写权限已开放给当前登录用户
内容的提问来源于stack exchange,提问作者NTempest
相关产品推荐
相关产品推荐

