【问题标题】:How do I set up a COM Server interface with Excel?如何使用 Excel 设置 COM 服务器接口?
【发布时间】:2023-04-02 12:49:01
【问题描述】:

版本
Excel 2003
Windows XP
SimaPro 7.3.0 开发版
使用工作计算机,但在这台机器上被设置为管理员
Excel/VBA 中引用的库:Visual Basic for Applications; Microsoft Excel 11.0 对象库; OLE 自动化; Microsoft Office 11.0 对象库; Microsoft Forms 2.0 对象库; COM+ 1.0 管理类型库; COM MakeCab 1.0 类型库; COM+ 服务类型库; SimaPro 库
我:初学者

我要做什么 我正在使用一个名为 SimaPro 的程序,它存储“生命周期分析”信息的数据库。该程序具有内置的 COM 接口功能。该程序声明它确实支持 Excel/VBA(但它没有指定版本)。

我正在尝试将此程序和/或 COM 服务器连接到 excel,以便我可以通过 excel 与信息进行交互。

我做了什么
我已经完成了他们列出的程序:
-打开 SimaPro
-注册COM服务器
-然后我将以下代码粘贴到 VBA 中并尝试运行它。这段代码是软件公司提供的示例代码,我只编辑了SP.Server、SP.Alias、SP.Login和SP.OpenProject这几个字段(下面是编辑的)。

发生了什么
运行时错误:'-2147418113 (8000ffff)':
自动化错误
灾难性故障

问题
-服务器名称对吗?我已经在 COM 服务器上阅读了一些内容,但我不知道我放入它的方式是否是正确的“形式”
-这可能与某些已注册/未注册的 DLL 有关吗?我曾与公司的 IT 人员和软件程序员一起工作过。他们都不太熟悉 COM,但有人认为 DLL 可能是问题所在。

感谢您的帮助!!

这是我输入的代码:

Sub CreateProcess()
Dim SP As SimaProServer
Dim PC As Process
Dim PC2 As Process
Dim PL As ProcessLine
Dim Param As ParamLine
Dim Subs As Substance
Set SP = New SimaProServer
SP.Server = "Local Server"
SP.Alias = "C:\Documents and Settings\All Users\Documents\SimaPro\Database\"
SP.Database = "Professional"
SP.OpenDatabase
SP.Login "", ""
SP.OpenProject "PROJECT", ""
' Not project's actual name, not allowed to state name of project
SP.CreateSubstance "Air", Subs
Subs.CASNumber = "4-5-13"
Subs.Name = "Some substance"
Subs.DefaultUnit = "kg"
Subs.Update
SP.CreateProcess ptMaterial, PC
Set PL = PC.AddLine(ppProduct, -1)
PL.ObjectName = "Steel 2"
PL.UnitName = "kg"
PL.Amount = "2"
PL.Comment.Add ("My new created process")
PL.CategoryPath = "Chemicals\inorganic"
PC.Update
' create second material process Case
SP.CreateProcess ptMaterial, PC2
Set PL = PC2.AddLine(ppProducts, 0)
PL.ObjectName = "Case 2"
PL.UnitName = "kg"
PL.Amount = "10"
Set Param = PC2.AddParamLine(ptInputParameter, -1)
Param.Name = "A"
Param.Value = "2,3"
' add input from Steel
Set PL = PC2.AddLine(ppMaterialsFuels, -1)
' input from steel
PL.SetProduct "Introduction to SimaPro 7", ptMaterial, "Steel 2"
PL.Amount = "8"
PL.UnitName = "kg"
Set PL = PC2.AddLine(ppAirborneEmissions, -1)
' input from steel
PL.SetSubstance "Some substance", ""
PL.Amount = "A+1"
PL.UnitName = "kg"
PC2.Update
SP.Logout
SP.CloseDatabase
Set SP = Nothing
End Sub

【问题讨论】:

  • 请将您的代码格式化为code,否则阅读起来会很痛苦。这次我会为你做的。

标签: excel vba com com-interface


【解决方案1】:

Automation Error 通常意味着您尝试使用的 COM 库中存在问题。由于它是一个运行时错误,它可能是非常愚蠢的,例如缺少参数或错误的路径或访问权限。在我看来,这也意味着这个库设计得不是很好。

由于您不是该库的作者,因此您没有太多选择。您可以尝试联系供应商以获取更多文档。您也可以祈祷设计者考虑日志记录 - 检查事件日志;如果你幸运的话,你可能会在那里发现一些有趣的东西。

回答您的第一个问题,如果您引用了库并且代码编译 - 这意味着您在那里完成了所有事情。

【讨论】:

  • 感谢您的帮助,朱利叶斯。我与该软件的开发人员取得了联系,结果发现最初的错误是该软件的 com 界面有问题。无论如何,他们给我发了一个补丁,我已经升级了。不幸的是,Excel 仍然无法工作。现在,当我尝试运行代码时,它给了我同样的错误。现在我发现它实际上在“Subs.Update”行出现了那个错误。当我取出那部分时,它会在 PC.Update 中崩溃。因此,它在尝试更新时不断崩溃。对可能发生的事情有任何想法吗?非常感谢您的帮助!
【解决方案2】:

鉴于这是一年多以前的事了。我假设你有这个工作。如果你还没有,我可能知道根本原因可能是什么。

我曾经遇到过同样的错误,并且从您对服务器、别名和登录名的更改中,我能够使其运行。不同的是,您已将项目名称从“SimaPro 7 简介”更改为“项目”。老实说,我的 VBA 知识为零(这里不谦虚)。所以,我推测没有项目名称“项目”可以打开。我不确定 VBA 是否会自动创建一个项目,如果它找不到它。您可以尝试创建一个名为“Project”的项目,也可以将其重命名。我有兴趣看看这是否有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2017-09-09
    • 2011-01-21
    • 2012-02-23
    • 2015-01-30
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多