Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Funktionen aufrufen

Funktionen aufrufen
09.11.2002 16:10:00
Otto Sauermann
Schönen Tag!

Ich hätte mal eine ganz peinliche Frage:
Ich habe schon öfters einen Code gefunden, der als Funktion dargestellt war.
Jetzt quält mich die Frage:
Wenn ich diese Funktion in ein Excel-Modul einfüge und diese dann ausführen will (mit F5 oder Einzelschritt F8), dann geht das nicht!
Weiß bitte jemand, was ich tun muß, um diese Funktion "funktionsfähig" zu machen? Nachfolgend habe ich euch eine solche Funktion hinenkopiert, vielleicht kann mir jemand helfen, indem er mir schreibt, wie ich diesen Code ausführen kann!

Public Function InUnterVerzSuchen(VerzPfad As String, DateiTyp As String, Attrib As Integer)
Dim VerzName As String, DateiName As String, VerzListe() As String, DateiNr As Integer
Dim VerzNr As Integer, DateiListe() As String, TempListe, Nr As Integer

' Liste mit Dateinamen erstellen
DateiName = Dir$(VerzPfad & "\" & DateiTyp, Attrib)
DateiNr = 0

While DateiName <> vbNullString
If (DateiName <> ".") And (DateiName <> "..") Then
DateiNr = DateiNr + 1
ReDim Preserve DateiListe(1 To DateiNr)
DateiListe(DateiNr) = VerzPfad & "\" & DateiName
End If
DateiName = Dir$()
Wend

' Liste mit Unterverzeichnissen erstellen
VerzNr = 0
VerzName = Dir$(VerzPfad & "\", Attrib Or vbDirectory)
While VerzName <> vbNullString
If (VerzName <> ".") And (VerzName <> "..") Then
' Handelt es sich um ein Verzeichnis ?
If GetAttr(VerzPfad & "\" & VerzName) And vbDirectory Then
VerzNr = VerzNr + 1
ReDim Preserve VerzListe(1 To VerzNr)
VerzListe(VerzNr) = VerzName
End If
End If
VerzName = Dir$() ' Nächsten Datei- oder Verzeichnisnamen holen
Wend

' Rekursiver Aufruf, um Unterverzeichnisse zu durchsuchen
For VerzNr = 1 To VerzNr
TempListe = InUnterVerzSuchen(VerzPfad & "\" & VerzListe(VerzNr), DateiTyp, Attrib)
If IsArray(TempListe) Then
For Nr = LBound(TempListe) To UBound(TempListe)
DateiNr = DateiNr + 1
ReDim Preserve DateiListe(1 To DateiNr)
DateiListe(DateiNr) = TempListe(Nr)
Next Nr
End If
Next VerzNr
If DateiNr = 0 Then InUnterVerzSuchen = False Else InUnterVerzSuchen = DateiListe()
End Function

Vielen Dank für Eure Bemühungen,
Liebe Grüße und schönes Wochenende wünscht euch
Otto!

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Funktionen aufrufen
09.11.2002 16:27:13
Claus Müller
Sie müssen nur die Funktion im Direktfenster (aktivieren mit STRG+G) mit "?" aufrufen.
Also:
? InUnterVerzSuchen(..., ..., ...)
ins Direktfenster schreiben und Enter drücken.
Im Code können Sie dann auch einen Haltepunkt setzen um mit F8 zu debuggen.
Ich hoffe das war die Frage?
Gruß C.M.
Anzeige
Re: Funktionen aufrufen
09.11.2002 16:42:10
Otto Sauermann
Schönen Dank für die Antwort!

Leider funktioniert es mit dem vorhin angeführten Beispiel noch immer nicht - es rührt sich gar nix.

Im Gegensatz dazu, wenn ich folgende Funktion ausprobiere, dann geht's:

~
Function Test()
Cells(1,1) = "Hallo"
End Function
~

Warum das andere Beispiel nicht funktioniert, bleibt mir nach wie vor ein Rätsel! Ich glaube, da fehlt noch irgendwas, damit ich diese Funktion aufrufen kann, denn wenn ich mein hier funktionierendes Beispiel so eingebe, dann geht's auch nicht:

~
Function Test(text as string)
Cells(1,1) = "Hallo"
End Function
~

Kann mir bitte noch jemand helfen?

Vielen, vielen Dank im voraus für alle Antworten!
Otto!

Anzeige
Re: Funktionen aufrufen
09.11.2002 16:45:57
PeterW
Hallo Otto,

Functions werden Werte übergeben und dienen dazu, Rückgabewerte zu liefern. Wenn Du nur Aktionen ausführen willst nimm normale Subs.

Gruß
Peter

Re: Funktionen aufrufen
09.11.2002 16:48:21
Michael Scheffler
Hallo Otto,

Peter hat recht, außerdem muss eine Function, die aus einer Zelle aus aufgreufen wir, am Anfang:

Application.Volatile

enthalten.

Gruß

Micha

Anzeige
Re: Funktionen aufrufen
09.11.2002 17:18:10
Otto Sauermann
Hallo, an Alle!

Schönen Dank für Eure Hilfe,
inzwischen bin ich auch draufgekommen wie man eine Funktion aufruft.
Um euch das nicht vorzuenthalten, schicke ich den Code mit, vielleicht gibt's mal jemanden, den mein Problem auch "bewegt"!


~
'---- Funktion ----
'Existiert eine Datei?

Public Function FileExists(File As String) As Boolean
On Error Resume Next
FileExists = False
FileExists = Dir(File) <> ""
End Function

' ---- Aufruf der Funktion ----

Sub Aufruf()
Datei = Cells(1, 1).Value
FileExists (Datei)
If Cells(1, 1) = Datei Then
MsgBox ("Datei vorhanden")
Else
MsgBox ("nicht vorhanden")
End If
End Sub
~

Schönen Dank nocheinmal, und schönes Wochenende wünscht euch

Otto!

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Funktionen in Excel VBA aufrufen


Schritt-für-Schritt-Anleitung

  1. Funktion erstellen: Öffne den VBA-Editor (ALT + F11) und füge einen neuen Modul hinzu. Schreibe deine Funktion, zum Beispiel:

    Public Function Test() As String
       Test = "Hallo"
    End Function
  2. Funktion im Direktfenster aufrufen: Aktiviere das Direktfenster (STRG + G) und rufe die Funktion mit ? Test auf. Drücke ENTER.

  3. Funktion in Zelle verwenden: Um die Funktion in einer Zelle zu verwenden, schreibe in eine Zelle:

    =Test()
  4. Funktion mit Argumenten aufrufen: Bei Funktionen, die Parameter benötigen, wie z.B.:

    Public Function Addiere(a As Double, b As Double) As Double
       Addiere = a + b
    End Function

    kannst du sie so in einer Zelle aufrufen:

    =Addiere(5, 10)

Häufige Fehler und Lösungen

  • Funktion wird nicht ausgeführt: Stelle sicher, dass die Funktion als Public deklariert ist. Nur Public Functions können von anderen Modulen oder aus dem Excel-Blatt aufgerufen werden.

  • Excel-Funktionen werden nicht ausgeführt: Wenn du eine Funktion aus dem Excel-Blatt aufrufst und sie nicht das erwartete Ergebnis liefert, überprüfe, ob die Funktion das korrekte Rückgabewertformat hat.

  • Debugging: Setze Haltepunkte im Code (F9) und führe die Funktion mit F8 im Einzelschritt aus, um den Fehler zu identifizieren.


Alternative Methoden

  • Sub-Prozeduren statt Funktionen: Wenn du nur Aktionen (wie das Schreiben in Zellen) durchführen möchtest, verwende Sub-Prozeduren anstelle von Funktionen. Zum Beispiel:

    Sub SchreibeHallo()
       Cells(1, 1).Value = "Hallo"
    End Sub
  • Zugriff auf Funktionen aus Access: Du kannst auch Access VBA Funktionen aufrufen, indem du den Verweis auf die Excel-Bibliothek im Access-Projekt einfügst.


Praktische Beispiele

  1. Dateiüberprüfung:

    Public Function FileExists(File As String) As Boolean
       On Error Resume Next
       FileExists = Dir(File) <> ""
    End Function
    
    Sub Aufruf()
       Dim Datei As String
       Datei = Cells(1, 1).Value
       If FileExists(Datei) Then
           MsgBox "Datei vorhanden"
       Else
           MsgBox "Nicht vorhanden"
       End If
    End Sub
  2. Summenberechnung:

    Public Function BerechneSumme(a As Double, b As Double) As Double
       BerechneSumme = a + b
    End Function

Tipps für Profis

  • Application.Volatile verwenden: Wenn deine Funktion auf Zellen zugreift, füge am Anfang Application.Volatile hinzu, damit Excel die Funktion bei jeder Berechnung erneut aufruft.

  • Fehlerbehandlung: Verwende On Error um sicherzustellen, dass dein Code auch bei Fehlern stabil bleibt. Zum Beispiel:

    On Error GoTo FehlerHandler

FAQ: Häufige Fragen

1. Wie kann ich eine VBA-Funktion in einer Excel-Zelle aufrufen?
Du kannst eine VBA-Funktion in einer Zelle aufrufen, indem du die Funktionssyntax wie bei einer normalen Excel-Funktion verwendest, z.B. =Test().

2. Warum funktioniert mein Funktionsaufruf nicht?
Stelle sicher, dass die Funktion als Public deklariert ist und dass du die richtigen Parameter übergibst, wenn die Funktion welche erwartet.

3. Was ist der Unterschied zwischen einer Funktion und einer Sub-Prozedur?
Eine Funktion gibt einen Wert zurück, während eine Sub-Prozedur eine Aktion ausführt, ohne einen Wert zurückzugeben. Wenn du das Excel VBA Funktion aufrufen möchtest, wähle die passende Methode je nach Bedarf.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige