yes i have tested this you are right, if the public declaration is in the workbook module with the workbook_open code.
However, leave this workbook_open code where it is and put the public declaration in a new module (right click the workbook in the project browser of the VBA gui and select "insert > module" to get one of these)... i have tested and it works this way.