You're on the right track. Instead of producing a MsgBox literal with the future date, compute a Calendar2 date from the expression
DateAdd(IntervalType, Number,FirstDate).
Where are the holidays? If they are in a database, you can select all the records, create a recordset and loop thru each one. If the holiday is greater than or equal to the Calendar1 date
AND less than or equal to the Calendar2 date, use the
DateAdd function to add 1 to the Calendar2 date, effectively skipping the holiday.
For the final calculation, use the
WeekDay function to determine if Calendar2 falls on a weekend. If Saturday add 2 or if Sunday add 1 with the
DateAdd function to push the Calendar2 date to a weekday (Monday).
PS. VBA (or any language for that matter) knows nothing about the real word and does not understand the concept of holidays or weekends. If you need to completely eliminate weekend dates from your calculations, it gets more complicated.