Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: selection.find ohne ergebnis

selection.find ohne ergebnis
22.08.2005 10:20:10
Daniel
hallo hallo,
wahrscheinlich bin ich nur zu dämlich aber ich bekomms grad nich gebacken eine spalte nach einem wert zu durchsuchen und bei positiv eine aktion durchzuführen und bei negativ eben nicht.
das ganze sieht grob wie folgt aus:
Set S = Selection.Find(What:=sWert, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate

If S Is true Then
laber rabarber
end if
wenn er nix findet wirft er mir immer den debugger vor die nase...
vielen dank schonmal
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: selection.find ohne ergebnis
22.08.2005 10:28:04
Ramses
Hallo
Set S = Selection.Find(What:=sWert, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate
If Not S Is Nothing Then
laber rabarber
end if
Gruss Rainer
AW: selection.find ohne ergebnis
22.08.2005 10:31:31
Daniel
jetzt sagt er typen unverträglich..
muss ich das "S" im vorfeld dim ' en? und wenn ja als welchen typß
mfg
Anzeige
AW: selection.find ohne ergebnis
22.08.2005 10:48:18
Ramses
Hallo
"...muss ich das "S" im vorfeld dim ' en?..."
Davon gehe ich aus, dass das IMMER gemacht wird.
Dim s As Range
Gruss Rainer
AW: selection.find ohne ergebnis
22.08.2005 11:08:22
Daniel
yo sorry, bin manchmal halt ein eierkopf ;-)
funzt aber immer noch net (objekt erforderlich).
das problem ist dass er mir wohl einen error wirft wenn die suche nichts ergibt und dann den debugger anwirft! wie kann ich den catchen und umgehen? praktisch on error blausw.
mann soviele zeilen für so ein kleines problem. aber vielen dank dass ihr mir immer so schnell und kompetetent helft- wär sonst aufgeschmissen
daniel
Anzeige
AW: selection.find ohne ergebnis
22.08.2005 11:13:59
Ramses
Hallo
ich habe keine Lust ständig im Nebel zu stochern
Zeig den Code und dann sehen wir weiter
Gruss Rainer
AW: selection.find ohne ergebnis
22.08.2005 11:19:43
Daniel

Sub einlesen()
Windows("GC.xls").Activate
Worksheets("Einlesen").Activate
fileToOpen = Application _
.GetOpenFilename("Messung (*.xls), *.txt")
Workbooks.Open Filename:=fileToOpen
Dim datei, lZelle, sWert, uWert, zWert As String
Dim anzahl, i, u As Integer
Dim S As Range
datei = ActiveWorkbook.Name
Windows(datei).Activate
ActiveWindow.WindowState = xlNormal
anzahl = ActiveWorkbook.Sheets.Count
'SAP Tabelle für Vergleich öffnen im Hintergrund
Workbooks.Open Filename:="H:\Projekt GC\SAP\SAP-Daten für GC.xls"
Windows("SAP-Daten für GC.xls").Activate
ActiveWindow.WindowState = xlMinimized
For u = 1 To anzahl
' Fabriknummer übertragen
Windows(datei).Activate
ActiveWindow.WindowState = xlNormal
Sheets(u).Select
Range("G31").Select
Selection.Copy
ActiveWindow.WindowState = xlMinimized
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
i = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
lZelle = "B" & CStr(i + 1)
Range(lZelle).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Fabriknummer glätten
ActiveCell.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True, _
ReplaceFormat:=False
ActiveCell.Replace What:="/", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True, _
ReplaceFormat:=False
ActiveCell.Replace What:="-", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=True, _
ReplaceFormat:=False
'Position in SAP Tabelle bestimmen
sWert = ActiveCell.Value
Windows("SAP-Daten für GC.xls").Activate
Columns("CJ:CJ").Select
Set S = Selection.Find(What:=sWert, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate
// wenn er hier jetzt die fabrnr nicht in der sap tabelle findet soll er die nächsten schritte bis zum end if auslassen
If Not S Is Nothing Then
'Hersteller übertragen
uWert = "BY" & CStr(ActiveCell.Row)
Range(uWert).Select
Selection.Copy
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
zWert = "A" & CStr(i + 1)
Range(zWert).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Baujahr übertragen
Windows("SAP-Daten für GC.xls").Activate
uWert = "CB" & CStr(ActiveCell.Row)
Range(uWert).Select
Selection.Copy
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
zWert = "C" & CStr(i + 1)
Range(zWert).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Tech. Platz übertragen
Windows("SAP-Daten für GC.xls").Activate
uWert = "CD" & CStr(ActiveCell.Row)
Range(uWert).Select
Selection.Copy
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
zWert = "D" & CStr(i + 1)
Range(zWert).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Tech. Platz Bezeichnung übertragen
Windows("SAP-Daten für GC.xls").Activate
uWert = "CE" & CStr(ActiveCell.Row)
Range(uWert).Select
Selection.Copy
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
zWert = "E" & CStr(i + 1)
Range(zWert).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Zugehörigkeit übertragen
Windows("SAP-Daten für GC.xls").Activate
uWert = "BW" & CStr(ActiveCell.Row)
Range(uWert).Select
Selection.Copy
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
zWert = "F" & CStr(i + 1)
Range(zWert).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
'Messdatum übertragen
Windows(datei).Activate
ActiveWindow.WindowState = xlNormal
Range("B15").Select
Selection.Copy
ActiveWindow.WindowState = xlMinimized
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
lZelle = "G" & CStr(i + 1)
Range(lZelle).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.WindowState = xlMinimized
'Gaswerte übertragen
Windows(datei).Activate
ActiveWindow.WindowState = xlNormal
Range("G42:G52").Select
Selection.Copy
ActiveWindow.WindowState = xlMinimized
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
lZelle = "H" & CStr(i + 1)
Range(lZelle).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
ActiveWindow.WindowState = xlMinimized
'Bemerkung GC
Windows(datei).Activate
ActiveWindow.WindowState = xlNormal
Range("G36").Select
Selection.Copy
ActiveWindow.WindowState = xlMinimized
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
lZelle = "S" & CStr(i + 1)
Range(lZelle).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'°C oben
Windows(datei).Activate
ActiveWindow.WindowState = xlNormal
Range("G34").Select
Selection.Copy
ActiveWindow.WindowState = xlMinimized
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
lZelle = "T" & CStr(i + 1)
Range(lZelle).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'°C unten
Windows(datei).Activate
ActiveWindow.WindowState = xlNormal
Range("I97").Select
Selection.Copy
ActiveWindow.WindowState = xlMinimized
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
lZelle = "U" & CStr(i + 1)
Range(lZelle).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Alterungwserte übertragen
Windows(datei).Activate
ActiveWindow.WindowState = xlNormal
Range("I89:I95").Select
Selection.Copy
ActiveWindow.WindowState = xlMinimized
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
lZelle = "V" & CStr(i + 1)
Range(lZelle).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
ActiveWindow.WindowState = xlMinimized
'Bemerkung Alterung
Windows(datei).Activate
ActiveWindow.WindowState = xlNormal
Range("G99").Select
Selection.Copy
ActiveWindow.WindowState = xlMinimized
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlNormal
Worksheets("Einlesen").Activate
lZelle = "AC" & CStr(i + 1)
Range(lZelle).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next
Workbooks(datei).Close SaveChanges:=False
Workbooks("SAP-Daten für GC.xls").Close SaveChanges:=False
Windows("GC.xls").Activate
ActiveWindow.WindowState = xlMaximized
Range("A1").Select
End Sub

Anzeige
AW: selection.find ohne ergebnis
22.08.2005 11:48:40
Ramses
Hallo
in diesem Zusammenhang lass das ".activate" weg
Set S = Selection.Find(What:=sWert, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False)
Dann funktioniert es.
Gruss Rainer
Anzeige
AW: selection.find ohne ergebnis
22.08.2005 11:50:35
Nepumuk
Hi,
so:
Set S = Selection.Find(What:=sWert, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=True, SearchFormat:=False)

Gruß
Nepumuk
Excel & VBA – Beispiele
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Fehlerbehebung bei Selection.Find in VBA


Schritt-für-Schritt-Anleitung

  1. Code vorbereiten: Stelle sicher, dass Du eine Variable für das Suchergebnis definierst:

    Dim S As Range
  2. Suchcode schreiben: Verwende die Selection.Find Methode wie folgt:

    Set S = Selection.Find(What:=sWert, After:=ActiveCell, LookIn:=xlFormulas, _
                          LookAt:=xlPart, SearchOrder:=xlByRows, _
                          SearchDirection:=xlNext, MatchCase:=True, _
                          SearchFormat:=False)
  3. Überprüfen des Ergebnisses: Überprüfe, ob das Suchergebnis Nothing ist:

    If Not S Is Nothing Then
       ' Aktion ausführen, wenn gefunden
    Else
       ' Aktion für nicht gefundenen Fall
    End If
  4. Fehlerbehandlung einfügen: Um die Fehlermeldung zu vermeiden, wenn nichts gefunden wird, kannst Du On Error Resume Next verwenden:

    On Error Resume Next
    Set S = Selection.Find(What:=sWert, After:=ActiveCell, LookIn:=xlFormulas, _
                          LookAt:=xlPart, SearchOrder:=xlByRows, _
                          SearchDirection:=xlNext, MatchCase:=True, _
                          SearchFormat:=False)
    On Error GoTo 0

Häufige Fehler und Lösungen

  • Typenunverträglichkeit: Wenn Du den Fehler "Typen unverträglich" erhältst, stelle sicher, dass S als Range deklariert ist.

  • Objekt erforderlich: Dieser Fehler tritt auf, wenn die Find-Methode kein Ergebnis liefert. Stelle sicher, dass Du die Überprüfung mit If Not S Is Nothing korrekt implementiert hast.

  • Debugger wird angezeigt: Um den Debugger zu vermeiden, kannst Du die Fehlerbehandlung mit On Error Resume Next nutzen.


Alternative Methoden

  • Verwendung von FindNext: Wenn Du alle Vorkommen eines Wertes finden möchtest, kannst Du die FindNext-Methode verwenden.

    Dim firstAddress As String
    firstAddress = S.Address
    Do
      ' Deine Aktionen hier
      Set S = Selection.FindNext(S)
    Loop While Not S Is Nothing And S.Address <> firstAddress
  • Anpassung der Suchparameter: Experimentiere mit den Parametern von Selection.Find, um bessere Ergebnisse zu erzielen. Beispielsweise kannst Du SearchFormat oder MatchCase ändern.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um Selection.Find in einer Excel-Anwendung zu verwenden:

Sub SucheFabriknummer()
    Dim S As Range
    Dim sWert As String
    sWert = "12345" ' Beispielwert
    Set S = Selection.Find(What:=sWert, LookIn:=xlFormulas, LookAt:=xlPart)

    If Not S Is Nothing Then
        MsgBox "Fabriknummer gefunden!"
    Else
        MsgBox "Fabriknummer nicht gefunden."
    End If
End Sub

Tipps für Profis

  • Vermeide .Activate: Wenn Du .Activate in Deinem Code verwendest, kann das zu unerwartetem Verhalten führen. Arbeite direkt mit Objekten, um die Effizienz zu steigern.

  • Nutze SearchFormat: Wenn Du eine formatierte Suche durchführen möchtest, stelle sicher, dass SearchFormat korrekt gesetzt ist. Dies kann hilfreich sein, um spezifische Formate zu finden.

  • Optimierung der Suchgeschwindigkeit: Reduziere die Größe des Suchbereichs, um die Performance zu verbessern, indem Du nur die relevanten Zellen auswählst.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen LookAt:=xlPart und LookAt:=xlWhole?
LookAt:=xlPart sucht nach Teilstrings innerhalb der Zellen, während LookAt:=xlWhole nur nach vollständigen Übereinstimmungen sucht.

2. Wie kann ich die Suche auf eine bestimmte Spalte beschränken?
Wähle die spezifische Spalte aus, bevor Du die Find-Methode aufrufst, z.B. Columns("A").Select.

3. Was kann ich tun, wenn die Suche sehr langsam ist?
Reduziere den Suchbereich oder schalte die Bildschirmaktualisierung mit Application.ScreenUpdating = False während der Ausführung aus und aktiviere sie danach wieder.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige