Using the Workbook_Open event, you can either write your macro here, or you
can call it using Application.Run
Technically, it makes no difference. The advantage of placing the macro
somewhere else would be if its in another workbook, or you want to be able to
call it via other means (such as a button in your workbook.)
Now, to answer your question. You have the option of simply stating the
macro's name IF you've alwasy used distinct names (don't have same name macro
in module1 and module 2.)
If your macro name is "My_Macro" is in Module1, of workbook "My book.xls"
the 3 ways of calling the macro with increasing levels of refinement:
Application.Run ("MyMacro")
Application.Run ("Module1.MyMacro")
Application.Run ("'My book.xls'!Module1.MyMacro")
Callout which module/sheet you want if you have duplicate macro names.
Callout which workbook to use if calling a macro from another open workbook,
or the possibility exists that another open workbook has same macro name.
So, altogether
Private Sub Workbook_Open
Application.Run ("MyMacro")
'some other coding
MsgBox "Hi"
End Sub
This macro will cause the MyMacro to run when opened, and will then display
a msgbox. (illustrating the different ways to accomplish same goal)