Hi,
I would like to export the results of efforts with VBA in excel files like in the video attached.
Can you help me ?
Solved! Go to Solution.
Solved by rsousa_. Go to Solution.
Solved by Rafal.Gaweda. Go to Solution.
Solved by Rafal.Gaweda. Go to Solution.
First remark - something is wrong with cases loop if you have more than 1 case selected.
Take a look at green code below.
This sub should work fine.
Sub extraction_resultats_cas()
Range("A13", "F25000").Clear
Range("B5").Clear
Set RobApp = New RobotApplication
If Not RobApp.Visible Then
Set RobApp = Nothing
MsgBox "Open Robot and load Model", vbOKOnly, "ERROR"
Exit Sub
Else
' If (RobApp.Project.Type <> I_PT_FRAME_3D) And (RobApp.Project.Type <> I_PT_SHELL) Then
' MsgBox "Structure Type should be FRAME 3D or SHELL", vbOKOnly, "ERROR"
' Exit Sub
' End If
Cells(5, 1) = "Project"
Cells(5, 2) = RobApp.Project.Name
'selection des barres
'If CheckBox1 = True Then
'Dim BarCol As RobotBarCollection
'Set BarCol = RobApp.Project.Structure.Bars.GetAll
'Else
Dim RSelection As RobotSelection
Set RSelection = RobApp.Project.Structure.Selections.Get(I_OT_BAR)
Dim BarCol As RobotBarCollection
Set BarCol = RobApp.Project.Structure.Bars.GetMany(RSelection)
Dim num_bar As String
' If (BarCol.Count = 0) Then c'est un test de selection du modele
' If (MsgBox("No bars selected in Robot. Do you want to import results for all bars?", vbYesNo, "Warning") = vbYes) Then
num_bar = Cells(8, 2)
If num_bar = "" Then
If (MsgBox("Pas de numéro de barres indiqué ! Voulez-vous selectionner toutes les barres?", vbYesNo, "Warning") = vbYes) Then
RSelection.FromText "all"
RSelection.AddText "tous"
Set BarCol = RobApp.Project.Structure.Bars.GetMany(RSelection)
Else
Set BarCol = Nothing
Exit Sub
End If
' ajout condition pour rentrer soi-meme les numéros de barres
Else
RSelection.FromText num_bar
Set BarCol = RobApp.Project.Structure.Bars.GetMany(RSelection)
End If
'End If
Set RSelection = RobApp.Project.Structure.Selections.Get(I_OT_CASE)
Dim CaseCol As RobotCaseCollection
Set CaseCol = RobApp.Project.Structure.Cases.GetMany(RSelection)
Dim num_cas As String
num_cas = Cells(9, 2)
' If (CaseCol.Count = 0) Then
If num_cas = "" Then
If (MsgBox("Pas de cas ou combinaisons indiqué ! Voulez-vous importer les résultats de tous les cas ?", vbYesNo, "Warning") = vbYes) Then
RSelection.FromText "all"
RSelection.AddText "tous"
Set CaseCol = RobApp.Project.Structure.Cases.GetMany(RSelection)
Else
Set CaseCol = Nothing
Exit Sub
End If
Else
RSelection.FromText num_cas
Set CaseCol = RobApp.Project.Structure.Cases.GetMany(RSelection)
End If
Cells(9, 2) = RSelection.ToText
NumberOfPoints = Int(Cells(10, 2).Value)
If (NumberOfPoints < 2) Then
MsgBox "Number of points along the bar must be greater or equal to 2", vbOKOnly, "Error"
Exit Sub
End If
'Sleep 10000
Row = 12
' Cells(Row, 1) = "Barre"
' Cells(Row, 2) = "Noeud"
' Cells(Row, 3) = "Cas (/ Composante)"
'
' Cells(Row, 4) = "FX [kN]"
' Cells(Row, 5) = "FZ [kN]"
' Cells(Row, 6) = "MY [kN.m]"
Cells(19, 9) = "Progression"
For i = 1 To BarCol.Count
Cells(20, 9) = Str(i) + " / " + Str(BarCol.Count)
Dim RBar As RobotBar
Set RBar = BarCol.Get(i)
BarNumber = RBar.Number
BarStr = Str(BarNumber)
OriNodeStr = Str(RBar.StartNode)
EndNodeStr = Str(RBar.EndNode)
Dim BFD As RobotBarForceData
Dim Icomp As Integer
Dim BarForceServer As RobotBarForceServer
Set BarForceServer = RobApp.Project.Structure.Results.Bars.Forces
Dim Point As Double
Dim Step As Double
Point = 0#
Step = 1# / (NumberOfPoints - 1)
For ii = 1 To NumberOfPoints
For j = 1 To CaseCol.Count
AT = CaseCol.Get(j).AnalizeType
If AT <> I_CAT_COMB_CODE _
And AT <> I_CAT_COMB _
And AT <> I_CAT_COMB_NONLINEAR _
And AT <> I_CAT_STATIC_LINEAR _
And AT <> I_CAT_STATIC_NONLINEAR Then
MsgBox "This macro works only for simple load cases, combinations and automatic combinations", vbOKOnly, "Error"
Exit Sub
End If
UNC = CaseCol.Get(j).Number
CaseStr = Str(UNC)
If CaseCol.Get(j).Type = I_CT_CODE_COMBINATION Then ' pour les combinaisons
Dim CCount As Integer
CCount = CaseCol.Get(j).Components.Count
Dim StrCC As String
StrCC = Str(CCount)
If InStr(CaseCol.Get(j).Name, "+") <> 4 And InStr(CaseCol.Get(j).Name, "-") <> 4 And InStr(CaseCol.Get(j).Name, "+") <> 8 And InStr(CaseCol.Get(j).Name, "-") <> 8 Then
For Icomp = 1 To CCount
CompStr = " / " + Str(Icomp)
Row = Row + 1
If ii = 1 Then
Cells(Row, 1) = BarStr
Cells(Row, 2) = OriNodeStr
Cells(Row, 3) = CaseStr + CompStr
ElseIf ii = NumberOfPoints Then
Cells(Row, 1) = BarStr
Cells(Row, 2) = EndNodeStr
Cells(Row, 3) = CaseStr + CompStr
Else
Cells(Row, 1) = BarStr + Str(ii) + " /" + Str(NumberOfPoints) + " / " + CaseStr + CompStr
End If
Set BFD = BarForceServer.ValueEx(BarNumber, UNC, Icomp, Point)
Cells(Row, 4) = BFD.FX * 0.001
Cells(Row, 5) = BFD.FZ * 0.001
Cells(Row, 6) = BFD.MY * 0.001
Set BFD = Nothing
Next Icomp
End If
Else ' pour les cas simples
Row = Row + 1
If ii = 1 Then
Cells(Row, 1) = BarStr
Cells(Row, 2) = OriNodeStr
Cells(Row, 3) = CaseStr
ElseIf ii = NumberOfPoints Then
Cells(Row, 1) = BarStr
Cells(Row, 2) = EndNodeStr
Cells(Row, 3) = CaseStr
Else
Cells(Row, 1) = BarStr
Cells(Row, 2) = Str(ii) + " /" + Str(NumberOfPoints)
Cells(Row, 3) = CaseStr
End If
Set BFD = BarForceServer.Value(BarNumber, UNC, Point)
Cells(Row, 4) = BFD.FX * 0.001
Cells(Row, 5) = BFD.FZ * 0.001
Cells(Row, 6) = BFD.MY * 0.001
Set BFD = Nothing
End If
Next j
Point = Point + Step
Next ii
Next i
End If
Cells(19, 9) = ""
Cells(20, 9) = ""
End Sub
Bonjour,
Do you know how to export the reactions kz like :
Set BFD = BarForceServer.Value(BarNumber, UNC, Point)
Cells(Row, 7) = BFD.KZ * 0.001
mateaus wrote:
ok thanks, do you know how to change with API the scale of results on graphic ?
I am afraid it is not possible to control scale by API.
mateaus
Do you know how to export the reactions kz like :
Set BFD = BarForceServer.Value(BarNumber, UNC, Point)
Cells(Row, 7) = BFD.KZ * 0.001
This is KZ value , the one to the left from Reaction KZ checkbox shown on your screen capture
Raction KZ is not available thru API. You have to calculate it by yourself \ your code.
Example below - additional code in green.
Keep in mind that results strongly depend on number of points along bar and compaxity of KZ diagram.
.
.
.
Step = 1# / (NumberOfPoints - 1)
Dim KZReaction() As Double
ReDim KZReaction(2)
KZReaction(1) = 0#
Dim EleLen As Double
EleLen = 0#
Dim KZAComb As Boolean
Dim KZACode As Boolean
KZACode = False
KZAComb = False
Dim CCount As IntegerIf CaseCol.Get(j).Type = I_CT_CODE_COMBINATION Then
CCount = CaseCol.Get(j).Components.Count
ReDim KZReaction(CCount)
For iicomp = 1 To CCount
KZReaction(iicomp) = 0#
Next iicomp
End If
For ii = 1 To NumberOfPointsIf CaseCol.Get(j).Type = I_CT_CODE_COMBINATION Then
Dim StrCC As String
StrCC = Str(CCount)
If InStr(CaseCol.Get(j).Name, "+") <> 4 And InStr(CaseCol.Get(j).Name, "-") <> 4 And InStr(CaseCol.Get(j).Name, "+") <> 8 And InStr(CaseCol.Get(j).Name, "-") <> 8 Then
For Icomp = 1 To CCount
CompStr = "/" + Right(Str(Icomp), Len(Str(Icomp)) - 1)
Row = Row + 1
If ii = 1 Then
Cells(Row, 1) = barstr + OriNodeStr + CaseStr + CompStr
ElseIf ii = NumberOfPoints Then
Cells(Row, 1) = barstr + EndNodeStr + CaseStr + CompStr
Else
Cells(Row, 1) = barstr + Str(ii) + "/" + Right(Str(NumberOfPoints), Len(Str(NumberOfPoints)) - 1) + " / " + CaseStr + CompStr
End IfSet BFD = BarForceServer.ValueEx(BarNumber, UNC, Icomp, Point)
Cells(Row, 2) = BFD.FX
Cells(Row, 3) = BFD.FZ
Cells(Row, 4) = BFD.MY
' Cells(Row, 5) = BFD.KZ
KZACode = BFD.KZAvailable
If KZACode Then
EleLen = RBar.Length / (NumberOfPoints - 1)
If ii = 1 Or ii = NumberOfPoints Then EleLen = EleLen / 2
' Cells(Row, 6) = BFD.KZ * EleLen
KZReaction(Icomp) = KZReaction(Icomp) + BFD.KZ * EleLen
End If
Set BFD = Nothing
Next Icomp
End If
Else
Row = Row + 1
If ii = 1 Then
Cells(Row, 1) = barstr + OriNodeStr + CaseStr
ElseIf ii = NumberOfPoints Then
Cells(Row, 1) = barstr + EndNodeStr + CaseStr
Else
Cells(Row, 1) = barstr + Str(ii) + "/" + Right(Str(NumberOfPoints), Len(Str(NumberOfPoints)) - 1) + " / " + CaseStr
End If
Set BFD = BarForceServer.Value(BarNumber, UNC, Point)
Cells(Row, 2) = BFD.FX
Cells(Row, 3) = BFD.FZ
Cells(Row, 4) = BFD.MY
' Cells(Row, 5) = BFD.KZ
KZAComb = BFD.KZAvailable
If KZAComb Then
EleLen = RBar.Length / (NumberOfPoints - 1)
If ii = 1 Or ii = NumberOfPoints Then EleLen = EleLen / 2
' Cells(Row, 6) = BFD.KZ * EleLen
KZReaction(1) = KZReaction(1) + BFD.KZ * EleLen
End If
Set BFD = Nothing
End If
Point = Point + Step
Next ii
If KZAComb Then
Cells(Row, 7) = "KZ Reaction for bar " & Str(BarNumber) & " Case " & CaseStr
Cells(Row, 8) = KZReaction(1)
KZAComb = False
End If
If KZACode Then
For Icomp = 1 To CCount
Cells(Row - CCount + Icomp, 7) = "KZ Reaction for bar " & Str(BarNumber) & " Case " & CaseStr & " /" & Str(Icomp)
Cells(Row - CCount + Icomp, 8) = KZReaction(Icomp)
KZACode = False
Next Icomp
End If
Next j
Next i
End If
Cells(20, 8) = ""
Cells(20, 9) = ""
End Sub
Hi,
I would like to export results of my plate with VBA.
Now I'm doing this :
Can you give the macro to export it in excel automatically for simple case and moving case (only composant LM2 + LM2 _ ...) together ?
Ok good but I'm looking for results by nodes.
Have good something for me ?
Thanks
Hi,
is it possible to have a table of resultant loads like that :
Thank you for your answer.
@Anonymous_Adsk wrote:Take a look at attached xls
Hi,
To export results of panel, I would like to select only a list of finit elements (nodes).
Is that possible you modify your file ?
For the results I prefer to export the average in each node like this :
Thank you for you answer.
is it possible to have a table of resultant loads like that :
I do not knwo what is the centre de poussee and how it is calculated so you can take
RobApp.Project.Structure.Results.Nodes.Reactions.DDC*
or
RobApp.Project.Structure.Results.Nodes.Reactions.Sum*
to get Forces \ Moments Resultatntes then calculate centre de poussee in your macro.
Is that possible to export results of a cut of a slab in a table :
I think:
either: generate view I_VT_DETAILED_ANALYSIS, generate panel cut and make screen capture of this view
or
get reduced results from panel
RobApp.Project.Structure.Results.FiniteElems.Reduced.*
For the results I prefer to export the average in each node like this :
File Attached.
@Anonymous_Adsk wrote:
For the results I prefer to export the average in each node like this :
File Attached.
Ok for the option of results but I would like to ask for a list of nodes and not all of them.
I your file you have to select in the model before. I would like to ask in cases of excel file for results of a chosen list of elements (nodes of a panel) and cases.
Can you modify your macro for it ?
Thank you for you answer.
I would like to ask in cases of excel file for results of a chosen list of elements (nodes of a panel) and cases.for selection of fes and nodes attached
@Anonymous_Adsk wrote:I would like to ask in cases of excel file for results of a chosen list of elements (nodes of a panel) and cases.for selection of fes and nodes attached
Hi it doesn't work I think. Can we enter a list of nodes in a excel cell and have the results of the selection ?
for selection of fes and nodes attached
Hi it doesn't work I think. Can we enter a list of nodes in a excel cell and have the results of the selection ?
No it works on nodes selection and FEs selection made in Robot
Can't find what you're looking for? Ask the community or share your knowledge.