ich beobachte gerade eine kleine Ungereimtheit in VBA. In einem Modul kann ich über die Zeilen
Sub letzteZeile ()
Dim test as Long
Dim c as variant
For Each c in Range(testrange)
if c.value then test = c.row
next c
End Sub
Die letzte Zeile des Testranges bestimmen. Wenn ich die gleiche Codezeile nun in einem Tabellenblatt hinterlege, wo sie über Worksheet change ausgelöst wird und das Ergebnis global bereitstellen soll (hierzu über Public eine Dim definiert), dann bekomme ich die Fehlermeldung: die Methode Range für das Objekt Worksheet ist fehlgeschlagen. Erst wenn ich über Sheets(Tabelle1).Range(testrange) adressiere funktioniert es.
Den Fehler rausbekommen habe ich also. Mein Gedanke ist: Ich arbeite gern mit Ranges in den Makros, da diese wenn einmal definiert relativ unempfindlich gegen Änderungen sind. Ein Sheet Name kann sich schnell einmal verändern. Da ich diesen hier jedoch als fixe Stringfolge hinterlegen muß, wird das Makro bei Änderung des Sheetnames versagen. Genau das passiert mit Ranges nicht.
Wie kann ich von einem VBA Worksheet diese Zeilenbestimmung durchführen, ohne Sheet verwenden zu müssen. Bzw. ich nicht mit starren Sheetnames arbeiten muß. Das Ergebnis dieser Bestimmung soll dann global als long allen Modulen zur Verfügung stehen.
Vielen Dank für Eure Hinweise.
Grüße, Andreas