Makro: .Find in Zeile
#1
Hi Leute! Ich brauche eine Funktion, mit der ermittelt werden soll, ob sich ein String in einer Zeile befindet. Wenn das Programm eine entsprechende Zelle findet, soll es den Rest des Makros ausführen. Wenn nicht, soll der komplette Makro beendet werden. 
Zur Info:
Top
#2
Hallo

es gibt dafür zwei verschiedene Makro Lösungen, sie unterscheiden sich in der Fehlerbehandlung und in Select.
Die erste Lösung ist die normale Standard Such & Find Funktion wie sie auch mit Ctrl H aufgerufen werden kann.    
Dabei muss On Error GoTo Fehler eingefügt werden, sonst gibt es bei "No Find" einen Laufzeitfehler (Absturz).

Die zweite Lösung benutzt die bei Programmierer beliebtere Set Methode, wo man If rFind Is Nothing auswertet! 
Welche Version dir besser gefaellt, du lieber benutzen willst bleibt dir überlassen. Sie funktionieren beide gleich gut.

mfg  Gast 123

Code:
'Gast 123   für  Clever Forum

Const SuchBereich = "B1:B29"
Const ConName = "Finde String"


'Lösung 1:  über Standard Find Funktion
'erfordert unbedingt: On Error Goto Fehler

Sub String_suchen_über_Find()
Dim rFind As Object, SuchName As String
  'Lade Such-Name aus Constant Anweisung
  SuchName = ConName
  'Lade Such-Name aus Zelle:  z.B. "H1"
  SuchName = Range("H1").Value

  On Error GoTo Fehler
  Range(SuchBereich).Find(What:=SuchName, After:=ActiveCell, _
    LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
      SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False).Activate
 
  MsgBox "Hier geht es jetzt im Makro weiter ....."
 
'Hier steht dein Makro was ausgeführt werden soll !!
'Es muss wegen "Fehler" mit Exit Sub beendet werden
Exit Sub

Fehler:  MsgBox "String nicht gefunden"
End Sub


'Lösung 2:  über Set Find Funktion
'No Find = Aussprung über: If rFind Is Nothing

Sub String_suchen_über_Set_Find()
Dim rFind As Object, SuchName As String
  'Lade Such-Name aus Constant Anweisung
  SuchName = ConName
  'Lade Such-Name aus Zelle:  z.B. "H1"
  SuchName = Range("H1").Value

  Set rFind = Range(SuchBereich).Find(What:=SuchName, After:=ActiveCell, _
       LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=True)
 
  'Wert wurde nicht gefunden, Aussprung mit Meldung
  If rFind Is Nothing Then MsgBox "String nicht gefunden": Exit Sub
 
  MsgBox "Hier geht es jetzt im Makro weiter ....."
 
  MsgBox rFind.Address
 
'Hier steht dein Makro was ausgeführt werden soll !!
End Sub
Top
#3
Nachtrag

Sorry ich habe vergessen auf die beiden Const hinzuweisen.  In der 1. Const steht der Such Text als String. Man kann ihn auch aus einer Zelle laden, im Beispiel die Zelle "H1". Man muss sich aber entscheiden welche Variante man waehlt! Beides gleichzeitig geht nicht, d.h. eine Befehlszeile musst du löschen! 

In der 2. Const steht der Such Bereich, bei mir "B1:B29". Das ist nur ein Beispiel, hier muss dein Tabellen Bereich stehen. Diesen Wert bitte aendern.
Top
#4
Hallöchen,

wenn es nicht auf Groß- und Kleinschreibung ankommt, reicht auch etwas nach dem Prinzip ZÄHLENWENN:
Sub test()
MsgBox WorksheetFunction.CountIf(Range("a1:c1"), "*na*")
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste