Find Befehl in nicht aktivem Tabellenblatt

Bild

Betrifft: Find Befehl in nicht aktivem Tabellenblatt
von: Bert
Geschrieben am: 03.09.2015 18:57:37

Hallo nochmal,
ich entrümple meinen Code gerade nach 'Select' und 'Activate'. Komme aber immer wieder an Grenzen. Suche im Netz hat mich nicht wirklich weiter gebracht.
Z.B. wenn ich mich zwischen mehreren Fenstern bewege, funktioniert "Find" nicht, weil ggfs. das Worksheet im Fenster nicht aktiv ist (Laufzeitfehler 1004 "Die Active-Methode des Range-Objektes konnte nicht ausgeführt werden").
So gehts, beinhaltet aber zweimal "Activate"

Sub Test()
Windows(sWkb).Activate
Sheets("Kontenstamm").Activate 
  Cells.Find(What:=(sBankkontoPrüf), After:=ActiveCell, LookIn:=xlValues, LookAt _
  :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
  False, SearchFormat:=False).Activate
End Sub
Wenn er den Wert gefunden hat, soll er mir aus der Fundzeile den Wert 10 Spalten weiter rechts zurückgeben.
Herzlichen Dank im Voraus Euch Wissenden,
Bert (ein relativ Unwissender, noch!)

Bild

Betrifft: AW: Find Befehl in nicht aktivem Tabellenblatt
von: Daniel
Geschrieben am: 03.09.2015 19:11:09
Hi
die Zelle, die du bei AFTER angibst, muss natürlich innerhalb des Bereich liegen, den du durchsuchen lässt.
Somit ist ActiveCell an dieser stelle dann nicht zulässig. In den meisten Fällen kann man diesen Parameter aber einfach weglassen, Excel setzt dann automatisch die erste Zelle des zu durchsuchenden Bereichs ein.
auch kannst du dann die gefundene Zelle nicht einfach aktivieren, weil du nur auf dem aktiven Tabellenblatt eine Zelle aktivieren kannst.
dir hier jetzt konkret weiterhelfen ist schwierig, weil man wissen müsste was du mit der gefundenen Zelle machen willst.
In der Regel schreibt man die gefundene zelle erstmal in eine Variable:

dim Zelle as Range
Set Zelle = workbooks(wbk).Sheets("Kostenstamm").cells.Find(what:=sBankkontoPrüf, Lookin:=xlvalues, ....)
wenn du sie trotzdem selektieren willst, dann nimm Application.Goto, damit kann man auch über Datei- und Blattgrenzen hinweg Zellen selektieren:
Application.Goto Workbooks(wbk).Sheets("Kostenstamm").Cells.Find(What:=sBankkkontoprüf, LookIn:=xlvalues, ....)
Gruß Daniel

Bild

Betrifft: AW: Find Befehl in nicht aktivem Tabellenblatt
von: Bert
Geschrieben am: 04.09.2015 08:51:14
Hallo Daniel,
vielen Dank für die schnelle Antwort.
Ich hatte "After" auch weggelassen, weil es mir auch unlogisch vorkam. Ich meine, es hatte keinen Erfolg. Ich hab soviel probiert gehabt, dass ich es sicher nicht mehr sagen kann. Momentan bin ich nicht "bei meiner Datei", so dass ich nicht nochmal testen kann.
Ich wundere mich eigentlich warum "Sheets("Kontenstamm").Cells.Find..." nicht die Zellen in "Kontenstamm" durchsucht. Damit ist doch eigentlich gesagt, in welchem Blatt gesucht werden soll...
Du hattetst mir ja schon bei dem ähnlich gelagerten Problem "Range nach 'Sheets.Add'" geholfen. Auch da habe ich mich gewundert, warum ich nach der grundsätzlichen Sheets-Auswahl auch bei den Columns nochmal das Sheet angeben musste damit es klappt.
So habe ich denn auch beim aktuellen Problem versucht, rund um "Cells" nochmal "Range(Sheets(...))" o.ä. einzubauen. Hat nicht geklappt.
"Application.Goto" muß ich noch testen. Ich habe gelesen, dass dieser Befehl das entsprechende Fenster auch aktiviert. Das hin und herspringen wollte ich ja gerade vermeiden.
Den gefundenen Wert in eine Variable schreiben klappt auch bei mir. Allerdings brauche ich nicht diesen Wert, sondern aus der Fundzeile den Wert 10 Spalten rechts neben der Fundstelle.
Im "normalen" Excel hätte ich "sverweis" o.ä. verwandt.
Gibt es eine Möglichkeit, aus einem nicht aktiven Workbook - aus einer dann ebenso nicht aktiven Tabelle - einen Wert zu holen?
Vielen Dank im Voraus,
Bert

Bild

Betrifft: AW: Find Befehl in nicht aktivem Tabellenblatt
von: daniel
Geschrieben am: 04.09.2015 09:30:04
Hi
wenn du den SVerweis in VBA nachbauen willst ohne irgendwas zu aktivieren:
ich suche hier mal beispielhaft in der Tabelle1 in Spalte A, der Wert dann aus Spalte K (10 nach rechts) entnommen:

Wert = Sheets("Tabellen").Columns(1).Find(what:="Suchbegriff", LookAt:=xlwhole, lookin:=xlvalues).Offset(0, 10).Value
wenn es möglich sein kann, dass der Suchbegriff nicht vorhanden ist, dann kannst du, um den Fehlerabbruch zu vermeiden, so vorgehen:
dim Zelle as Range
set Zelle = Sheets("Tabelle1").Columns(1).Find(what:="Suchbegriff", Lookat:=xlwhole, lookin:= _
xlvalues)
if Not Zelle is Nothing then Wert = Zelle.Offset(0, 10).value
oder so:
if Worksheetfunction.CountIf(Sheets("Tabelle1").Columns(1), "Suchbegriff") <> 0 Then Wert = Sheets("tabelle1").Columns(1).Find(what:="Suchbegriff", lookat:=xlwhole, lookin:=xlvalues).Offset(0, 10).value
Gruß Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Find Befehl in nicht aktivem Tabellenblatt"