Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Vba Code Makrorekorder
#1
Moin Excellaner,

Mit dem Makrorekorder habe ich diesen VBA-Code aufgezeichnet,
der nach dem in Anführungszeichen stehenden Namen sucht.
Um die Suche aber dynamisch zu gestalten würde ich gerne den Suchnamen in einer Zelle eingeben,
der Code sollte in einem Bereich z.B. von A2:K500 suchen und dann zu dem gefundenen Wert springen.


Sub Makro4()

' Makro4 Makro

    Cells.Find(What:="BlaBla Blub", After:=ActiveCell, LookIn:=xlFormulas2, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate

    End Sub

Der Code findet den Namen, aber wie ich schon meinte,  der Suchbegriff sollte in einer Zelle stehen.
wie müsste der Code erweitert werden. Wer könnte mir den Code erweitern?

Gruß Jo
Huh
Antworten Top
#2
Hallo,

In A1 des Blattes in dem Du gerade bist und in dem du auch suchst steht der Suchbegriff. Ungetestet:

Code:
Sub Makro4()

' Makro4 Makro
Dim rngSuche as Range
set rngSuche =  Range("A2:K500").Find(What:=Range("A1").Value, After:=ActiveCell, LookIn:=xlFormulas2, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
if not rngSuche is nothing then
      rngSuche.activate
end if
End Sub
Gruß
Michael
Antworten Top
#3
Hallo, der Steuerfuzzi,

vielen Dank für deine Antwort,
habe den Code eingefügt wie du gesagt hast, leider kommt die Debuggen Meldung.
Jetzt weiss ich nicht weiter, könntest du mal schaun wo der Fehler liegt.

Siehe Screenshot.

Danke

Jo Undecided


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#4
Code:
Sub M_snb()
  sheet1.range("A2:K500").find("""BlaBla Blub""").select
End Sub
Besser: lade mal eine Beispieldatei hoch.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
Hallo Jo,

da hatte Michael vergessen, beim Set(ten) am Ende das .Activate zu entfernen.

Gruß Uwe
Antworten Top
#6
Hallo an Alle und einen Guten Morgen,

Vielen Dank für Eure Antworten.

irgendwie will's nicht gelingen,
ich habe die Tabelle mal abgespeckt, anonymisiert und beigefügt.
Den Code ins Tabellenmodul eingefügt wie der Steuerfuzzi gesagt hat
Der gesuchte Name der in A1 steht wird gefunden, es kommt aber noch die Meldung Laufzeitfehler.
Das Activate hab ich auch mal entfernt, wie Kuwer meinte, kam aber auch ne Fehlermeldung.

Zum besseren Verständnis hab ich die Datei mal angehängt.

Gruß Jo

Sleepy


Angehängte Dateien
.xlsm   Test Datei.xlsm (Größe: 27,56 KB / Downloads: 5)
Antworten Top
#7
Hallo,

die Antwort findest du doch unter#5.

Zitat:LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False) '.Activate
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#8
Hallo Klaus-Dieter,

das Activate habe ich gelöscht, jetzt kommt die Meldung Typen unverträglich.

Da meine VBA Kenntnisse auf das Aufzeichnen mit dem Rekorder begrenzt sind
weiss ich jetzt nicht weiter.

Gruß Jo

Huh
Antworten Top
#9
Hallo,

es hilft, wenn der Suchbereich auch dem entspricht, in dem gesucht werden soll.

Code:
Option Explicit

Sub Makro4()

' Makro4 Makro
Dim rngSuche As Range
Set rngSuche = Range("D3:D23").Find(What:=Range("A1").Value, After:=ActiveCell, LookIn:=xlFormulas2, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
If Not rngSuche Is Nothing Then
      rngSuche.Activate
End If
End Sub
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#10
Hallo

es gibt bereits viele Lösungen, aber wenn das VBA Wissen noch fast bei Null ist kommt es leicht zum "VBA Salat".
Da werden immer wieder - "Weckstaben verbuchselt" -,  Sorry Befehle und ihre Funktionen falsch verstanden!

Grundlagen Wissen:  Der berühmte Code von snb ist der kürzeste, hättest du für "BlaBla" [a1] eingefügt hätte er funktioniert.
Nachteil der Direktsuche mit Activate, wenn der gesuchte Wert nicht existiert kommt eine Laufzeitfehlermeldung!
Die umgeht man mit der Set Anweisung.  In dem Fall gehört aber am Ende KEIN .Activate Befehl!!

Einzelheiten zu Find:
In der Syntac kannst du bei After: statt ActiveCell die Zelle angeben, ab der gesucht werden soll.
Wenn du in Formeln suchst verwendest du besser xlValues statt xlFormulas.  (Formulas ist schneller!)
Beim suchen kannst du mit xlPart oder xlWhole angeben ob er einen Teilstring sucht, oder die Zelle 1:1 gesucht wird.
Ich sehe bei den Kollegen den Befehl xlFormulas2, bei Excel 2003 funktioniert das nicht! Bei höheren Versionen Ja??

Bleibt eine Frage offen, die noch kein Kollege gestellt hat. Kann der Suchbegriff mehrfach vorkommen??  Mein Test ergab Ja!!
Dann muss man noch eine Do Loop Schleife einfügen.  Bei meiner Version mit Rücksprung in die gerade aktive Zelle.
Probier bitte mal diese Version aus. Würde mich freuen wenn es damit zufriedenstellend klappt.

mfg Gast 123

Code:
Sub Makro4()
Dim rngSuche As Range
Set rngSuche = Range("A2:K500").Find(What:=Range("A1"), After:=[a2], LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
If Not rngSuche Is Nothing Then rngSuche.Activate
If rngSuche Is Nothing Then MsgBox "Nicht gefunden!"
End Sub



Sub Mehrfachsuche_MitReturn()
Dim AcAdr As String, n As Integer
Dim rngSuche As Range, Adr1 As String
AcAdr = ActiveCell.Address
Set rngSuche = Range("A2:K500").Find(What:=Range("A1"), After:=[a2], LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
If rngSuche Is Nothing Then MsgBox "Nicht gefunden!"
'Mehrfach Einträge suchen
Adr1 = rngSuche.Address_
Do
    rngSuche.Activate: n = n + 1
    MsgBox n & "x  gefunden"
    Set rngSuche = Range("A2:K500").FindNext(rngSuche)
Loop Until rngSuche.Address = Adr1
Range(AcAdr).Select
End Sub
Antworten Top


Gehe zu:


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