Schau Dir mal folgendes an:
Hinweise:
FindenA = Deine Prozedur mit ein paar Hinweisen aus meiner Sicht
FindenB = Mein Vorschlag
Sub FindenA()
'Das ist der Code der funktioniert.
'Ich möchte nun den zu durchsuchenden Bereich von A4 bis AP45 durch Variablen ersetzten.
'Spalte und Zeile habdn den selben Wert, der durch die last Variable erst ermittelt wird
Dim finden As Range
'Variable sit zwar deklariert ...
Dim variable As String
'... hat aber keine Wert und wird bei Verwendung als vbNullString, also nix, initialisiert
'Dein Befehl hier lautet also: Suche nix
'witziger weise wird deine Variable finden auch nothing sein
Set finden = workscheets("Tabelle1").Range("A4:AP45").Find(what:=variable)
'Variablen um Zeilen zu zählen sicherheitshalber als Long deklarieren
Dim last As Integer
'Rows.Count bezieht sich auf das aktive Arbeitsblatt, welches u.U. nicht Tabelle1 sein könnte
last = Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
End Sub
Sub FindenB()
Dim wks As Worksheet 'Worksheet-Variable
Dim rngGefunden As Range 'vorher: finden
Dim sSuchWert As String 'vorher: variable
Dim lngLetzteSpalte As Long 'letzte beschriebene Spalte
Dim lngLetzteZeile As Long 'letzte beschriebene Zeile
'Referenz auf das zu durchsuchende Arbeitsblatt
Set wks = ThisWorkbook.Worksheets("Tabelle1")
'selbsterklärend
sSuchWert = "Test"
'
With wks
'finde letzte beschriebene Spalte
lngLetzteSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Column
'finde letzte beschriebene Zeile
lngLetzteZeile = .Cells(.Rows.Count, lngLetzteSpalte).End(xlUp).Row
'Bereich von A4 bis letzte beschriebene Spalte + letzte beschriebeen Zeile in dieser Spalte
Set rngGefunden = .Range("A4", .Cells(lngLetzteZeile, lngLetzteSpalte)).Find(what:=sSuchWert)
End With
'Wenn etwas gefunden wird, beinhaltet die Variable einen Verweis auf eine Zelle
'da kann ich dann alle Infos abrufen, welche eine Zelle zu bieten hat. Wert, Zeilennummer, Spaltennummer etc pp
If Not rngGefunden Is Nothing Then
MsgBox sSuchWert & " wurde in Zeile " & rngGefunden.Row & ", Spalte " & rngGefunden.Column & " gefunden."
Else
'Wenn kein Verweis auf eine Zelle da ist, wurde nichts gefunden
'das kann ich prüfen, indem ich prüfe, ob die Variable = Nothing ist.
'wenn diese Bedingung zutrifft, landest DU in diesem Zweig
MsgBox sSuchWert & " wurde nicht gefunden."
End If
'
End Sub
|