You can do it using a Hook, here is the code:
This code will hook one window if you want to hook more than one you will have to store the LastProcedure addresses of each form to use it with the CallWindowProc and to unhook at the end.
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 SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Private Const WM_MOUSEWHEEL = &H20A
Dim Last as Long
Dim FormWnd as Long
'Here is the hook
FormWnd = FormName.hWnd
Last = SetWindowLong(FormWnd, GWL_WNDPROC, AddressOf MouseWheelWndProc)
'Here is the unhook
Call SetWindowLong(FormWnd, GWL_WNDPROC, Last) 'You must unhook the hook before exiting or your program will crash!
'Here is the function MouseWheelWndProc, it must be definied in a public modue
Public Function MouseWheelWndProc (ByVal hWnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If iMsg = WM_MOUSEWHEEL And hWnd = FormWnd Then
'Call a function in FormName
'To see if the wheel is going up or down: Value = (lParam And &HFFFF&)
MouseWheelWndProc = CallWindowProc(Last, hWnd, iMsg, wParam, lParam)
I think you can find some samples on google.