Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Funktion aufrufen mit Rückgabewert

Funktion aufrufen mit Rückgabewert
16.03.2020 10:38:46
Patrick
Hallo Zusammen,
ich bin neu hier im Forum und auch in der Excel VBA Programmierung. In Access habe ich allerdings schon viel in VBA gemacht.
Hier meine Frage.
Ich habe eine Funktion geschrieben, die mir die Formatierung eines bestimmten Feldes ausgeben _ soll:

Function FormatAuslesen(strRange As String, strAusgabe As String)
Dim strColInt, strBolt As Boolean, strColText, strRahmen
If strAusgabe = "ColInt" Then
FormatAuslesen = Range(strRange).Interior.ColorIndex
Exit Function
End If
If strAusgabe = "Bolt" Then
FormatAuslesen = Range(strRange).Font.Bold
Exit Function
End If
If strAusgabe = "ColText" Then
FormatAuslesen = Range(strRange).Font.ColorIndex
Exit Function
End If
If strAusgabe = "Rahmen" Then
FormatAuslesen = Range(strRange).BorderAround
Exit Function
End If
FormatAuslesen = Null
End Function

Diese Funktion möchte ich nun aus einem _Sub_ heraus ansprechen um mir das jeweilig gewünschte Ergebnis zu holen. Hierzu habe ich in einem Tabellenblatt das Zielfeld benannt ("Form_Gewerk"). Alternativ lautet die Adresse des Feldes Steuerung!B26
Innerhalb meines Subs möchte ich mir nun aus der Funktion wie folgt den Wert für den ColorIndex der Zellfüllung abholen:
strRange = "Form_Gewerk"
strWert = FormatAuslesen(strRange, "ColInt")
Dabei bekomme ich aber den Laufzeitfehler 1004. Kann mir Da jemand helfen? Was mache ich falsch?
Vielen Dank und viele Grüße
Patrick
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Funktion aufrufen mit Rückgabewert
16.03.2020 11:11:16
Sigi
Hallo Patrick,
wenn "Form_Gewerk" ein Name für eine Zelle (Range) darstellt, dann musst du aus diesem String (denn es ist ein String!) erst noch einen Range erzeugen mit: Set XXXXX = Range(strRange)
Probier mal dies:
strRange = "Form_Gewerk"
Set Bereich = Range(strRange)
strWert = FormatAuslesen(strRange, "ColInt")
MsgBox strWert
Set Bereich = Nothing
Gruß
Sigi
Anzeige
AW: Funktion aufrufen mit Rückgabewert
16.03.2020 12:33:23
Patrick
Hallo Sigi,
danke für Deine Antwort, leider klappt das noch nicht ganz.
Muss ich "Bereich" nicht erst deklarieren? Ich habe SET Bereich as Range probiert. Klappt aber auch nicht.
Sollte ich im Formelaufruf dann nicht auch "Bereich" statt "strRange" verwenden? Sonst wäre das ganze vorher ja unnötig gewesen, oder? Hab ich alles versucht, gibt aber weiter Fehlermeldungen.
Und welche Form sollte den der Input in meine Funktion haben? Ist
Function FormatAuslesen(strRange As String, strAusgabe As String)
richtig?
Oder müsste ich strRange hier auch eher "as Range" definieren?
Anzeige
AW: Funktion aufrufen mit Rückgabewert
16.03.2020 14:19:21
Sigi
Hallo Patrick,
die Frage ist, was ist "strRange"? Wenn das ein String ist kann es nicht gehen. Deine Funktion erwartet einen Range!
Bsp.:
Sub ErmittleFormat()
Dim strRange As String
Dim strWert As Variant
Dim Zelle As Range
strRange = "B5"
Set Zelle = Range(strRange)
strWert = FormatAuslesen(strRange, "ColInt")
MsgBox "ColInt" & vbTab & strWert
strWert = FormatAuslesen(strRange, "Bolt")
MsgBox "Bolt" & vbTab & strWert
strWert = FormatAuslesen(strRange, "ColText")
MsgBox "ColText" & vbTab & strWert
Set Zelle = Nothing
End Sub
Sigi
Anzeige
AW: Funktion aufrufen mit Rückgabewert
16.03.2020 15:41:49
Patrick
Vielen Dank ich habe es jetzt wie folgt gelöst:
Function FormatAuslesen(rngRange As Range, strAusgabe As String) As Variant
Select Case strAusgabe
Case "ColInt"
FormatAuslesen = rngRange.Interior.ColorIndex
Case "Bold"
FormatAuslesen = rngRange.Font.Bold
Case "ColText"
FormatAuslesen = rngRange.Font.ColorIndex
Case "Rahmen"
FormatAuslesen = rngRange.BorderAround
Case Else
FormatAuslesen = ""
End Select
End Function

Aufruf:
Dim vRet As Variant
vRet = FormatAuslesen(rngRange:=ThisWorkbook.Names("Form_Gewerk").RefersToRange, strAusgabe:="ColInt")
MsgBox vRet
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Funktionen in Excel VBA richtig aufrufen und nutzen


Schritt-für-Schritt-Anleitung

  1. VBA-Funktion erstellen: Zuerst musst du eine Funktion erstellen, die einen Rückgabewert liefert. Hier ein Beispiel für eine Funktion, die die Formatierung eines bestimmten Zellbereichs ausliest:

    Function FormatAuslesen(rngRange As Range, strAusgabe As String) As Variant
        Select Case strAusgabe
            Case "ColInt"
                FormatAuslesen = rngRange.Interior.ColorIndex
            Case "Bold"
                FormatAuslesen = rngRange.Font.Bold
            Case "ColText"
                FormatAuslesen = rngRange.Font.ColorIndex
            Case "Rahmen"
                FormatAuslesen = rngRange.BorderAround
            Case Else
                FormatAuslesen = ""
        End Select
    End Function
  2. Subroutine erstellen: Erstelle eine Subroutine, um die Funktion aufzurufen. Du kannst dabei den Zellbereich mithilfe von ThisWorkbook.Names aufrufen:

    Sub ErmittleFormat()
        Dim vRet As Variant
        vRet = FormatAuslesen(rngRange:=ThisWorkbook.Names("Form_Gewerk").RefersToRange, strAusgabe:="ColInt")
        MsgBox vRet
    End Sub
  3. Testen: Führe die Subroutine aus, um den Rückgabewert der Funktion anzuzeigen.


Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler tritt häufig auf, wenn der übergebene Zellbereich nicht korrekt ist. Stelle sicher, dass der Name ("Form_Gewerk") tatsächlich existiert und auf einen gültigen Bereich verweist.

  • Typenkonflikt: Wenn du strRange als String übergibst, aber die Funktion einen Range erwartet, führt das zu Problemen. Ändere die Parameterdefinition in der Funktion auf As Range.

  • Nicht deklarierte Variablen: Achte darauf, dass alle verwendeten Variablen ordnungsgemäß deklariert sind, um Fehler zu vermeiden.


Alternative Methoden

Eine andere Methode, um die Formatierung auszulesen, ist die Verwendung von Application.WorksheetFunction. Hier ein Beispiel:

Sub ErmittleFormatAlternative()
    Dim vRet As Variant
    vRet = Application.WorksheetFunction.Index(ThisWorkbook.Names("Form_Gewerk").RefersToRange, 1, 1).Interior.ColorIndex
    MsgBox vRet
End Sub

Diese Methode ist weniger flexibel, kann jedoch in bestimmten Situationen nützlich sein.


Praktische Beispiele

  • Beispiel für die Verwendung der Funktion:

    Sub BeispielVerwendung()
        Dim rng As Range
        Set rng = ThisWorkbook.Names("Form_Gewerk").RefersToRange
        MsgBox "Füllfarbe: " & FormatAuslesen(rng, "ColInt")
        MsgBox "Fettformat: " & FormatAuslesen(rng, "Bold")
    End Sub
  • VBA Sub mit Rückgabewert:

    Function BeispielSubMitRückgabewert() As String
        BeispielSubMitRückgabewert = "Das ist ein Rückgabewert."
    End Function

Tipps für Profis

  • Namen für Bereiche verwenden: Nutze benannte Bereiche, um deine Formeln und Funktionen leserlicher zu gestalten.

  • Debuggen: Verwende Debug.Print, um den Rückgabewert während der Entwicklung in der Konsole anzuzeigen. So kannst du Fehler schneller identifizieren.

  • Verwendung von Option Explicit: Füge Option Explicit am Anfang deiner Module hinzu, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Tippfehler zu vermeiden.


FAQ: Häufige Fragen

1. Wie rufe ich eine Funktion in einer anderen Subroutine auf?
Du kannst eine Funktion ganz einfach aufrufen, indem du ihren Namen gefolgt von den erforderlichen Parametern schreibst, z.B. FormatAuslesen(rngRange, "ColInt").

2. Muss ich die Rückgabewerte einer Funktion deklarieren?
Ja, es ist ratsam, die Rückgabewerte einer Funktion zu deklarieren, um Typkonflikte zu vermeiden. Verwende As Variant, wenn du verschiedene Datentypen zurückgeben möchtest.

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