1505x
001459
29. Juni 2017

COM-Schnittstelle in VBA | 4.1 Optimierung eines Rahmens

In Teil 4.1 und 4.2 der Serie soll es um die Optimierung eines Rahmens mit Hilfe des Zusatzmoduls RF-/STAHL EC3 gehen. Der fünfte Teil deckt dabei die Anbindung des Moduls und das Holen relevanter Stäbe ab. Auf die Elemente, welche in vorangegangenen Teilen bereits erläutert wurden, wird nicht nochmal eingegangen.

Relevante Stäbe herausfiltern

Ziel soll es sein, dass nur Stäbe eines bestimmten Querschnitts in die Bemessung des EC3-Moduls übernommen werden. Für das folgende Beispiel sollen alle Stäbe mit dem Querschnitts „IPE 300“ herausgefiltert werden. Dazu werden zuerst alle Querschnitte vom Hauptprogramm geholt:


'   Zeichenkette des gewünschten Querschnitts anlegen
Dim crsc_desc As String

crsc_desc = "IPE 300"

' Alle Querschnitte aus RFEM holen
Dim crscs() As RFEM5.CrossSection
crscs = iModelData.GetCrossSections

' Schleife über alle Querschnitte
Dim crsc_no As Long
crsc_no = -1
Dim i As Long
For i = 0 To UBound(crscs, 1)
 ' Wenn die Querschnittsbezeichung stimmt, Querschnittsnummer speichern
 If InStr(LCase(crscs(i).Description), LCase(crsc_desc)) > 0 Then
  crsc_no = crscs(i).No
  Exit For
 End If
Next i

' Programm beenden, wenn der gewünschte Querschnitt nicht gefunden wurde
If crsc_no = -1 Then
 Err.Raise 513, "Get cross-section number", "No cross-section with "" " & crsc_desc & " "" within its description found!"
End If

Der Abgleich der Querschnittsbezeichnung soll möglichst allgemein erfolgen. Dazu wird zunächst über "LCase" sowohl die Querschnittsbezeichnung als auch die zu suchende Zeichenkette auf Kleinbuchstaben gesetzt und dann nach der Zeichenkette in der Querschnittsbezeichnung gesucht. Falls kein passender Querschnitt gefunden wurde, bleibt die Querschnittsnummer auf -1, was dann abgefragt und mit einem Abbruch quittiert werden kann.

Nach diesem Schritt ist die Querschnittsnummer bekannt und die Stäbe mit dieser Querschnittsnummer können gesucht werden. Dabei sollen nur die Stäbe übernommen werden, welche am Anfang und am Ende diesen Querschnitt haben:

' Zeichenkette für Stabliste anlegen und zu null setzen
Dim mems_str As String
mems_str = vbanullstr

' Alle Stäbe aus RFEM holen
Dim mems() As RFEM5.Member
mems = iModelData.GetMembers

' Schleife über alle Stäbe
For i = 0 To UBound(mems, 1)
 ' Wenn ein Stab diese Querschnittsnummer am Anfang und am Ende hat,
 ' dann wird dessen Nummer in die Zeichenkette übernommen
 If mems(i).EndCrossSectionNo = crsc_no Then
  If mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNo Then
   mems_str = mems_str & mems(i).No & ","
  End If
 End If
Next i

' Programm beenden, wenn kein Stab gefunden wurde
If mems_str = vbanullstr Then
 Err.Raise 514, "Get members", "No member with cross-section "" " & crsc_desc & " "" found!"
End If

Interface des Zusatzmoduls holen

Die Anbindung an ein Modul gestaltet sich genau wie die Anbindung an RFEM oder RSTAB. Einziger Unterschied ist, dass hier nicht unterschieden wird zwischen dem Öffnen einer bereits offenen Instanz oder dem Öffnen einer neuen Instanz, da hier immer eine bereits offene Instanz vorliegt:

' Interface für Modul holen
Dim iStec3 As STEEL_EC3.Module
Set iStec3 = iModel.GetModule("STEEL_EC3")

Als nächstes werden alle vorhandenen Modulfälle gelöscht:

' Anzahl der vorhandenen Modulfälle holen
Dim count As Long
count = iStec3.moGetCaseCount

' Falls Fälle vorhanden sind, immer den ersten in der Tabelle löschen
If count > 0 Then
 For i = 0 To count - 1
  iStec3.moDeleteCase i, AT_INDEX
 Next i
End If

Danach kann der gewünschte Fall angelegt und über die zuvor erstellte Zeichenkette die Stäbe für die Bemessung eingetragen werden:

' Modulfall "Optimization" anlegen
Dim iStec3Case As STEEL_EC3.ICase
Set iStec3Case = iStec3.moSetCase(1, "Optimization")

' Stäbe für Bemessung setzen
iStec3Case.moSetMemberList mems_str

Zu guter Letzt werden noch die gewünschten Lastfallkombinationen eingetragen:

' Lastkombinationen setzen
Dim iStec3_uls_loads(0 To 2) As STEEL_EC3.ULS_LOAD

iStec3_uls_loads(0).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(0).No = 1
iStec3_uls_loads(0).Type = ILOAD_GROUP

iStec3_uls_loads(1).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(1).No = 2
iStec3_uls_loads(1).Type = ILOAD_GROUP

iStec3_uls_loads(2).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(2).No = 3
iStec3_uls_loads(2).Type = ILOAD_GROUP

iStec3Case.moSetULSLoads iStec3_uls_loads

Zusammenfassung und Ausblick

Die hier dargestellten Vorgehensweisen sind stellvertretend für alle Module, welche mit COM angesteuert werden können. Der Quellcode und die Excel-Datei helfen, um die Thematik noch besser nachvollziehen zu können. Im nächsten Beitrag soll dann noch mehr in die Tiefe gegangen und die Verknüpfung zwischen Elementen im Modul und im Hauptprogramm hergestellt werden.


Autor

Herr Günthel kümmert sich im Kundensupport um die Anliegen unserer Anwender.

Links
Downloads