por el tema de la rueda proba con este codigo
En un Modulo Bas
Option Explicit
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private 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
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetProp Lib "user32.dll" Alias "GetPropA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function SetProp Lib "user32.dll" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
Public Const GWL_WNDPROC = (-4)
Private Const WM_MOUSEWHEEL As Long = &H20A
Private Const WM_KEYDOWN As Long = &H100
Private Const WM_KEYUP As Long = &H101
Public Sub SubClassReport(hwnd As Long)
Dim PrevProc As Long
PrevProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
SetProp hwnd, "PrevProc", PrevProc
End Sub
Public Sub UnSubClassReport(hwnd As Long)
SetWindowLong hwnd, GWL_WNDPROC, GetProp(hwnd, "PrevProc")
End Sub
Private Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim Handle As Long
Dim hDisplayFrame As Long
WindowProc = CallWindowProc(GetProp(hwnd, "PrevProc"), hwnd, uMsg, wParam, lParam)
If uMsg = WM_MOUSEWHEEL Then
Handle = FindWindowEx(hwnd, ByVal 0&, "MSDataReportRuntimeWndClass6.0", vbNullString)
hDisplayFrame = FindWindowEx(Handle, ByVal 0&, "REPT_DISPLAYFRAME", vbNullString)
If hDisplayFrame = 0 Then Exit Function
If wParam < 0 Then
Call SendMessage(hDisplayFrame, WM_KEYDOWN, ByVal vbKeyDown, ByVal CLng(0))
Call SendMessage(hDisplayFrame, WM_KEYUP, ByVal vbKeyDown, ByVal CLng(0))
Else
Call SendMessage(hDisplayFrame, WM_KEYDOWN, ByVal vbKeyUp, ByVal CLng(0))
Call SendMessage(hDisplayFrame, WM_KEYUP, ByVal vbKeyUp, ByVal CLng(0))
End If
End If
End Function
y dentro de cada data report
Private Sub DataReport_Initialize()
SubClassReport Me.hwnd
End Sub
Private Sub DataReport_Terminate()
UnSubClassReport Me.hwnd
End Sub
Saludos.