Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1224to1228
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Codeerweiterung fürSuchen

Codeerweiterung fürSuchen
Erwin
Hallo Forum,
aus diesem Forum habe ich nachfolgenden Code für mich angepasst:

Sub Suchen()
Dim Eingabe As String
Dim Feld As Range
Dim Gefunden As Boolean
Dim Antwort As Long
Eingabe = InputBox("Bitte Aktenzeichen als Suckriterium eingeben", "Suchmaschine")
If Eingabe  "" Then
For Each Feld In ActiveSheet.UsedRange
If InStr(UCase(CStr(Feld.Value)), UCase(Eingabe)) > 0 Then
Gefunden = True
Feld.Activate
Antwort = MsgBox("Weitersuchen?", vbQuestion + vbYesNo, "Frage")
If Antwort = vbNo Then
Exit For
End If
End If
Next Feld
If Gefunden = False Then
MsgBox "'" & Eingabe & "' nicht gefunden! Bitte Button >> Neuer Eintrag 

Das passt eigentlich soweit, aber wenn ich einen Treffer habe und dann weitersuchen lasse und das Programm findet keinen weiteren Treffer, springt der Cursor nur auf A1; es kommt aber keine Meldung wie z. B. "nix mehr gefunden"
Wer kann mir das bitte einbauen?
Und was muss man machen, damit ein Button >> Neuer Eintrag Danke im Voraus
Erwin

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

Betreff
Benutzer
Anzeige
AW: Codeerweiterung fürSuchen
21.08.2011 18:06:43
Josef

Hallo Erwin,
das würde ich so lösen.
Sub Suchen()
  Dim rng As Range
  Dim strFirst As String, strFind As String
  
  
  With ActiveSheet
    strFind = InputBox("Bitte Aktenzeichen als Suckriterium eingeben", "Suchmaschine")
    If strFind <> "" Then
      Set rng = .Cells.Find(What:=strFind, LookIn:=xlValues, LookAt:=xlPart, _
        MatchCase:=False, After:=Cells(.Rows.Count, .Columns.Count))
      If Not rng Is Nothing Then
        strFirst = rng.Address
        Do
          Application.Goto rng, True
          If MsgBox("Weitersuchen?", vbQuestion + vbYesNo, "Frage") = vbNo Then Exit Do
          Set rng = .Cells.FindNext(rng)
        Loop While Not rng Is Nothing And strFirst <> rng.Address
        If rng Is Nothing Then MsgBox "Keine weiteren Treffer!", vbInformation, "Hinweis"
      Else
        MsgBox "'" & strFind & "' nicht gefunden! Bitte Button >> Neuer Eintrag << verwenden", _
          vbInformation, "Schade"
      End If
    End If
  End With
  
  Set rng = Nothing
End Sub



Das mit dem Button "Neuer Eintrag" musst du näher erläutern!

« Gruß Sepp »

Anzeige
AW: Codeerweiterung fürSuchen
21.08.2011 19:06:10
Erwin
Hallo Sepp,
erstmal Danke, dass du mir mit der Codeerweiterung geholfen hast.
Habe jetzt festgestellt, dass die Abfrage bei ca. 12.000 Zeilen wesentlich länger läuft.
Kann man die Suche vielleicht auf die Spalten E und F (nur da sind Aktenzeichen enthalten) begrenzen, damit die Suche schneller läuft?
Und das mit >> Neuer Eintrag Findet die Suche nichts, sollte bei der Meldung "...nix gefunden.." die Möglichkeit gegeben sein, einen neuen Button anzuklicken, wo ein Code hinterlegt werden kann, der schon existiert:
Sub Neuer_Eintrag()
IIf(IsEmpty([a65536]), Cells(Rows.Count, 1).End(xlUp), [a65536]).Select
ActiveCell.Offset(1, 0).Select
End Sub
Aber das wird wahrscheinlich nicht mit der MSG Box funktionieren?`
Erwin
Anzeige
AW: Codeerweiterung fürSuchen
21.08.2011 19:40:45
Josef

Hallo Erwin,
versuch mal diesen Code.
Sub Suchen()
  Dim rng As Range
  Dim strFirst As String, strFind As String
  
  
  With ActiveSheet
    strFind = InputBox("Bitte Aktenzeichen als Suckriterium eingeben", "Suchmaschine")
    If strFind <> "" Then
      Set rng = .Range("E:F").Find(What:=strFind, LookIn:=xlValues, LookAt:=xlPart, _
        MatchCase:=False, After:=Cells(.Rows.Count, 6))
      If Not rng Is Nothing Then
        strFirst = rng.Address
        Do
          Application.Goto rng
          If MsgBox("Weitersuchen?", vbQuestion + vbYesNo, "Frage") = vbNo Then Exit Do
          Set rng = .Range("E:F").FindNext(rng)
        Loop While Not rng Is Nothing And strFirst <> rng.Address
        If rng Is Nothing Then
          MsgBox "Keine weiteren Treffer!", vbInformation, "Hinweis"
        Else
          MsgBox "Gesamter Bereich durchsucht!", vbInformation, "Hinweis"
        End If
      Else
        If MsgBox("'" & strFind & "' nicht gefunden!" & vbLf & vbLf & _
          "Wollen Sie einen neuen Eintrag erstellen?", vbQuestion + vbYesNo, _
          "Frage") = vbYes Then
          
          Application.Goto .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
        End If
      End If
    End If
  End With
  
  Set rng = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: Codeerweiterung fürSuchen
21.08.2011 20:20:38
Erwin
Hallo Sepp,
super, läuft viel schneller.
Ein kleines Problem habe ich noch, wenn ich einen Treffer habe und dann nach weiteren Treffern suchen möchte. Bei mir läuft er nicht in die Verzweigung, wo die Meldung kommen sollte "Keine weiteren Treffer"
...
If MsgBox("Weitersuchen?", vbQuestion + vbYesNo, "Frage") = vbNo Then Exit Do
Set rng = .Range("E:F").FindNext(rng)
Loop While Not rng Is Nothing And strFirst rng.Address
If rng Is Nothing Then
MsgBox "Keine weiteren Treffer!", vbInformation, "Hinweis"
Else
MsgBox "Gesamter Bereich durchsucht!", vbInformation, "Hinweis"
End If
...
Was mache ich falsch?
Erwin
Anzeige
AW: Codeerweiterung fürSuchen
21.08.2011 20:24:05
Josef

Hallo Erwin,
"Kein weiterer Treffer" erscheint nur, wenn du auf "Weitersuchen" klickst und nichts mehr gefunden wird,
"Bereich durchsucht" erscheint, wenn nach "Weitersuchen" wieder die erste Fundstelle gefunden wird.

« Gruß Sepp »

AW: Codeerweiterung fürSuchen
21.08.2011 21:00:09
Erwin
Hallo Sepp,
genau das mache ich ja: suchen, ein Treffer, weitersuchen, kein Treffer mehr.
Schau dir mal die einfache (verkürzte Datei) an:
https://www.herber.de/bbs/user/76292.xls
Ich suche nur nach dem Text 126 (muss Text sein, weil ich die führenden Nullen brauche), die nur ein einziges mal vorkommt.
Ich bin der Meinung, dass VBA die o.g. Zeile einfach überspringt.
Erwin
Anzeige
AW: Codeerweiterung fürSuchen
21.08.2011 21:15:59
Josef

Hallo Erwin,
dann halt so.
Sub Suchen_3()
  Dim rng As Range
  Dim strFirst As String, strFind As String
  
  Range("A1").Select
  
  With ActiveSheet
    strFind = InputBox("Bitte Aktenzeichen als Suckriterium eingeben", "Suchmaschine")
    
    If strFind <> "" Then
      Set rng = .Range("E:F").Find(What:=strFind, LookIn:=xlValues, LookAt:=xlPart, _
        MatchCase:=False, After:=Cells(.Rows.Count, 6))
      If Not rng Is Nothing Then
        strFirst = rng.Address
        Do
          Application.Goto rng
          If MsgBox("Weitersuchen?", vbQuestion + vbYesNo, "Frage") = vbNo Then Exit Do
          Set rng = .Range("E:F").FindNext(rng)
        Loop While Not rng Is Nothing And strFirst <> rng.Address
        MsgBox "Keine weiteren Treffer!", vbInformation, "Hinweis"
      Else
        If MsgBox("'" & strFind & "' nicht gefunden!" & vbLf & vbLf & _
          "Wollen Sie einen neuen Eintrag erstellen?", vbQuestion + vbYesNo, _
          "Frage") = vbYes Then
          
          Application.Goto .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
        End If
      End If
    End If
  End With
  
  Set rng = Nothing
  
  
End Sub


Außerdem solltest du, wenn du eine Datei hochlädtst, entweder das Passwort bekanntgeben, oder die Abfrage deaktivieren!
Dein Passwortschutz ist aber für die Katz, zumindest hatte ich, auch ohne Passwort, kein Problem die Datei zu öffnen.

« Gruß Sepp »

Anzeige
AW: Codeerweiterung fürSuchen
21.08.2011 21:48:15
Erwin
Hallo Sepp,
jetzt passt das super.
Das mit dem pwd wollte ich nicht, habe ich total vergessen zu entfernen, sorry
Danke für deine Mühe
Erwin

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige