Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Function oder Sub referenzieren?

Function oder Sub referenzieren?
07.03.2008 14:43:00
Christian
Kann man unter VBA (von Office 2003) eine selbstgeschriebene
"Sub" oder "Function" in anderen "Subs/Functionen" referenzieren?
Habe mal folgendes Beispiel probiert, was in anderen Sprachen ähnlich funktioniert, in VBA aber _
nicht:

Sub testen
dim FRef() as integer
set FRef = Zahl1
debug.print FRef
End Sub



Function Zahl1() as integer
Zahl1 = 12345
End Function


Gibt es in VBA grundsätzlich nicht die Möglichkeit Prozeduren zu referenzieren? Oder geht das nur grundsätzlich anders, als ich das versucht habe?
Vielen Dank schon mal!
Gruß Chris

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Function oder Sub referenzieren?
07.03.2008 14:52:00
Horst
Hi,

Sub testen
dim FRef as integer
FRef = Zahl1
debug.print FRef
End Sub



Function Zahl1() as integer
Zahl1 = 12345
End Function


mfg Horst

AW: Function oder Sub referenzieren?
07.03.2008 14:56:00
Christian
@ Horst: Die Funktion Zahl1 wird in deinem Beispiel NICHT referenziert!!! Die Variable FRef erhält von der Funktion Zahl1 den Wert 12345!! Das ist keine Referenz!! Trotzdem Danke für die Mühe, auch wenn mir das nicht weiterhilft.

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

Anzeige
AW: Function oder Sub referenzieren? Nachtrag
07.03.2008 16:00:07
Nepumuk
Hi,
du kannst dir die Adressen aber ausgeben lassen. Beispiel:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub test1()
    Beep
End Sub

Public Sub test2()
    Call test3(AddressOf test1)
    Call test3(AddressOf test2)
    Call test3(AddressOf test3)
End Sub

Public Sub test3(lpFunc As Long)
    Debug.Print lpFunc
End Sub

Gruß
Nepumuk

Anzeige
AW: Function oder Sub referenzieren?
07.03.2008 14:57:12
Nepumuk
Hallo Chris,
du hast zwei eklatante Fehler drin.
1. Die Deklaration von FRef als dynamisches Array wäre ja noch in Ordnung, aber in dem Moment wo du eine Variable zuweisen willst, muss es 1. wenigsten eine Dimension haben und 2. musst du die Dimension angeben.
2. Mit Set erzeugst du einen Pointer auf ein Objekt. Dazu benötigst du 1. eine Objektvariable oder wenigstens eine Variable vom Typ Variant. Und 2. ein Objekt und keine einfache Intergervariable.
Versuch's mal so:
Sub testen()
    Dim FRef As Integer
    FRef = Zahl1
    Debug.Print FRef
End Sub

Function Zahl1() As Integer
    Zahl1 = 12345
End Function

Gruß
Nepumuk

Anzeige
AW: Function oder Sub referenzieren?
07.03.2008 15:01:00
Christian
@ Nepomuk: Richtig!! Das hast du sehr gut erkannt :-)
Meine Frage ist aber nun: Wie lasse ich einen Pointer auf eine Funktion zeigen? (Was dem Vorgang des Referenzierens ja entsprechen würde)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige