Free Excel VBA Tool for Plane Frame & Truss Analysis (RKstructure)
RKstructure is a lightweight yet powerful structural analysis application built entirely within Microsoft Excel using VBA. Whether you are analyzing a simple beam, a complex plane frame, or a roof truss, this tool uses the Direct Stiffness Method to provide accurate results instantly.
It is designed for students and engineers who need a quick, transparent solver without the overhead of heavy commercial software.
Key Features
1. Comprehensive Analysis
Plane Trusses: Calculates support reactions, member axial forces, and joint displacements.
Plane Frames & Beams: Computes reactions, Bending Moments, Shear Forces, Axial Forces, and Displacements.
2. Visual Diagrams Stop guessing the behavior of your structure. The tool automatically generates:
Bending Moment Diagrams (BMD)
Shear Force Diagrams (SFD)
Axial Force Diagrams (AFD)
Deflected Shapes
3. Professional Reporting
Generates a detailed analysis report directly in Excel.
Export to Word: With one click, send your results and diagrams to a Microsoft Word document for your project files.
Current Limitations
To keep the tool simple and fast, please note the following constraints:
Rigid Joints: Frame analysis assumes all joints are rigid.
Loading: Currently supports one Point Load and one Uniform Distributed Load (UDL) per member.
Truss Weights: Truss analysis considers joint loads only; member self-weight is not automatically added.
Units: The solver is unit-neutral. Please ensure you use consistent units (e.g., kN and meters) throughout your input.
How to Use RKstructure
I have created a step-by-step video tutorial that covers:
Defining nodes and connectivity.
Applying loads and supports.
Running the solver and interpreting the diagrams.
Watch the full tutorial here:
Watch the video tutorial HERE ON YOUTUBE

helo
Hi Ronald,
Hello, the truss analysis calculator isn’t working. It always says “can’t find library” pointing to the Public Sub MemberEndforceLocal, highlighting Dim ElematLoc. Please fix thank you. Your program helps me a lot.
Dear Ram Cip,
Thank you for your feedback. It seems to work fine on my computer.
Please follow this link for quick fix.
If the problem persist, please send the picture of error message to info@civilconstructiontools.com or rodkamd@gmail.com. I will investigate and get back to you.
Thank you!
Rodrigue
I’m having the same problem :((
Hi Rose,
Thank you for your feedback.
Please follow this link for quick fix.
Rodrigue
Hello, RODRIGUE
Could you show the procedures of the programming or even the ideas?
Nas.
Dear N4S!RODD!N3,
Thank you for your feedback. I’m currently preparing a video on how to program this with Excel VBA.
Rodrigue
Hello, RODRIGUE
Really interesting to say the least.
Could you show the procedures of the programming or even the ideas?
Nas.
Rodrigue,
nice concept this one. Unfortunately, I couldn’t make it work without errors (version 1.1.1, getting warnings when adding items to any list controls, and there are 2 userforms that are called to be shown while they are not on the code). So I really appreciate you have shared the code, so any can check and try to ammend it (if possible).
I enjoyed a lot the menu (it’s a rare gem to see such a menu on an Excel Add-In, and it speaks about the detail you have put in your creation). The userforms, also, look well designed. It’s a pitty it should be solved the list controls operation before any user can get an uderstanding about how the program works.
I will try to load some Chart edition code of my own, so one can call any joint, truss member, load, support or diagram just double clicking on the item (although it’s very buggy…). That would be a nice addition to this project.
Last, it would be very appropiate if this can be overworked to handle FEM analysis in Excel.
Just ideas, do not consider this to be a demand of future development. 😉
Hi Enrique,
Thank you for your feedback.
Kindly send me the picture of the error message at rodkamd@gmail.com and I will investigate and correct it if possible.
You can also check this Pro version with excel limitations corrected.
Thank you.
RK
Hi Rodrigue,
I have already fixed them myself (althoug the missing userforms could not be solved without your help 😉 ). Commenting the lines with the missing userforms the code compiles nearly 100% (I get an error with Time)
Anyway, here are the problems I have, so far encountered, in version 1.1.1:
Missing userforms, on Sheet5 (2DFrame)):
Private Sub FixedEndmomentCal_Click()
'! FIXEDMOMENTFORM.Show 'commented out for debugging
End Sub
Private Sub ResultsButton_Click()
'! Calculator.Show 'commented out for debugging
End Sub
I could also not find the Progressform form (but can be commented out as by its name is clearly a Progress bar and for me they are only time consuming using userforms (better performance using the Excel status bar). So I have disabled it wherever it appears.
As per the .AddItem problem, once the AddItem is triggered, you are assigning the values to the .List() object in the subsequent lines, but the .AddItem object is empty because you have not assigned anything (properly, the pvarItem).
I think the correct syntaxis should be something like this:
With ListControl
' for a single column list control:
.AddItem valueToBeAssigned
' for a multicolumns list control:
.AddItem pVarItem
.List(.ListCount - 1, #) = Value_# 'where # is number index, and the list could be feeded via a loop
End With
for example, in procedure btnAddmember_Click (on frmTrussMemberProperty), your code looks like:
With Me.lbxMemberProperty
.Additem
.List(.ListCount - 1, 0) = .ListCount
'...some more columns feeded
End With
Where it should be like:
With Me.lbxMemberProperty
.Additem .ListCount
'.List(.ListCount - 1, 0) = .ListCount ' this line is just not needed now
'...some more columns feeded
End With
I really don't understand why you are not getting compiling errors while I do (me on MsOffice 2019 x86, on Win10 x64); but to me your syntaxis is not good in that AddItem issue.
Some guide on List array feeding here: https://www.excelguru.ca/content.php?168-Fill-MultiColumn-Listbox-With-Worksheet-Range
More running errors, feeding the lists from a range can halt some type missmatch error, that could be solved using the .Value or .Value2 attribute, for example on the following userforms (FrmJointcoord, frmMemberProperty, frmTrussSupportdata, frmTrussJointload,...), the UserForm_Initialize procedures are feeding the list control from Excel ranges (use search for: ".List(*) = Sheets", with pattern matching to get all the occurrences)
I had to replace the Replace(Time, ":", "") sentence with Replace(VBA.Time, ":", "") on the ExportReportToword procedure because there is a library declared by you that I could not reach to edit (password locked) and I have not installed on my PC, so it's bugging with the VBA own Scripting library functions.
In the frmTrussMemberProperty userform there is a txtEdit control that does not exists (by I pressume it to be the so called txtEditMem, although not pretty sure about this). Also the ltvMemberProperty does not exists, so I assume the ltvMemberProperty_BeforeLabelEdit and ltvMemberProperty_ItemClick procedures should be commented out (it seems to be a renamed control).
Finally, I could not yet determine which Sheet should be called on DrawingAreaAdd procedure while recalling the AddCoodSystem subprocedure, so I commented out until I guess the right variable value to feed there.
On Sheet9 (ColumnDesign) there is no ColumnDesign procedure declared for PlotChart
Amending the code as stated here will, code compile without errors and the macro file will run perfect.
Kind regards, and very nice work.
P.D. as per the PRO version, although I appreciate your effort converting the code to C#, I really enjoy the Excel one better, as it serves my purposes of learning the guts behind the direct stiffness method, and is way more portable. Not to say about the .EXE issue. If I can manage to get this refactored to handle the FEM thing it will be a beautiful app (I know that it's in spanish, -which I'm confident with XD-, but something like it is shown on that work is my objective).
sorry, I forget to close the bold thing on the first paragraph…
More things that I have ammended:
on ClTrussStructure –> MemberEndforceLocal, I have to separate the declaration of the variable from the redimension of it (Althought the ReDim can also allocate some memory for the variable, is not the way to do it, and should be done in two steps when dealing with Variant types)
Dim ElmatLoc(): ReDim ElmatLoc(2, 2, NM)
Dim EldispLoc(): ReDim EldispLoc(2, NM)
Also, this two variables where declared as Dim, but somehow they should be declared as Public to be reached by other modules:
Public StrtTime As Date
Public Counter As Date
I have been tidying a bit the code, just for me to understand how it works, but not yet changed anything of the macro internal operation, so I can still email you the workbook.
Hello, the truss analysis calculator isn’t working. It always says “can’t find library”
Can you send me the correct version ?
thankyou for your help in advance
Can you send me the correct version ?
thankyou for your help in advance
Hi Enrique,
Happy to know that you solved your problem out.
I will update the file to solve the compile errors.
Thanks for your feedback.
RK
Hello, the truss analysis calculator isn’t working. It always says “can’t find library”
good
Hi Rodrigue,
thank you for such an interesting and rich program.
I really love it and with it , I could have learned a lot about VBA software building.
By the way, I think exporting the member local matrix, global structure matrixes into a sheet would be great too.
such a suggestion !
In the other side, i’ll work on that too.
thanks again.
Dear Jonathan,
Thank you.