Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Range Objekt richtig ansprechen - Laufzeitfehler 1004

485 views
Skip to first unread message

chr...@gmail.com

unread,
Sep 29, 2015, 6:31:38 AM9/29/15
to
Hallo,
vlt kennt sich hier jemand aus?! Ich versuche eine Range auf einem neu erstellten Tabellenblatt in einem Code zu referenzieren. XL VBA spuckt leider nur einen Laufzeitfehler aus. Ich weiß nicht, woran es liegt. Mir fehlt irgendeine Information über Ranges. Bisher dachte ich, dass Objekte hierarchisch angesprochen werden.
so in etwa Sheets(Variable).Range...


Sheets(AnaAccntSheetStr).Range(Cells(2, Positioner + 1), Cells(Acc_Row_Count, Positioner + 6)).Select

AnaAccntSheetStr ist eine Tabellenblatt String, der bei Debug.print auch richtig rauskommt. Ich möchte eigentlich die Range ansprechen um sie zu sortieren.

Jemand eine Idee?

Weiter oben im code spreche ich zB Zellen an, was tadelos funktioniert. Nur eben nicht mit der Range.

Sheets(AnaAccntSheetStr).Cells(2, Positioner + 6).Value = "Analyze"

chr...@gmail.com

unread,
Sep 29, 2015, 6:33:33 AM9/29/15
to
Ach ja, wenn ich den Code anhalte, dann markiert er mir die Range auf dem Activesheet. Was ebenfalls darauf hindeutet, dass meine Referenzierung der Range ned passt.

Claus Busch

unread,
Sep 29, 2015, 6:41:53 AM9/29/15
to
Hallo,

Am Tue, 29 Sep 2015 03:33:31 -0700 (PDT) schrieb chr...@gmail.com:

> Ach ja, wenn ich den Code anhalte, dann markiert er mir die Range auf dem Activesheet. Was ebenfalls darauf hindeutet, dass meine Referenzierung der Range ned passt.

erkläre mal bitte genauer. Was ist "Positioner"?
Du kannst nur etwas auf einem aktiven Blatt selektieren. Falls das Blatt
nicht aktiv ist, muss du es vor dem Selektieren aktivieren.
Aber Select, Selection und Activate werden eigentlich nie benötigt und
bewirken nur das Flackern des Bildschirms. Deswegen wäre es notwendig zu
wissen,welchen Bereich du nach welcher Spalte sortieren möchtest.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional

chr...@gmail.com

unread,
Sep 29, 2015, 6:56:21 AM9/29/15
to
Select geht schon mal nicht. Nichtsdestotrotz referenziere ich das falsche Objektsheet an, wenn ich .activate verwende...

chr...@gmail.com

unread,
Sep 29, 2015, 7:02:05 AM9/29/15
to
Der Positioner ist nichts anderes als eine Konstante bzw. Variable mit dem Wert 3 als Single Zahl deklariert. Wenn ich die Referenzierung des Tabellenblattes wegnehme, dann markiert er mir den Bereich auf einem anderen Tabellenblatt.
Also in der Art:
Range(Cells(2, Positioner + 1), Cells(Acc_Row_Count, Positioner + 6)).Activate

Das Selecten und Activate habe ich nur verwendet, um optisch zu sehen, was er anspricht. Das brauche im späteren Code nicht. Das verwende ich die Range für den Filter und Sortierung, die ich setzen will.

Claus Busch

unread,
Sep 29, 2015, 7:04:59 AM9/29/15
to
Hallo,

Am Tue, 29 Sep 2015 04:02:04 -0700 (PDT) schrieb chr...@gmail.com:

> Das Selecten und Activate habe ich nur verwendet, um optisch zu sehen, was er anspricht. Das brauche im späteren Code nicht. Das verwende ich die Range für den Filter und Sortierung, die ich setzen will.

probiere es so:

Application.Goto Sheets("AnaAccntSheetStr").Cells(2, Positioner + 1)
Range(Cells(2, Positioner + 1), Cells(Acc_Row_Count, Positioner + 6)).Select

chr...@gmail.com

unread,
Sep 29, 2015, 7:16:12 AM9/29/15
to
Vielen Dank! Das funktioniert tadellos so. Ich frage mich nur, warum er über die Anweisung
Sheets(AnaAccntSheetStr).Range(Cells(2, Positioner + 1), Cells(Acc_Row_Count, Positioner + 6))
die Range nicht "erreichen" kann. Hab schon einige Mal so etwas mit Ranges gehabt. Irgendwas mache ich ja falsch?!

Trotzdem vielen Dank für den Lösungsweg. Das funktioniert immerhin. Wenn ich es direkt referenzieren könnte, dann ist der Code natürlich kürzer ;-)

Claus Busch

unread,
Sep 29, 2015, 7:40:00 AM9/29/15
to
Hallo,

Am Tue, 29 Sep 2015 04:16:10 -0700 (PDT) schrieb chr...@gmail.com:

> Vielen Dank! Das funktioniert tadellos so. Ich frage mich nur, warum er über die Anweisung
> Sheets(AnaAccntSheetStr).Range(Cells(2, Positioner + 1), Cells(Acc_Row_Count, Positioner + 6))
> die Range nicht "erreichen" kann. Hab schon einige Mal so etwas mit Ranges gehabt. Irgendwas mache ich ja falsch?!

der Blattname muss in Anführungszeichen.

chr...@gmail.com

unread,
Sep 29, 2015, 7:50:48 AM9/29/15
to
Das versteh ich nicht, weil AnaAccntSheetStr schon eine String-Variable ist. Die müsste doch im VBA schon mit "" geführt sein?

Bernhard Sander

unread,
Sep 29, 2015, 7:55:44 AM9/29/15
to
Hallo chritas,

> Ich frage mich nur, warum er über die Anweisung
> Sheets(AnaAccntSheetStr).Range(Cells(2, Positioner + 1), Cells(Acc_Row_Count, Positioner + 6))
> die Range nicht "erreichen" kann. Hab schon einige Mal so etwas mit Ranges gehabt.
> Irgendwas mache ich ja falsch?!

"Erreichen" kannst Du diesen Range, nur nicht ohne weiteres aktivieren ( .Select).
Um einen Zellbereich aktivieren zu können muss das betreffende Arbeitsblatt zuvor aktiviert worden sein.

Teile Deinen Befehl in zwei auf, etwa so:
Sheets(AnaAccntSheetStr).Activate
Range(Cells(2, Positioner + 1), Cells(Acc_Row_Count, Positioner + 6)).Select


Ein pures "Erreichen" ohne zu aktivieren funktioniert trotzdem:

Set Bereich = Sheets(AnaAccntSheetStr).Range(Cells(2, Positioner + 1), Cells(Acc_Row_Count, Positioner + 6))

klappt tadellos.
Mit der Variablen "Bereich" kannst Du anschließend weitere Dinge tun.


Gruß
Bernhard Sander

Freischlad, Michael

unread,
Sep 29, 2015, 8:02:03 AM9/29/15
to
Hallo,

On 29.09.2015 12:31, chr...@gmail.com wrote:
>
> Sheets(AnaAccntSheetStr).Range(Cells(2, Positioner + 1), Cells(Acc_Row_Count, Positioner + 6)).Select

Die Cells innerhalb des Range-Teils müssen sich auf dem gleichen Blatt
wie die Range selbst befinden (hier also Sheets(AnaAccntSheetStr)).
Versuch es mal so:
With Sheets(AnaAccntSheetStr)
.Range(.Cells(2, Positioner + 1), .Cells(Acc_Row_Count, Positioner +
6)).Select
End With

Gruß
Michael

innoceny kelle

unread,
Oct 5, 2021, 8:50:06 AM10/5/21
to
Hallo, benötigen Sie heute dringend einen Kredit, um eine Investition zu tätigen? Ein neues Geschäft gründen oder Rechnungen bezahlen? Und zahlen Sie uns in Raten zurück, wenn Sie möchten? Wir bieten Kredite zu einem sehr niedrigen Zinssatz von 2% an.
For weitere Informationen antworten Sie auf unsere
E-Mail-Adresse: stevec...@gmail.com
tel: +1(814)429-3952
0 new messages