如何使用Excel设置COM服务器界面?

时间:2011-06-28 17:46:32

标签: excel vba com com-interface

版本
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)':
自动化错误
灾难性故障

问题(S)
- 服务器名称对吗?我一直在阅读有关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

2 个答案:

答案 0 :(得分:1)

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

我曾经得到相同的错误,并且根据您对服务器,别名和登录的更改,我能够让它运行。有一点不同的是,您已将项目名称从“SimaPro 7简介”更改为“项目”。老实说,VBA知识为零(这里不谦虚)。所以,我猜测没有项目名称“Project”可以打开。我不确定VBA是否会自动创建项目,如果它找不到它。您可以尝试创建名为“Project”的项目,也可以重命名。我很想知道这是否奏效。

答案 1 :(得分:0)

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

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

回答你的第一个问题,如果你引用了库并且代码编译了 - 这意味着你在那里做了一切。