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

Worksheet (und Range) an Funktion übergeben

Forumthread: Worksheet (und Range) an Funktion übergeben

Worksheet (und Range) an Funktion übergeben
14.10.2017 12:18:30
Peter
Guten Tag
Ich suche in verschiedenen Sheets in Zeile 12 den String Bemerkungen. Ich kann in untenstehender Funktion allerdings nicht das Worksheet übergeben, in welcher gesucht wird. Im Moment wird im jeweils aktiven Worksheet gesucht. Wie kann ich der Funktion ein bestimmtes Worksheet, in welchem in Zeile 12 gesucht werden soll, übergeben?
Gruss, Peter
Option Explicit
'string in Zeile finden

Function StringFindenSpalte(wks As Worksheet, rngSuche As Range, strString As String) As Long
Dim c As Range
Debug.Print wks.Name
Debug.Print rngSuche.Address
Debug.Print rngSuche.Parent.Name
With rngSuche
End With
With rngSuche
Set c = .Find(What:=strString)
End With
StringFindenSpalte = c.Column
End Function
Sub test()
Debug.Print StringFindenSpalte(Worksheets("G"), Range("12:12"), "Bemerkungen")
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet (und Range) an Funktion übergeben
14.10.2017 12:40:17
Nepumuk
Hallo Peter,
die Tabelle ist doch das Parent des Ranges also überflüssig das extra nochmal zu übergeben.
Option Explicit

Function StringFindenSpalte(rngSuche As Range, strString As String) As Long
    Dim c As Range
    
    Debug.Print rngSuche.Address
    Debug.Print rngSuche.Parent.Name
    
    Set c = rngSuche.Find(What:=strString)
    
    StringFindenSpalte = c.Column
End Function

Sub test()
    Debug.Print StringFindenSpalte(Worksheets("G").Rows(12), "Bemerkungen")
End Sub

Gruß
Nepumuk
Anzeige
AW: Worksheet (und Range) an Funktion übergeben
14.10.2017 12:41:06
Luschi
Hallo Peter,
ich übergebewn die Parameter al String und setze erst in der Funktion den Suchbereich zusammen.
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)
'bei Range.Find immer alle Parameter angeben
'siehe Bemerkungen in:
'https://msdn.microsoft.com/de-de/VBA/Excel-VBA/articles/range-find-method-excel
With rngSuche
Set c = .Find(strSuche, , xlValues, xlPart, xlByRows, _
xlNext, False, False, False)
End With
StringFindenSpalte = c.Column
Set c = Nothing
End Function
Sub test()
Debug.Print StringFindenSpalte("G", "12:12", "Bemerkungen")
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Worksheet (und Range) an Funktion übergeben
14.10.2017 12:44:02
Peter
Vielen Dank euch beiden!
Jetzt ist es mir klar.
Gruss, Peter
AW: Keine "Bemerkungen" - kein c.Column
14.10.2017 12:55:02
Gerd
Gruß Gerd
;
Anzeige
Anzeige

Infobox / Tutorial

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

  1. 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.
  2. 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.

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