Verständnis UsedRange

Moderator: ModerationP

Verständnis UsedRange

Beitragvon aloqqq » 01. Dez 2020, 09:01

Guten Morgen,

Könnt ihr mir erklären warum das Erste funktioniert und das Zweite nicht?

1: Sub abb
Workbooks.Open "C:\a\b\abb.xlsx"
ActiveSheet.UsedRange.Select
End Sub

2: Sub abb
Workbooks.Open "C:\a\b\abb.xlsx"
Workbooks("abb.xlsx").Worksheets("Tabelle1").UsedRange.Select
End Sub

Hier kommt Laufzeitfehler '9' Index außerhalb des gültigen Bereichs

MfG
aloqqq
 

Re: Verständnis UsedRange

Beitragvon Der Steuerfuzzi » 01. Dez 2020, 09:05

Hallo,

vielleicht gibt es ein Tabellenblatt mit dem Namen "Tabelle1" nicht.
Gruß
Michael
Benutzeravatar
Der Steuerfuzzi
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3827
Registriert: 25. Mär 2013, 13:28

Re: Verständnis UsedRange

Beitragvon Gast » 01. Dez 2020, 09:10

Tatsache na dann bin ich ja beruhigt^^ Danke
Gast
 

Re: Verständnis UsedRange

Beitragvon RPP63 » 01. Dez 2020, 09:16

Moin auch von mir!
Als Ergänzung:
.Select funktioniert nur, wenn sichergestellt ist, dass das Sheet aktiviert ist!
Sonst gibt es einen LZF 1004.
Hingegen funktioniert die Application.Goto-Methode immer.
Teste mal:
Code: Alles auswählen
Application.Goto Workbooks("abb.xlsx").Worksheets("Tabelle1").UsedRange

Gruß Ralf
Benutzeravatar
RPP63
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 11035
Registriert: 19. Okt 2012, 17:41
Wohnort: mitten im Pott

Re: Verständnis UsedRange

Beitragvon Gast » 01. Dez 2020, 09:48

Jap, das funktioniert auch wie ich es mir vorstelle.

Wie kann ich denn den selektierten Bereich wieder ansprechen? Mit UsedRange komme ich hier nicht weiter.

Application.Goto Workbooks("abb.xlsx").Worksheets("Tabelle1").UsedRange
ActiveSheet.USEDRANGE.AutoFilter Field:=1, Operator:= _
xlFilterValues, Criteria2:=Array(2, "12.3.2020")

Ich versuche überwiegend zu kopieren was ich mit der Makro Aufzeichnen Funktion verstehen kann, da ich ansonsten gar keine Befehle kenne.
Gast
 

Re: Verständnis UsedRange

Beitragvon slowboarder » 01. Dez 2020, 11:09

Hi
wenn du einen Zellbereich mit Application.Goto ausgewählt hast, kannst du diesen mit Selection weiter verwenden, dh Selection.Autofilter… sollte dann funktioneren.

allerdings vermeidet man dieses "Rumgehüpfe" in den Tabellen.
Der Recorder muss es so aufzeichnen, weil wir durch die Verwendung der Maus an diese Arbeitsweise gebunden sind, aber im VBA-Code kann man die Befehle direkt an die Objekte hängen, ohne sie vorher zu selektieren.
dh hier sollte dieser Einzeler funktionieren:
Code: Alles auswählen
Workbooks("abb.xlsx").Worksheets("Tabelle1").UsedRange.AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=Array(2, "12.3.2020")

diese Verkürzung macht den Code nicht nur kürzer, sondern auch leichter Lesbar und vor allem schneller.
man verwendet, wenn man etwas mehr Erfahrung hat, den Recoder nicht um sich den fertigen Code zu erstellen, sondern nur noch um nachzuschauen, wie die jeweilige Excelfunktion in VBA programmiert werden muss.
dh der Recorder ist kein vollständiger Übersetzungcomputer, sondern mehr als Nachschlagehilfe zu verwenden

weitere Infos findest du hier: https://www.online-excel.de/excel/singsel_vba.php?f=78

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 27553
Registriert: 18. Apr 2009, 13:33

Re: Verständnis UsedRange

Beitragvon Gast » 01. Dez 2020, 11:25

Ok Danke für die Tipps.

Macht es Sinn bei mehreren Filter den Bereich als Objekt zu definieren? Quasi:

Code: Alles auswählen
Set Tab1 = Workbooks("abb.xlsx").Worksheets("Tabelle1").UsedRange
Tab1.AutoFilter Field:=1, Criteria1:="abc"
Tab1.AutoFilter Field:=2, Criteria1:="def"


statt

Code: Alles auswählen
Workbooks("abb.xlsx").Worksheets("Tabelle1").UsedRange.AutoFilter Field:=1, Criteria1:="abc"
Workbooks("abb.xlsx").Worksheets("Tabelle1").UsedRange.AutoFilter Field:=2, Criteria1:="def"


oder ist das dann beides gleich?
Gast
 

Re: Verständnis UsedRange

Beitragvon slowboarder » 01. Dez 2020, 11:37

Hi
Mit Variablen wirds kürzer und besser lesbar, wenn du sinnvolle Variablennamen nimmt.
Hauptvorteil ist der geringere Aufwand, wenn sich mal der Dateiname ändert.
Mit Variablen musst du da nur 1x bei der Zuweisung in den Code eingreifen, ohne so oft wie verwendet, mit dem Risiko was zu über sehen.

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 27553
Registriert: 18. Apr 2009, 13:33


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Flotter Feger, Grace13, Stefan87 und 8 Gäste

cron