Office: Range.Find mit after:=

Helfe beim Thema Range.Find mit after:= in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Guten Morgen Gemeinde, ich sitze an einem Problem mit der Range.Find Methode. Diese ist in einer Funktion eingebaut, da ich sehr oft Range.Find... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Tuereintreter, 24. Juni 2020.

  1. Range.Find mit after:=


    Guten Morgen Gemeinde,

    ich sitze an einem Problem mit der Range.Find Methode. Diese ist in einer Funktion eingebaut, da ich sehr oft Range.Find verwenden muss. Wenn ich keinen Parameter übergebe für after, dann läuft alles wie es soll. Übergebe ich aber einen Parameter, z.B. "A10", dann kommt Fehler Typ 13. Ich füge die Funktion mal unten an. Helfen konnte ich mir ein wenig indem ich überprüfe ob die Variable mit dem After-Parameter leer ist. Sie läuft aber trotzdem nicht sauber durch. Die Variable ist vom Typ variant und laut Excelhilfe wird dies auch so erwartet. Der Parameter "A10" wird zuvor ermittelt und dann an die Funktion übergeben. Ich muss manchmal nach einer bestimmten Stelle erst mit der Suche anfangen, da Werte doppelt im Tabellenblatt vorkommen.

    Code:
    :)
     
    Tuereintreter, 24. Juni 2020
    #1
  2. Hajo_Zi
    Hajo_Zi Erfahrener User
    Zu Deiner Datei kann ich nichts schreiben, was wohl daran liegt das ich nicht auf fremde Rechner schaue. Ich baue keine Datei nach.

    Sollte die Datei verlinkt werden?

    Der Name einer hochgeladenen Mappe wird im Beitrag automatisch angezeigt, sodass es bei Verwendung von aussagekräftigen Namen leichter fällt, sie später im Ablageordner wiederzufinden und sie gedanklich einem bestimmten Thema zuzuordnen. Namen wie Muster*, Test*, Mappe*, Beispiel*, Fehler*, Kalender*, UserForm* usw. sind so allgemein, dass eine Zuordnung zu einem Thema unmöglich gemacht wird.

    Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.

    Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.

    Bilder statt Datei | Excel ist sexy!

    Es sollte ein aussagekräftiger Name sein.

    Das ist nur meine Meinung zu dem Thema.

    Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
    http://www.ms-office-forum.de/forum/...d.php?t=322895
    änderrn.

    Das ist nur meine Meinung zu dem Thema.

    die Variable varBeginnenNach ist nicht belegt.

    Bitte berücksichtige das Themen die Erledigt sind als Erledigt markiert werden können. Also mache es unten links mit Klick auf den Schalter "als erledigt setzen", falls Problem gelöst.
    Der Zustand des Beitrages wird dann in der Übersicht angezeigt und man braucht sich diese Beiträge nicht mehr ansehen.





    Meine Homepage Homeseite - Hajo's Excelseiten
     
    Hajo_Zi, 25. Juni 2020
    #2
  3. Wie lautet die Adresse von UsedRange? Welchen Wert hat varBeginnenNach?
    Welchen Inhalt hat eine unbelegte Variable vom Typ Variant?

    Unsinn!
     
    EarlFred, 25. Juni 2020
    #3
  4. Range.Find mit after:=

    Hallo Türeintreter,

    bei mir kommt es zum besagten Fehler 13, wenn das eintritt, was EarlFred bereits richtig deutete: die Startzelle liegt außerhalb von UsedRange-Bereich

    Gruß von Luschi
    aus klein-Paris

    PS: der Fehler-Meldungstext ist genauso aussage-unfähig wie sinnlos gepostete Textbausteine - sie bringen NIX!

    Zusatz: in der Online-Hilfe zu Range.Find bitte die Bemerkungen lesen zwecks der
    Pflichtangaben den Parametern - h i e r
     
    Luschi, 25. Juni 2020
    #4
  5. Salü,

    UsedRange stellt doch allgemein den verwendeten Bereich eines Tabellenblattes dar, oder nicht ?
    Wie gesagt ich verwende diese Funktion relativ oft. Es kann sein, dass kein Wert in varBeginnenNach enthalten ist, da von A1 begonnen werden soll. Dann gibt es auch keine Fehlermeldung 13. Im Konkreten Fall aber enthält sie wie eingangs beschrieben den Wert A10. Ab dort oder besser nach A10 soll begonnen werden zu suchen. und eben im restlich benutzten Bereich.
     
    Tuereintreter, 26. Juni 2020
    #5
  6. 3 klare, absolut einfach zu beantwortende Rückfragen, grad eine (alleine nutzlos) davon beantwortet. Das verstehe, wer will.
     
    EarlFred, 26. Juni 2020
    #6
  7. @Earl Fred: Ach ja ?
    zur ersten Frage: sie ist nicht definiert
    zur Zweiten: wie zuvor schon erwähnt oft leer oder eben beim Problemcode A10 (diese Zelle ist nicht leer)
    zur Dritten: da es sich hier um eine schulische Frage handelt die nichts mit dem Beispiel hier zu tun hat, bekommst du eine schulische Antwort: Eine leer Variant Variable lässt sich mit isempty prüfen. Also hat eine leere Variant Variable den Wert Empty / leer. Zufrieden ?
     
    Tuereintreter, 26. Juni 2020
    #7
  8. Range.Find mit after:=

    Hall Türeintreter,

    sicher fällt Dir 'ActiveSheet' auf die Füße , denn wenn die Start-Suchzelle auf ein anderes Tabellenblatt zeigt als Activesheet, dann kann es auch nicht klappen; iich mach das so (und da gibt es keine Benutzung des Objektes ActiveSheet): Code:
    Gruß von Luschi
    aus klein-Paris
     
    Luschi, 26. Juni 2020
    #8
  9. Danke Luschi für den Hinweis. Also insgesamt werden bis zu fünf Tabellenblätter in 2 Arbeitsmappen je nach Bedarf durchkämmt. Da beim Start meiner Userform alle Excelmappen minimiert werden und auch beim öffnen im Hintergrund bleiben, will ich auch das das so bleibt. Stellenweise hat ein wkb.activate geholfen. Das ist aber nicht schön.
    Ist es nicht so, dass usedrange leere Zellen ausläßt und einen Gewindigkeitsvorteil im Vergleich zum For each Zelle in ...
    Frage: wie kann ich die erste Zelle im usedrange finden ?

    die Suche funktionierte zuvor ohne jegliche Probleme auch bei anderen Programmen. der Parameter after:=varBeginnenNach war ohne die range Zuweisung das führte aber zu Fehler 13. Sollte ich vielleicht keinen Text sondern eine Range an after übergeben und wenn ich den Parameter nicht brauche, er ist ja optional, gibt's dann nicht Fehler 1004 objektorientierter Fehler oder so ?
     
    Tuereintreter, 26. Juni 2020
    #9
  10. Update:

    Code:
    Dieser Code liefert mir die erste Zelle. Mit...

    Code:
    Kann ich die rngCell. column in einen Spaltenbuchstaben umwandeln.
    Gibt es di Möglichkeit zu vergleichen, ob dann varBeginnenNach kleiner ist als die erste Zelle ? Wenn ja kann ich ja dann entsprechend in der Suche reagieren.
     
    Tuereintreter, 26. Juni 2020
    #10
  11. Gelöscht
     
    EarlFred, 26. Juni 2020
    #11
  12. Ich fragte nicht: Ist UsedRange definiert? Die Frage wäre sinnlos. Ich fragte nach der Adresse von Usedrange und dem Wert von varBeginnenNach.
    Ich erwartete eine ganz einfache Antwort der Art:
    "Im Fehlerfall lautet die Adresse von UsedRage: ........ Der Wert von varBeginnenNach ist: ......"
    So simpel. Denk doch mal dran, dass wir als Helfer nur deinen Code und deine Beschreibung haben (letztere wenig hilfreich, übrigens)
    Ja, wieder so ein "schulisches" Benehmen von mir. Ich bin halt ein Oberlehrer.

    Warum die nächste "schulische" Frage nach "wie prüft man eine Variable vom Typ Variant?" Ganz einfach:

    If Len(varBeginnenNach) < 1 Then varBeginnenNach = "A1"
    Auch wenn das ein (vielleicht zu Debug-Zwecken?) auskommentierter Code ist: So prüft man nicht.
    Ist für varBeginnenNach nichts übergeben, kommst du hier zu falschen Ergebnissen bzw. einem Fehler
    If IsEmpty(varBeginnenNach)
    Set rngWo = .Worksheets(strTabellenblatt).UsedRange.Find(strWasSuchen, after:=.Worksheets(strTabellenblatt).Range(varBeginnenNach), LookIn:=xlValues, LookAt:=lngXlPartXlWhole, SearchDirection:=lngSuchrichtung)

    und gleich nochmal, weil's so schön war:
    If varTabellenblatt "" Then
    So kannst du das mit einem optional übergebenen STRING machen; Wenn dieser nicht übergeben wurde (und du keinen anderslautenden Default in der Deklarationszeile vorgibst) ist er "" .
    Bei VARIANT ist das tödlich. Dann musst du mit IsMissing prüfen!

    Vielleicht kannst du deine patzig-genervte Antwort auf meine Frage 3 jetzt mal selbst bewerten.

    Die nachfolgenden Codezeilen sind ebenso "falsch" für den Fall, dass nichts übergeben wurde. Was auch immer du da prüfst: Es muss korrigiert werden.
    Das führt dazu, dass strTabellenblatt auch nicht belegt wird, was du später verwendest.

    Weiter:
    Code:
    "Wenn varTabellenblatt keine Zahl ist, dann wandle in Text um." Welchen Untertyp hat denn varTabellenblatt, wenn es keine Zahl ist? Muss man die in einen String wandeln? Und wenn eine Zahl übergeben wurde: Soll sie in einen String gewandelt werden? Worksheets(1) und Worksheets("1") sind vollkommen unterschiedliche Dinge. Tust du das richtige?

    Meine "schulischen" Fragen sollen dich zum Nachdenken über deinen Code anregen. Natürlich steht es dir frei, das genervt zu ignorieren und beleidigt zu sein, weil ich mich erdreiste, so arrogant mit dem Herrn Türeintreter zu reden. Oder du nimmst dich der Fragen an und erlangst neue Erkenntnisse. Mir ist es egal.

    Wie gezeigt (ich war noch nicht fertig, hatte einfach keine Lust mehr): dein Code strotzt nur so vor Fehlerquellen, dass deine Angaben niemals ausreichen können, den Fehler SICHER zu lokalisieren. Daher die Fragen und das Gestocher im Nebel. Wenn man darauf so Larifari-Antworten von dir bekommt, hilft dir das am wenigsten.

    Zu Deiner weiteren Frage:
    die Beweggründe sind doch nicht erheblich. Erheblich ist die Erkenntnis: Ungenutzte Zeilen und Spalten vor der ersten genutzten Zelle sind nicht (zwingend) enthalten. Und weiter: Wenn deine "after"-Zelle nicht im Suchbereich liegt, krachts. Das ist eine Erkenntnis aus Antwort #2, die im Beitrag #10 eigentlich schon hätte verarbeitet sein können.

    Usedrange.Cells(1)

    Du übergibst bereits ein Range-Objekt in deinem Code! (strenggenommen: Eine Variant-Variable vom Untertyp Range)
    Code:
    Und ja: Zu After gehört eine Range-Variable (oder eben Variant/Range) und die Range-Variable muss IM Suchbereich liegen. Überschneidungen von bereichen prüft man üblicherweise mit Intersect. Das erübrigst dann die nächste Frage:
    Anstelle erst umständlich Buchstabensalat zu erzeugen, den du dann alphabetisch auf größe/kleiner analysierst, nimm doch einfach die Zeilen-/SpaltenNUMMER. Die vergleicht sich doch einfach mit einer anderen Zahl... Aber wie geschrieben: Intersect() ist das Mittel der Wahl.

    So, genug Text. Und wenn ich schon beim Schulmeistern bin: Check mal die Einrückungen im Code. Deine verschobenen If-Blöcke erleichtern die Lesbarkeit nicht.
    Ganz schlimm:
    Code:
    Wenn du konkrete Hilfe willst, gib uns folgende Infos:
    - Mustermappe mit reproduzierbar fehlererzeugendem Code

    wenn dir das nicht gelingt, dann mindestens
    - mit welcher Codezeile rufst du die Prozedur auf? Welchen Wert haben die Argumente?
    - In welcher Codezeile tritt der Fehler auf? Welche Nummer hat er? Wie heißt er?
    - Wie sind die Variable zum Zeitpunkt des Fehlers belegt?
    - Und meine Lieblingsfrage: Wie lautetet UsedRage.Address?
     
    EarlFred, 26. Juni 2020
    #12
  13. Range.Find mit after:=

    \@EarlFred:
    Trotz der Dinge die sind wie sie nunmal sind nimmst Du Dir Zeit um zu zeigen/zu erklären. Die Einstellung find ich gut. Und das Du Dich um 4:57Uhr umentschieden hast (wie so manchmal *wink.gif*) wirklich gut.
    Es liegt jetzt an Ihm etwas lernen zu wollen. Chancen hat er je genug bekommen. Ob er Sie nutzen will ist die Frage.

    Like it.
     
  14. Neuer Versuch

    Code:
    Diese Funktion läuft bis jetzt tadellos durch. Das liegt daran, dass ich wie Luschi schrieb die Behandlung des aktiven bzw. benötigten Tabellenblattes abgeändert habe. Die Überprüfung der Überschneidung von Bereichen, also benutzter Bereich und Bereich bei dem die Suche beginnt, ist nicht mehr vorgekommen. Die aufrufenden Module und Routinen wurden nicht angepasst. Wohlmöglich dass hier Intersect nicht benötigt wird aber generell in eine solche Funktion gehört.

    Ich steige nur nicht ganz durch, wenn ich in "A1" beginne im Falle einer Nichtüberschneidung, mal egal ob Cells(1, 1) oder Range("A1"), wozu das nötig ist. Ist es nicht besser vorher den "suchen ab" Bereich zu prüfen und dann sollte es funktionieren ? Das habe ich nämlich zuvor gemacht. "A10" ist das Ergebnis einer Inhaltsprüfung einer Zelle.

    Jetzt mal noch was allgemeines:
    Vielleicht bin ich nicht der Spitzenerklärbär.
    Aberl EarlFred "greift" mich furchtbar gerne hier an wegen meinen Threads. Das er Oberlehrer ist, ist nicht meine Schuld. Aus der Sache muss er selbst wieder raus kommen.
    Er hat mich mal bewertet in einem älteren Thread wo er mich auf einen Fehler bei der Verwendung eines Datums hinwies und das mit dem schlechtmöglisten Karma. Einfach nur weil ich in der folgenden Antwort darauf nicht einging.
    Nur mal so Fred vom Jupiter. Deine Tipp habe ich damals wohl verarbeitet. Wegen der scheiß Bewertung ließ ich dich aber links liegen - oder rechts, kannste dir aussuchen.
    Wenn du über Verhalten und Mitarbeit benoten willst mach es in der Schule und antworte einfach nicht wenn es dir persönlich zu blöd ist. Luschi half ohne ohne hier ein Fass auf zu machen.

    HIER NOCHMALS DANKE AN LUSCHI

    Hajo mit seinen Standardtexten, die er sich genauso sparen könnte und nur unnütz Serverlast erzeugt aber dafür seine Postings fleißig hochzählt, sind genauso nervig. Ich habe aber gelernt sie zu "überlesen".
    Deine Posts sind aber nicht zu überlesen und ich denke das bezweckst du auch.
    Ungeachtet dessen hat dein Post mir weitergeholfen, auch wenn du die Hälfte des Textes in Zeit umgemünzt mit einem Kaffee oder Tee besser verbracht hättest.

    Für mich ist der Thread hier erledigt.

    Danke an die Mithelfer.
     
    Tuereintreter, 27. Juni 2020
    #14
  15. \@Mase
    freut mich, wenn der "Oberlehrer" dir helfen konnte.

    @Tuereintreter
    Der Versuch, mich zu beleidigen, ging leider ziemlich daneben. Offensichtlich kennst du den Text nicht, sonst wäre dir klar, dass das kaum eine Beleidigung sein kann. Dennoch nehme ich die Verballhornung meines Namens als versuchte Beleidigung zur Kenntnis.

    Übrigens: Ich nehme mir das Recht heraus, jeden negativ zu bewerten, der es wiederholt nicht für nötig erachtet, sich für Hilfe zu bedanken. Wenn du mit kostenlos erhaltenen Leistungen nicht angemessen umgehen kannst, musst du solche Reaktionen halt ertragen.

    Und wenn ich mir den Code so anschaue: Vielleicht hättest du meinen Beitrag doch intensiver lesen sollen. Aber egal, lässt du ja eh links, rechts oder sonstwo liegen *wink.gif*
     
    EarlFred, 27. Juni 2020
    #15
Thema:

Range.Find mit after:=

Die Seite wird geladen...
  1. Range.Find mit after:= - Similar Threads - Range Find after

  2. SVERWEIS mit Range von bis funktioniert nicht?

    in Microsoft Excel Hilfe
    SVERWEIS mit Range von bis funktioniert nicht?: Hallo, ich komme leider nicht weiter bei meinem SVERWEIS. Spalte A und C werden ausgefüllt. In Spalte B sollte dann der SVERWEIS sein. Leider komm ich mit "von bis" nicht weiter und jedes...
  3. Macro Fehler Subscript out of Range

    in Microsoft Excel Hilfe
    Macro Fehler Subscript out of Range: Hallo Zusammen, ich muesste aus ca. 500 pdf's mit teilweise 90 oder evtl. sogar mehr Seiten, ein paar Daten auslesen. Ich habe ein Makro, dass ich vor Jahren benutzt habe, mit dem ich erst die...
  4. Laufzeitfehler 1004 "Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen".

    in Microsoft Excel Hilfe
    Laufzeitfehler 1004 "Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen".: Hallo Leute,*:)* nachdem ich in die "addIn 1.2.4" ein Sheet RKL eine Dropdownliste und ein Togglebutton hinzugefügt habe bekomme ich beim aufruf der UF die Fehlermeldung "Laufzeitfehler 1004 "Die...
  5. 2x Worksheet_Change(ByVal Target As Range)

    in Microsoft Excel Hilfe
    2x Worksheet_Change(ByVal Target As Range): Hallo zusammen, ich bin VBA-Anfänger und habe die ersten Codes erstellt. Nun möchte ich 2 von Ihnen, welche einzeln funktionieren, zusammenfügen, so dass beide entsprechend durchgeführt werden....
  6. Turnierdatenbank Punkteausweisung anhand Rang

    in Microsoft Excel Hilfe
    Turnierdatenbank Punkteausweisung anhand Rang: Hallo Habe eine Turnierdatenbank, wo ich aus einem separatem Sheet die entsprechenden Rangpunkte automatisch herauslesen kann und - wenn ich den Rang z.B. 2 eingebe - die Punkte dann auf dem...
  7. Hilfe! Loop ohne Ende ...

    in Microsoft Excel Hilfe
    Hilfe! Loop ohne Ende ...: Sub FindeProd_Zeilen() Dim c As Range Dim firstAddress As String With Worksheets("Terminverschiebungen").Columns(Spalte_Produktion) Set c =...
  8. 1. Zelle eines Range-Objektes per VBA finden

    in Microsoft Excel Hilfe
    1. Zelle eines Range-Objektes per VBA finden: Hallo, Forumsteilnehmer, ich habe eine Xl-2003-Datei, in jedem Blatt ist ein Bereich hinterlegt, der sich aber von Blatt zu Blatt in Größe, Startzeile und -Spalte verändert. Wie kann ich per VBA...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden