如何将 VBA 代码与打开的 ETABS OAPI 链接?

问题描述 投票:0回答:3

我的电脑上打开了 ETABS 2015 上的项目。我想通过VBA代码自动对其进行一些更改和处理,但是我找到的所有示例代码都是这样的:

Public Sub Example()
       Dim SapModel As cSapModel
       Dim EtabsObject As cOAPI
       Dim FileName as String 
       Dim ret As Integer = -1 

   'create ETABS object
       EtabsObject = CreateObject("CSI.ETABS.API.ETABSObject")

   'start ETABS application
       ret = EtabsObject.ApplicationStart()

   'create SapModel object
       SapModel = EtabsObject.SapModel

   'initialize model
       ret = SapModel.InitializeNewModel()

   'open an existing file - If no file exists, run the Save example first.
       FileName = "c:\CSI_API_temp\example.edb"
       ret = SapModel.File.OpenFile(FileName)

此代码只是在我的电脑中打开一个新的 ETABS。但我的 ETABS 项目已经在运行,我想连接到它,但我不知道如何连接! 请帮助我。

vba
3个回答
1
投票

您的sample代码基本上通常是打开 ETABS ITSELF 并初始化新模型所需的代码,

ETABSObject = CreateObject("CSI.ETABS.API.ETABSObject")
随后调用
ApplicationStart
方法是实现此目的的直接方法。

如果您参考安装目的地中的 ETABS API 文档文件(例如“C:\Program Files\Computers and Structures\ETABS 2015\CSi API ETABS 2015.chm”),请在“发行说明>附加到手动启动的ETABS 的实例”,或者如果您从链接中看到相同的部分 http://docs.csiamerica.com/help-files/etabs-api-2015/html/3ceb8889-9028-4de3-9c87-69a12055ade7.htm 你会发现代码(在 VB.Net 中)接近你的目标,但它不适用于 vba,所以,你要做的就是这个

    'The ret variable, just for method invocation convenience
    Dim ret As Integer

    'Create an instance of the currently opened Program
    Dim myETABSObject As ETABS2015.cOAPI
    Set myETABSObject = GetObject(, "CSI.ETABS.API.ETABSObject")

    'Create an instance to the model
    Dim myETABSModel As ETABS2015.cSapModel
    Set myETABSModel = myETABSObject.SapModel

    'Now, after the "reference instances" are obtained

    'Initialize the model (using the model's instance of course)
    ret = myETABSModel.InitializeNewModel() 'default units in kip_in_F

    'Set the model templete, which is "Blank"
    ret = myETABSModel.File.NewBlank()

您可以正常继续编码。


注意:1- 如果未打开 ETABS,

GetObject(CSI.ETABS.API.ETABSObject)
方法将引发错误。

2- 即使 ETABS 没有打开并且你想从 Windows shell 打开它(比如使用命令提示符打开程序而不是双击它们各自的图标),你仍然可以使用

GetObject
,但这当然需要一些错误处理和“Windows 脚本宿主对象模型”的使用。

3- 文档中的示例(在记录的方法和属性下)在启动输入数据方面可能并不完整,在这种情况下,它们只是为了给人留下如何使用各自方法和属性的印象。


0
投票

下面的代码按照您的要求进行。它使用 VBA 连接到当前运行的 ETABS 实例。请注意,如果您正在运行 ETABS 的多个实例,它可能无法附加到您想要的实例。

您需要将对“ETABSv1.tlb”的引用添加到您的 VBA 项目中。如果您使用的是 VBA Editor for Excel,请在“工具”菜单上选择“引用”,然后单击“浏览”,然后添加 C:\Program Files\Computers and Structures\ETABS 19\ETABSv1.tlb

Sub Main()
  'create API helper object
  Dim myHelper As ETABSv1.cHelper
  Set myHelper = New ETABSv1.Helper

  'dimension the ETABS Object as cOAPI type
  Dim myETABSObject As ETABSv1.cOAPI
  Set myETABSObject = Nothing

  'attach to a running instance of ETABS
  'get the active ETABS object
  Set myETABSObject = myHelper.GetObject("CSI.ETABS.API.ETABSObject")

  'get a reference to cSapModel to access all API classes and functions
  Dim mySapModel As ETABSv1.cSapModel
  Set mySapModel = myETABSObject.SapModel

  ' DO YOUR WORK BELOW.

  MsgBox "Do your work here."

  ' DO YOUR WORK ABOVE.

  'clean up variables
  Set mySapModel = Nothing
  Set myETABSObject = Nothing

  Exit Sub

ErrHandler:
    MsgBox "Cannot run API script: " & Err.Description

End Sub

ETABS 附带 API 文档,您可以在安装文件夹中找到该文档。在我的机器上,它位于:C:\Program Files\Computers and Structures\ETABS 19\CSA API ETABS v1.chm


0
投票

我无法根据 etabs v21 中的截面属性选择框架和墙壁,然后删除选定的框架和墙壁。谁能向我建议使用 Excel VBA 代码来完成此操作的代码

© www.soinside.com 2019 - 2024. All rights reserved.