AW: Function oder Sub referenzieren?
07.03.2008 15:13:48
Nepumuk
Hallo Chris,
aus deiner Antwort an Horst entnehme ich, dass du was ganz anderes suchst.
Dazu gibt es in VB den AddressOf - Operator. Den kannst du aber so in VB selbst nicht verwenden, sondern die Adresse (Pointer) einer Prozedur wird damit an eine DLL übergeben. Mal ein Beispiel:
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Private Declare Function KillTimer Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nIDEvent As Long) As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Const GC_CLASSNAMEMSEXCEL = "XLMAIN"
Private hWnd As Long
Public Sub prcStartTimer()
hWnd = FindWindow(GC_CLASSNAMEMSEXCEL, Application.Caption)
Call SetTimer(hWnd, 0&, 1000&, AddressOf prcTimer)
End Sub
Public Sub prcStopTimer()
Call KillTimer(hWnd, 0)
End Sub
Private Sub prcTimer(ByVal hWnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long)
On Error Resume Next
Beep
End Sub
Hier wird per AddressOf ein Pointer auf die Prozedur "prcTimer" an die Funktion "SetTimer" in der DLL "user32" übergeben.
In solchen Prozeduren müsse Fehler grundsätzlich abgefangen werden, da ein VB - Fehler in der DLL nicht verarbeitet werden kann und es dir das Programm, in unseren Fall Excel, ins Nirwana schickt.
Gruß
Nepumuk