Worksheet und Range an Funktion übergeben
Schritt-für-Schritt-Anleitung
Um ein bestimmtes Worksheet und einen Range an eine Funktion in VBA zu übergeben, kannst Du den folgenden Code verwenden. Dies ermöglicht es Dir, in einem spezifischen Bereich nach einem String zu suchen.
Option Explicit
Function StringFindenSpalte(wks As Worksheet, rngSuche As Range, strString As String) As Long
Dim c As Range
With rngSuche
Set c = .Find(What:=strString)
End With
If Not c Is Nothing Then
StringFindenSpalte = c.Column
Else
StringFindenSpalte = -1 ' Rückgabewert, falls der String nicht gefunden wurde
End If
End Function
Sub test()
Debug.Print StringFindenSpalte(Worksheets("G"), Range("12:12"), "Bemerkungen")
End Sub
In diesem Beispiel wird die Funktion StringFindenSpalte
verwendet, um in der Zeile 12 des Worksheets "G" nach dem String "Bemerkungen" zu suchen.
Häufige Fehler und Lösungen
-
Fehler: "Object variable or With block variable not set"
- Ursache: Dies tritt auf, wenn der gesuchte String nicht gefunden wird.
- Lösung: Stelle sicher, dass die
Find
-Methode korrekt verwendet wird und überprüfe, ob der String tatsächlich im angegebenen Bereich vorhanden ist.
-
Fehler: c
ist Nothing
- Ursache: Der gesuchte Wert existiert nicht im angegebenen Range.
- Lösung: Füge eine Fehlerbehandlung in die Funktion ein, um zu überprüfen, ob
c
Nothing
ist, und gib einen entsprechenden Wert zurück.
Alternative Methoden
Eine alternative Methode ist, die Parameter als String zu übergeben und den Range innerhalb der Funktion zu setzen:
Function StringFindenSpalte(wks As String, rngWo As String, strSuche As String) As Long
Dim rngSuche As Range, c As Range
Set rngSuche = ThisWorkbook.Worksheets(wks).Range(rngWo)
Set c = rngSuche.Find(strSuche, , xlValues, xlPart, xlByRows, xlNext, False, False, False)
If Not c Is Nothing Then
StringFindenSpalte = c.Column
Else
StringFindenSpalte = -1
End If
End Function
Sub test()
Debug.Print StringFindenSpalte("G", "12:12", "Bemerkungen")
End Sub
Hier wird der Range innerhalb der Funktion definiert, was den Code flexibler macht.
Praktische Beispiele
Wenn Du in verschiedenen Worksheets nach einem bestimmten Begriff suchen möchtest, kannst Du die oben genannten Funktionen leicht anpassen. Zum Beispiel:
Sub SucheInMehrerenSheets()
Dim ws As Worksheet
Dim suchString As String
suchString = "Bemerkungen"
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Name, StringFindenSpalte(ws, ws.Rows(12), suchString)
Next ws
End Sub
Mit dieser Methode wird in der Zeile 12 jedes Worksheets nach dem String "Bemerkungen" gesucht.
Tipps für Profis
- Verwende
Option Explicit
, um sicherzustellen, dass alle Variablen deklariert sind. Dies verhindert viele häufige Fehler.
- Nutze die
Debug.Print
-Anweisung, um während der Entwicklung den Fortschritt zu verfolgen und sicherzustellen, dass Deine Variablen die erwarteten Werte haben.
- Überlege, die
Find
-Methode mit weiteren Parametern zu versehen, um die Suche präziser zu gestalten.
FAQ: Häufige Fragen
1. Wie kann ich die Funktion für andere Zeilen anpassen?
Du kannst den Range-Parameter in der Funktion anpassen, um eine andere Zeile zu durchsuchen, zum Beispiel Range("5:5")
für die 5. Zeile.
2. Was mache ich, wenn ich mehr als einen Wert suchen möchte?
Um mehrere Werte zu suchen, kannst Du eine Schleife verwenden, die über ein Array von Suchstrings iteriert und die Funktion für jeden Wert aufruft.