×
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS

Log In

Come Join Us!

Are you an
Engineering professional?
Join Eng-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!
  • Students Click Here

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Jobs

Excel VBA code to generate loadcases

Excel VBA code to generate loadcases

Excel VBA code to generate loadcases

(OP)
Hi there,

Via Excel it should be possible to write VBA code to generate loadcases automatically.  However, it is difficult to find out with the FEMAP help file how to do this.  I tried some code but unfortunately I did something wrong.  It generates the load definition cases but doesn't include the actual loads.  Can somebody see what I do wrong?
The code looks like this:
Dim App As Object
    Set App = GetObject(, "femap.model")

    Dim ls As Object
    Set ls = App.feLoadSet
    Dim fs As Object
    Set fs = App.feLoadMesh
    Dim ld As Object
    Set ld = App.feLoadDefinition


    Dim ID As Integer
    Dim rc As Integer
    Dim Name As String
    Dim File As String
    
    Worksheets("Input").Activate
    Range("F3").Select
    ID = 1

        
        Name = ActiveCell.Offset(ID, -5)

        
        rc = ls.Get(ID)

        ls.Title = Name & ID
        ls.setID = 1
        ls.Active = ID
        ls.NLOn = 1
        ls.NLIncrements = 10
        ls.NLMaxIterPerStep = 25
        ls.NLStiffnessMethod = 1
        ls.NLStiffnessIter = 5

        rc = ls.Put(ID)
        
        
        rc = ld.Get(ID)

        ld.Title = "Pin Loading" & ID
        'ld.DataType=7
        ld.loadTYPE = FLT_NFORCE
        ld.setID = ID

        rc = ld.Put(ID)


        rc = fs.Get(1)

        fs.setID = ID
        fs.LoadDefinitionID = ID
        fs.meshID = 1274
        fs.CSys = 0
        fs.Type = 1
        fs.dof(0) = 1
        fs.dof(1) = 1
        fs.Load(0) = 200
        fs.Load(1) = 10

        rc = fs.Put(1)

        rc = fs.Get(2)

        fs.setID = ID
        fs.LoadDefinitionID = ID
        fs.meshID = 2635
        fs.CSys = 0
        fs.Type = 1
        fs.dof(0) = 1
        fs.dof(1) = 1
        fs.Load(0) = 200
        fs.Load(1) = 20

        rc = fs.Put(2)

End Sub

Something goes wrong in the "loadmesh" property. Anyone who likes to puzzle?

Grtz,
Kees

RE: Excel VBA code to generate loadcases

Hey!
I also have the same issue. My code is almost the same.
If you remove the line fs.LoadDefinitionID = ID, you will se the loads in the section "Other Loads/on mesh".

But I do not manage to put the nodal force into the load definition.

Can someone help us?

Thanks!!

Ben

RE: Excel VBA code to generate loadcases

surely the help desk can help ?

RE: Excel VBA code to generate loadcases

(OP)
Hi jokerbenj,

Finally I figured out the problem myself.
See the enclosed procedure code below which works!  I figured this out some time ago (can't remember what was missing at that time), but comparing the codes, I think it had to do with the "active" set.
This code works OK!  Try it. The "activeoffset" command refer to a table made in excel.  I hope you can read it.


Sub Create_Loads()
'Attach to the model in a FEMAP session that is already running.
Dim femap As Object
Set femap = GetObject(, "femap.model")

Dim LS As Object
Set LS = femap.feLoadSet

Dim LM As Object
Set LM = femap.feLoadMesh

Dim LD As Object
Set LD = femap.feLoadDefinition

Dim Col As Integer
Dim Count_RC As Integer
Dim ID As Long
Dim RC As Long
Dim Row As Long
Dim S_ID As Long
Row = 2
ID = 1
Count_RC = 0

While Worksheets(1).Cells(Row, 1).Value <> 0

    'ID = Worksheets(1).Cells(Row, 1).Value
    
    S_ID = Worksheets(1).Cells(Row, 1).Value
    RC = LS.Get(S_ID)
        LS.Title = Worksheets(1).Cells(Row, 2)
        LS.Active = S_ID
        LS.SetID = 1
    RC = LS.Put(S_ID)
    
    While Worksheets(1).Cells(Row, 3).Value > 0
        'ID = 1
        'Apply node loads
        If Worksheets(1).Cells(Row, 6).Value <> 0 Or _
            Worksheets(1).Cells(Row, 7).Value <> 0 Or _
            Worksheets(1).Cells(Row, 8).Value <> 0 Then
            
            RC = LD.Get(ID)
                LD.Title = Worksheets(1).Cells(Row, 4) & " Force"
                LD.loadTYPE = 1 '(FLT_NFORCE)
                LD.DataType = 13
                LD.SetID = S_ID
            RC = LD.Put(ID)
            If RC <> -1 Then Count_RC = Count_RC + 1
        
            
            RC = LM.Get(ID)
                LM.meshID = Worksheets(1).Cells(Row, 5) + 10
                LM.dof(0) = 1
                LM.dof(1) = 1
                LM.dof(2) = 1
                LM.Load(0) = Worksheets(1).Cells(Row, 6)
                LM.Load(1) = Worksheets(1).Cells(Row, 7)
                LM.Load(2) = Worksheets(1).Cells(Row, 8)
                LM.Type = 1 '(nForce)
                LM.LoadDefinitionID = ID
                LM.SetID = S_ID
                'LM.layer = 1
                'LM.Color = 1
                'LM.SetID = 1
            RC = LM.Put(ID)
            If RC <> -1 Then Count_RC = Count_RC + 1
        End If
      
        'Apply node moments
        If Worksheets(1).Cells(Row, 9).Value <> 0 Or _
            Worksheets(1).Cells(Row, 10).Value <> 0 Or _
            Worksheets(1).Cells(Row, 11).Value <> 0 Then
            ID = ID + 1
            RC = LD.Get(ID)
                LD.Title = Worksheets(1).Cells(Row, 4) & " Moment"
                LD.loadTYPE = 2 '(FLT_NMOMENT)
                LD.DataType = 13
                LD.SetID = S_ID
            RC = LD.Put(ID)
            If RC <> -1 Then Count_RC = Count_RC + 1
        
            
            RC = LM.Get(ID)
                LM.meshID = Worksheets(1).Cells(Row, 5)
                LM.dof(0) = 1
                LM.dof(1) = 1
                LM.dof(2) = 1
                LM.Load(0) = Worksheets(1).Cells(Row, 9)
                LM.Load(1) = Worksheets(1).Cells(Row, 10)
                LM.Load(2) = Worksheets(1).Cells(Row, 111)
                LM.Type = 2 '(nMoment)
                LM.LoadDefinitionID = ID
                LM.SetID = S_ID
                'LM.layer = 1
                'LM.Color = 1
                'LM.SetID = 1
            RC = LM.Put(ID)
            If RC <> -1 Then Count_RC = Count_RC + 1
        End If
        ID = ID + 1
        Row = Row + 1
        
    
    Wend
    Row = Row + 1

Wend

'Combine the loadcases
Worksheets("Overview").Activate
For Col = 3 To 23

    S_ID = Cells(1, Col).Value
    RC = LS.Get(S_ID)
        LS.Title = Cells(2, Col)
        LS.Active = S_ID
        LS.SetID = 1
    RC = LS.Put(S_ID)

    For Row = 7 To 30
        If Cells(Row, Col) = "x" Then
            RC = femap.feLoadCombine(Cells(Row, 1), S_ID, 1)
        End If
    Next Row
Next Col




MsgBox ("Amount of error codes is " & Count_RC)



End Sub
 

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Eng-Tips forums is a member-only feature.

Click Here to join Eng-Tips and talk with other members!


Resources