Word Macro Code
To see what the OpenSTAAD macro is doing, use the developer tools
to open the Visual Basic Editor.
GetSTAAD_Click
Option Explicit
Public objOpenSTAAD As Object
Public Fraction As Double
Public LC As Integer
Public bBadSTAADFile As Boolean
Private Sub GetSTAAD_Click()
'
' STAAD.Pro Macro
' Import STAAD.Pro Data Dynamically into an MS Word document
' using the OpenSTAAD Application object
Dim stdFile As String
Dim DOF As Integer
Dim acell As Cell
'Launch OpenSTAAD Object
Set objOpenSTAAD = GetObject(, "StaadPro.OpenSTAAD")
'Load your STAAD file - make sure you have successfully run the file
objOpenSTAAD.GetSTAADFile stdFile, "TRUE"
STAADFileName.Text = "(None)"
If stdFile = "" Then
MsgBox "This macro can only be run with a valid STAAD file loaded.", vbOKOnly
Set objOpenSTAAD = Nothing
Exit Sub
End If
STAADFileName.Text = stdFile
FillBoxesWithData stdFile
DOF = 0
For Each acell In ActiveDocument.Tables(2).Columns(2).Cells
If (acell.RowIndex <> 1) Then
acell.Range.Text = "0.0"
DOF = DOF + 1
End If
Next acell
Set objOpenSTAAD = Nothing
End Sub
GetResults1_Click
Private Sub GetResults1_Click()
Set objOpenSTAAD = GetObject(, "StaadPro.OpenSTAAD")
Dim Reactions(6) As Double
' The Integer has been changed to a Long in 2004 to hold higher node numbers
Dim Node As Long
Dim LC As Long
Dim DOF As Integer
Dim acell As Cell
If (bBadSTAADFile = True) Then
MsgBox "Please provide a valid STAAD file, node number and load case number before clicking this button."
Exit Sub
End If
Node = NodeNumber.Text
LC = LCNumber.Text
objOpenSTAAD.Output.GetSupportReactions Node, LC, Reactions
DOF = 0
For Each acell In ActiveDocument.Tables(2).Columns(2).Cells
If (acell.RowIndex <> 1) Then
acell.Range.Text = Reactions(DOF)
DOF = DOF + 1
End If
Next acell
End Sub
Additional Subroutines
Private Function FillBoxesWithData(strSTAADFile As String)
Dim varCounter1 As Integer
Dim PrimaryLCs As Integer
Dim LoadCombs As Integer
Dim TotalLoads As Integer
' The Integer has been changed to a Long in 2004 to hold higher node numbers
Dim SupportedNodesCount As Long
' The Integer has been changed to a Long in 2004 to hold higher node numbers
Dim SupportedNodeNos() As Long
On Error GoTo ErrorHandler
'Set objOpenSTAAD = CreateObject("OpenSTAAD.Output.1")
SupportedNodesCount = objOpenSTAAD.Support.GetSupportCount()
ReDim SupportedNodeNos(SupportedNodesCount)
Dim nReturn As Long
nReturn = objOpenSTAAD.Support.GetSupportNodes(SupportedNodeNos)
'Fill nodes list box
NodeNumber.Clear
For varCounter1 = 0 To SupportedNodesCount - 1
NodeNumber.AddItem SupportedNodeNos(varCounter1)
Next varCounter1
NodeNumber.Text = SupportedNodeNos(0)
'Fill load list box
'Find out how many primary load cases and load combinations you have
PrimaryLCs = objOpenSTAAD.Load.GetPrimaryLoadCaseCount()
LoadCombs = objOpenSTAAD.Load.GetLoadCombinationCaseCount()
TotalLoads = PrimaryLCs + LoadCombs
LCNumber.Clear
For varCounter1 = 1 To TotalLoads
LCNumber.AddItem varCounter1
Next
LCNumber.Text = 1
bBadSTAADFile = False
Exit Function
ErrorHandler:
bBadSTAADFile = True
MsgBox "STAAD File does not exist or proper analysis results cannot be found. Please check the STAAD file."
End Function
Private Sub NodeNumber_Change()
End Sub
Private Sub STAADFileName_Change()
End Sub
Private Sub UpdateSTDFile_Click()
bBadSTAADFile = True
FillBoxesWithData
End Sub