Hi Crazyec ,
Here is the code to do it. Hope this helps. This is by Joseph Huntley

)
Just cut and paste the code. Make sure that you have atleast one menu created..doesn't matter
if that main menu has sub menu or not. If you have any question than do let me know. Thanks
Private Sub Form_Load()
Dim lngMenu As Long, lngNewMenu As Long, lngNewSubMenu As Long
''Assign new menu's item IDs. This can be any
''number as long as the application doesn't have
''a menu with the same item ID.
gDynSubMenu1& = 70
gDynSubMenu2& = 71
gDynSubMenu3& = 72
gDynSubMenu4& = 73
gDynSubMenu5& = 74
''Get the form's menu handle
lngMenu& = GetMenu(Me.hwnd)
''Create a new popup menu to add our menus to.
lngNewMenu& = CreatePopupMenu
''Now insert it into the place where a second menu
''is supposed to be on our form. (this is why the
''second parameter is 1 and not 0.
''NOTE: The MF_POPUP flag is used ONLY when inserting
''a new popup menu or new sub menu using CreatePopupMenu.
''When using MF_POPUP, the argument for the new item ID
''should contain the handle to the new popup menu, as shown below.
''You can use MF_SEPARATOR (without MF_STRING) if you want to add
''a separator line. When you do this, use vbNullString as the lpNewItem
''parameter.
Call InsertMenu(lngMenu&, 1&, MF_POPUP Or MF_STRING Or MF_BYPOSITION, lngNewMenu&, "Dynamic Menu"
''Now add the sub menus
Call InsertMenu(lngNewMenu&, 0&, MF_STRING Or MF_BYPOSITION, gDynSubMenu1&, "Dynamic Sub Menu 1"

Call InsertMenu(lngNewMenu&, 1&, MF_STRING Or MF_BYPOSITION, gDynSubMenu2&, "Dynamic Sub Menu 2"
''The same way you create a new menu on the menu bar
''is the same way you create a new sub-submenu.
lngNewSubMenu& = CreatePopupMenu
Call InsertMenu(lngNewMenu&, 2&, MF_STRING Or MF_BYPOSITION Or MF_POPUP, lngNewSubMenu&, "Dynamic Sub-Submenu"
''Add two menus to our sub-submenu
Call InsertMenu(lngNewSubMenu&, 0&, MF_STRING Or MF_BYPOSITION, gDynSubMenu3&, "Dynamic Sub Menu 3"

Call InsertMenu(lngNewSubMenu&, 1&, MF_STRING Or MF_BYPOSITION, gDynSubMenu4&, "Dynamic Sub Menu 4"
''Now add one more menu to our original menu.
Call InsertMenu(lngNewMenu&, 3&, MF_STRING Or MF_BYPOSITION, gDynSubMenu5&, "Dynamic Sub Menu 5"
''Now we want to know if it was clicked, right?
''So we subclass it by replacing the old window
''procedure with our own.
''Get the original window procedure, so we can call
''it and we can give it back when our program is done.
gOldProc& = GetWindowLong(Me.hwnd, GWL_WNDPROC)
''Now replace the old window procedure
Call SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf MenuProc)
''Now whenever a window message is sent to the form
''it sends it to MenuProc
End Sub
'ADD THE FOLLOWING CODE IN A MODULE
'====================================
Public Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Public Declare Function CreatePopupMenu Lib "user32" () As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Public Const MF_BYPOSITION = &H400&
Public Const MF_POPUP = &H10&
Public Const MF_STRING = &H0&
Public Const GWL_WNDPROC = (-4)
Public Const WM_COMMAND = &H111
Public Const WM_CLOSE = &H10
''Variables to store our dynamic menu's item IDs
Public gDynSubMenu1 As Long
Public gDynSubMenu2 As Long
Public gDynSubMenu3 As Long
Public gDynSubMenu4 As Long
Public gDynSubMenu5 As Long
''Variable to hold the address of the old window procedure
Public gOldProc As Long
Public Function MenuProc(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case wMsg&
Case WM_CLOSE:
''User has closed the window, so we should stop
''subclassing immediately! We do this by handing
''back the original window procedure.
Call SetWindowLong(hwnd&, GWL_WNDPROC, gOldProc&)
Case WM_COMMAND:
''WM_COMMAND is sent to the window
''whenever someone clicks a menu.
''The menu's item ID is stored in wParam.
Select Case wParam&
Case gDynSubMenu1&
Call MsgBox("You clicked Dynamic Sub Menu 1!", vbExclamation)
Case gDynSubMenu2&
Call MsgBox("You clicked Dynamic Sub Menu 2!", vbExclamation)
Case gDynSubMenu3&
Call MsgBox("You clicked Dynamic Sub Menu 3!", vbExclamation)
Case gDynSubMenu4&
Call MsgBox("You clicked Dynamic Sub Menu 4!", vbExclamation)
Case gDynSubMenu5&
Call MsgBox("You clicked Dynamic Sub Menu 5!", vbExclamation)
End Select
End Select
''Call original window procedure for default processing.
MenuProc = CallWindowProc(gOldProc&, hwnd&, wMsg&, wParam&, lParam&)
End Function
Murali Bala