Frage zu Find und Match
03.08.2015 15:01:08
Jürgen
vielleicht liegt's ja an der Hitze, aber: Funktionieren die beiden Funktionen "Find" und "Match" unter VBA nur, wenn das zu durchsuchende Tabellenblatt aktiv ist?
Da ich schon andere Code-Beispiele gesehen habe (Find-Methode über mehrere Tabellen ohne Activate), bin ich gerade mit einer Funktion, die ich geschrieben habe, etwas irritiert.
Folgende Aufgabe: Ich möchte Werte aus Tabelle1 in das Tabellenblatt "Daten" schreiben. Dazu prüfe ich von Tabelle1 aus, an welcher Stelle (Spalte) die gesuchte Überschrift in der Tabelle "Daten" steht, um die Werte in die richtigen Spalten zu schreiben.
Bekomme in meiner Funktion aber nur dann Ergebnisse, wenn ich das Tabellenblatt "Daten" zuerst aktiviere.
Hier meine Funktion (ohne Aktivierung der Tabelle "Daten"):
Public Function Spaltennummer(wsh As Worksheet, strUeberschrift As String) As Long
'// Variablendeklaration
Dim rngBereich As Range
Dim rngZelle As Range
Dim lngCol As Long
Dim lngLastCol As Long
'// Fehler abfangen
On Error GoTo ErrorHandler
'// letzte Spalte im Bereich Spalte "A" bis Spalte "X" ermitteln
'// dazu Funktion aufrufen
lngLastCol = LastColumn(wsh)
'// Überschrift im Bereich "A8" bis [Spalte "lngLastCol"] suchen
Set rngZelle = wsh.Range(Cells(9, 1), Cells(9, lngLastCol)).Find(what:=strUeberschrift, _
lookat:=xlPart, LookIn:=xlValues)
'// Spaltennummer zurückgeben
If Not rngZelle Is Nothing Then
Spaltennummer = rngZelle.Column
Else
Spaltennummer = 0
End If
Ausstieg:
'// Objekt freigeben
If Not rngZelle Is Nothing Then Set rngZelle = Nothing
Exit Function
ErrorHandler:
'// gesuchte Überschrift wurde nicht gefunden
Spaltennummer = 0
'// zurück zu "Ausstieg"
Resume Ausstieg
End Function
Der Funktionsaufruf erfolgt im Worksheet_Change-Ereignis von Tabelle1 so:
lngSpalteArtikelNr = Spaltennummer(Worksheets("Daten"), "ArtikelNr.")
Bei "Set rngZelle = wsh.Range(Cells(9, 1), Cells(9, lngLastCol)).Find(...)"
steigt die Funktion aus und läuft in den ErrorHandler.
Mache ich 'was falsch oder geht es wirklich nur mit Aktivierung der jeweils zu durchsuchenden Tabelle? Gleiches Problem habe ich auch mit der Match-Funktion.
Die Office-Hilfe schweigt sich dazu aus (zumindest habe ich nichts gefunden).
Wäre für kleinen Denkanstoß dankbar.
Gruß
Jürgen