2016-09-13 5 views
0

Ich versuche, die Funktion find zu verwenden, um einen breiteren Code für mehrere Instanzen derselben Basistabelle zu erstellen. Ich suche Tabellenköpfe links von meinem Tisch mit diesem Codevba: Funktion mit .rows finden, die ein unerwartetes Ergebnis liefert

preschoolStart = (Sheets("Rotas").Columns(3).Find(What:="School starters", LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=False).Row) + 1 

, die der Header „Schulanfänger“ findet und sendet den Verweis auf die Zelle darunter, die die erste von mehreren Namen in der Kategorie „Vorschule enthalten ".

Dies funktioniert in der obigen Instanz und in zwei anderen Instanzen mit dem gleichen Format, aber wenn es für den folgenden Fall verwendet wird, gibt es einen Zeilenwert weit unterhalb der erwarteten zurück.

staffStart = (Columns(3).Find(What:="Staff", LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=False).Row) + 1 

Meine ursprüngliche Theorie, warum dies konnte, war sein, dass es andere Header mit den Mitarbeitern im Namen, die verwirrend Dinge sind, aber das wäre mit den auf dem Rat von @Jeeped und @Rory Änderungen wird behoben .

Preschoolers section image Staff section image

Hinweis: Das eigentliche Problem war, dass ich versehentlich etwas anderes in die gleiche Zelle zu schreiben war und gedacht hatte keine andere Möglichkeit, die staffStart Variable zu überprüfen. Ich habe daher beschlossen, die Antwort von @Jeeped die offizielle Antwort zu machen.

+0

Gibt es andere Zeilen in Spalte C, die "Staff" enthalten? Sehen Sie sich die Zeile 1 von "staffStart" in Spalte C genauer an. – Rory

+0

Können Sie eine Momentaufnahme der 2 Tabellen bereitstellen. Auch das Veröffentlichen Ihres Codes könnte helfen, das Problem zu verstehen, da das Problem möglicherweise nicht in der Zeile liegt, die Sie angegeben haben. – Zac

+0

@Rory Es gibt Zellen, die "Mitarbeiter insgesamt" enthalten, einschließlich des über StaffStart-Ergebnis. Es gibt jedoch eine andere mit dem "Total staff" zwischen den erwarteten und tatsächlichen Ergebniszeilen. Es gibt auch "Staff" weiter unten in der Tabelle. –

Antwort

0

Definieren Sie den Arbeitsblattverweis .Parent richtig und fügen Sie dem Range.Find method einen After:=.Cells(.Cells.Count) Parameter hinzu.

with Sheets("Rotas").Columns(3) 
    staffStart = .Find(What:="Staff", After:=.Cells(.Cells.Count), LookAt:=xlWhole, _ 
         SearchDirection:=xlNext, MatchCase:=False).Row + 1 
end with 
+0

Ärgerlich scheint das nicht funktioniert zu haben. Was macht der zusätzliche Parameter? –

+0

Ich entschuldige mich, es hat funktioniert. Vielen Dank. –

Verwandte Themen