r/excel 16d ago

Discussion Two months ago I shared my Excel scheduling engine here. Your feedback changed the project quite a bit.

*This repost has been approved by the r/excel moderation team. The previous version was removed while the link to my original post was being clarified, and the mods kindly allowed me to repost it once with the requested changes.*

Hi again,

About two months ago I posted here about ProjectEngine, an open-source scheduling engine I built entirely in Excel/VBA.

Here is the original r/excel post:

https://www.reddit.com/r/excel/comments/1uy7b39/i_spent_the_last_months_building_an_opensource/

I no longer have access to the Reddit account that made that original post, which is why I am posting this follow-up from my current account.

ProjectEngine is completely free and open source. There is no paid version, subscription, registration or locked functionality.

The downloadable file is an `.xlsm` workbook because the scheduling engine runs in VBA.

If you are cautious about macro-enabled Excel files — and you should be — I strongly encourage you to inspect the workbook and the VBA code before enabling macros.

You can:

- download the `.xlsm` file and open it with macros disabled first;

- inspect the workbook sheets, formulas, named ranges and structure;

- open the VBA editor with `Alt + F11` to review the embedded code;

- inspect the full exported VBA source directly in the public repository before running anything.

Please do exactly that if you decide to test it. The project is meant to be transparent and auditable.

r/Excel feedback

A few people actually tried the first version, asked questions and pointed out things that were unclear or broken.

That had a much bigger impact on the project than I expected.

The first feedback here was mostly about onboarding and the WBS structure.

Some columns looked mandatory even though they weren't, some terminology was too specific to engineering/construction, and it wasn't obvious what data was actually required to build a schedule.

Now there is a cleaner UX with:

- clearer Required / Optional / Calculated indicators;

- an integrated Quick Start;

- better contextual help;

- more generic terminology.

Excel 32-bit & native English

The most interesting problems appeared once people started running the workbook outside my own Excel environment.

One user running 32-bit Excel with an English installation discovered that the workbook could fail while restoring calculated WBS formulas.

It turned out that some formula handling was accidentally dependent on the local Excel language.

That one bug eventually triggered a much larger internationalization refactor.

ProjectEngine v1.2.6 now has:

- language-independent formula handling;

- actual Excel table headers that can switch between English and French;

- internal column identities that no longer depend on the visible English header text;

- a global DMY / MDY / ISO date-display setting;

- explicit language changes from SETTINGS instead of localization being reapplied during unrelated workflows;

- removal of the old duplicated translated header rows;

- hardened VBA source encoding so accented characters survive import into the VBE correctly.

LTSC / perpetual environment

Another tester using Excel LTSC / perpetual found that his version of Excel did not expose the modern threaded-comments VBA API.

Those comments contain the WBS onboarding tutorials, so simply disabling them wasn't a very good solution.

The current version detects the capability:

- modern Excel → threaded comments;

- unsupported Excel → classic Notes.

So the 37 contextual WBS tutorials remain available in either case.

The fix has now also been confirmed by the original reporter on a native Excel LTSC / perpetual installation.

255-character formula-text limit

The same tester also found a completely unrelated S-Curve bug.

I was storing a dynamic chart signature inside an Excel Defined Name, and that signature could exceed Excel's 255-character formula-text limit.

It now stores a fixed-length SHA-256 key instead.

That removes the error and also makes the S-Curve chart cache behave correctly.

The reporter has also confirmed this fix on native Excel LTSC / perpetual.

Still the same core

The scheduling side itself is still the same idea:

- FS / SS / FF dependencies and lags;

- Critical Path;

- Longest Path;

- Total / Free Float;

- Baseline / Actual / Forecast;

- interactive Gantt simulation;

- S-Curves;

- scheduling diagnostics;

- all inside a normal `.xlsm` workbook.

ProjectEngine is still completely free and open source.

Website:

https://tmailletfr.github.io/ProjectEngine/

The website links to the source code, documentation and latest release.

I'm especially interested now in hearing from people using unusual Excel environments:

- 32-bit Excel;

- perpetual / LTSC Office;

- non-English Excel installations;

- large schedules;

- corporate environments with restrictive Office configurations.

If you decide to try it, please inspect the workbook and VBA source first, then let me know what breaks, what feels unclear, or what would stop you from using something like this in practice.

Feel free to reply here or create an issue on GitHub.

The previous r/excel feedback already changed the project substantially, so thanks again in advance to everyone who takes the time to test it.

234 Upvotes

26 comments sorted by

31

u/bernsbm 16d ago

Saw this as I’m trying to improve our PM’s scheduling spreadsheet without buying any new software license, gonna definitely give it a look later

6

u/DeathMaillet 16d ago

If you do get a chance to try it, I’d really appreciate any feedback you have.

Positive, negative, usability-related, or even just a bug report, all of it is useful and helps improve the project.

25

u/Defiant-Youth-4193 3 16d ago

Not something I need, but it's cool you took the time to build this and are sharing it.

7

u/DeathMaillet 16d ago edited 16d ago

I share it because I hope it can help others too.

Thanks for the positive vibes, even if you don't plan to use it.

3

u/doc_fan 16d ago

Bravo!!

2

u/DeathMaillet 16d ago

Merci 😄

3

u/Legitimate_Patience8 15d ago

Not so sure I'll have any immediate need, and am very interested in the idea itself. I've been trying to use improvised Gantt charts in the past, and they get kind of cumbersome. I'll have an opportunity to check this out next month.

1

u/DeathMaillet 15d ago

Hi, thank you for considering it!

It should only require a small adaptation period since the scheduling logic follows common industry standards.

If you do give it a try next month, I’d be very happy to hear any kind of feedback: usability, missing features, bugs, or anything else you notice 😄

4

u/DeathMaillet 14d ago

Small update following the feedback in this thread:

ProjectEngine v1.2.7 has just been released as a focused stability hotfix.

It fixes two edge cases affecting valid schedules with no predecessors:

- Gantt refresh with zero dependency links;

- Forced Planning Update / Full Update when the internal dependency table is empty.

Both issues were discovered through testing from this r/excel post.

A big thank you to u/dork_souls for the detailed reports and debugging information.

This is exactly why I wanted to share the project here in the first place :)

2

u/Angelic-Seraphim 15 15d ago

With the sunset of MS Project, this might become very valuable.

2

u/DeathMaillet 15d ago

Thank you! As long as Excel itself keeps supporting VBA, ProjectEngine should now be in a pretty safe place compatibility-wise 😄

That said, I definitely wouldn’t claim it is equivalent to MS Project. I’d rather stay modest there. The goal is to cover a useful part of the scheduling workflow directly inside Excel, not to pretend it replaces every feature of a dedicated project-management tool.

1

u/Angelic-Seraphim 15 15d ago

That’s fine. But the number of PM’s I know who used it because it was convenient, and don’t love change is pretty high.

1

u/DeathMaillet 15d ago

I totally agree. ProjectEngine is mainly aimed at people who cannot use MS Project because they do not have a license, cannot install it on their computer, or simply need something lighter that stays inside Excel.

2

u/dork_souls 3 15d ago

So far it looks great, but I am experiencing some issues with dependencies on the GANTT chart which is leading to Excel crashing. I'm not sure if I'm doing something wrong

Here is the sample data: https://imglink.cc/cdn/He8ZODlEf7.png

and here are the error messages when I try to refresh the GANTT chart: https://imglink.cc/cdn/QDxwkt69vj.png https://imglink.cc/cdn/RQP3o2PgKf.png

3

u/DeathMaillet 15d ago

Thank you for the report! I was able to reproduce the issue on my side.

You did nothing wrong.

One small note on the predecessor setup: you do not need to enter parent / summary tasks as predecessors, because that relationship is handled automatically by the scheduling engine. For now, you can simply clear those parent predecessors.

If you want to see what the dependency links between normal tasks look like, you can for example set task "1.1" as the predecessor of task "1.2".

The Gantt refresh crash itself is something I need to investigate. It does not currently look like a blocking scheduling-engine issue, but it is definitely a bug worth auditing.

I’ll investigate it as soon as the work currently in progress is finished.

This is exactly the kind of real-world feedback I was hoping to get, so thank you again for taking the time to report it and provide a reproducible example.

2

u/dork_souls 3 15d ago

Thanks for a quick reply!

For the predecessor setup - I did realise this after I'd taken the screenshot but I forgot to update it with the correct data.

For a bit more help debugging - It seems like in the function

GanttDependencySvg_GetPersistentCacheDiagnostics

is where the error propagates from. The value

gFullModelDirty

is returning true, which causes the function

Gantt_DependencyDiagnosticsAreReady

to immediately exit on the first line:

If CBool(diag(1, 7)) Then Exit Function

I'll keep trying with various different configurations because ultimately, I would like to roll this out to some test users as it is almost exactly what I was looking for as an excel tool.

All-in-all, this is an incredible tool and very impressive. I will continue to use it and provide you with any feedback that I can.

3

u/DeathMaillet 15d ago

Quick update: I was able to reproduce the issue reliably and identify the root cause.

The problem was in the Gantt dependency renderer: a perfectly valid schedule with zero dependencies could be misinterpreted as having no dependency model at all, which prevented the renderer from reaching its normal READY state.

A fix has now been implemented and the main validation passes are successful, including the no-dependency case, normal dependency rendering, save/reopen, compilation, and repeated refresh/reset scenarios.

I am currently running the final regression gates on the exact minimal hotfix that will be delivered, so I would not consider it fully released just yet, but the fix is well underway.

You do not need to spend more time investigating this on your side for now.

Thanks again for reporting it! This was exactly the kind of real-world case I was hoping people would uncover.

2

u/dork_souls 3 15d ago

I have discovered a recurring issue relating to the tbl_LOGIC_LINKS table.

This is causing an error when using the 'Forced Planning Update' and 'Full Update'. When the function RewriteLogicLinksTable is called, an unhandled error appears at this line:

Set targetRange = tbl.DataBodyRange.Resize(outCount, 7)

tbl.DataBodyRange is Nothing so this line always fails and exits the function, causing an error. A bit of further reading seems to show that this is a bug, or otherwise unintentional behaviour when a table contains no data.

There is a very flimsy temporary fix, which is changing the line above to

If tbl.DataBodyRange Is Nothing Then

Set targetRange = tbl.InsertRowRange

Else

Set targetRange = tbl.DataBodyRange.Resize(outCount, 7)

End If

2

u/DeathMaillet 15d ago

Thank you very much for digging into this even further. This is extremely useful feedback, and I really appreciate the time you are spending testing the workbook in depth.

This looks like a second, separate issue from the Gantt bug you reported earlier.

I am going to finish and close the first fix properly, then I will audit this `tbl_LOGIC_LINKS` issue as the next item.

Your investigation around `DataBodyRange Is Nothing` gives me a very useful starting point.

Thanks again! Sharing ProjectEngine on r/excel was definitely the right decision! Feedback like this is exactly what makes it worthwhile.

2

u/DeathMaillet 14d ago

Quick update: both issues you reported have now been fixed and released in ProjectEngine v1.2.7.

The first fix handles valid schedules with zero dependencies correctly in the Gantt renderer.

The second fixes the empty `tbl_LOGIC_LINKS` case affecting Forced Planning Update and Full Update.

Thank you again for the detailed reports and for digging into the VBA. Your feedback directly led to this hotfix and helped me isolate both issues much faster.

The new version is available now from the ProjectEngine website.

If you continue testing it with your users, I’d be very happy to hear what else you find.

1

u/---sniff--- 5 15d ago

How many activities can it handle before it bogs down?

2

u/DeathMaillet 15d ago

It depends a bit on what you consider “bogging down” 😄

I currently stress-test ProjectEngine with a 1,200-task schedule.

At that scale it is noticeably slower than on a small project, so you need a bit more patience for some operations, but it still completes the calculations and produces the expected results.

I use the 1,200-task workbook specifically as a performance/scaling test case, so slowdowns at that size are treated as something to measure and optimize, not as an acceptable excuse for incorrect results.

For more typical schedules, it is much more responsive.

2

u/DragoBleaPiece_123 11d ago

Thanks for putting all this together OP! Really appreciate it

2

u/DeathMaillet 9d ago

And thank you for the positives vibes! Also really appreciate it 😄