Anzeige
Archiv - Navigation
1116to1120
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bereich festlegen

Bereich festlegen
Horst
Hallo,
ich will einen Bereich festlegen, erhalte mit meinen Befehlen jedoch einen Fehler
'Hier kommt Anwendungs oder objektorientierter Fehler
Set Bereich = Sheets("Namen").Range(Cells(2, 8), Cells(20, 8))
'Die folgenden Befehle funktionieren jedoch, bzw sie melden keinen Fehler
Set Bereich = Sheets("Namen").Range("H2:H30")
Set Bereich = Range(Cells(2, 8), Cells(20, 8))
Wie kann ich das erste Beispiel ändern ?
Vielen Dank im Voraus
Gruß Horst

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Dim Bereich As Range ?
12.11.2009 10:14:36
robert
AW: Dim Bereich As Range ?
12.11.2009 10:23:47
Horst
Hallo Robert,
Dim Bereich As Range habe ich gemacht.
Set Bereich = Range(Cells(2,8),Cells(20,8) funktioniert ja auch.
Nur wenn ich noch das Blatt davor setze gibt es Probleme
Set Bereich = Sheets("Namen").Range(Cells(2, 8), Cells(20, 8))
Gruß Horst
AW: Dim Bereich As Range ?
12.11.2009 12:18:28
IngGi
Hallo Horst,
der Fehler liegt an der unvollständigen Referenzierung. Deine Beispiele stellen sich wie folgt dar:
Beispiel1:
Set Bereich = Sheets("Namen").Range("H2:H30") 

Hier bezieht sich der Rangebereich auf das Tabellenblatt "Namen". so wie du es angegeben hast.
Beispiel2:
Set Bereich = Range(Cells(2, 8), Cells(20, 8)) 

Hier hast du kein Tabellenblatt angegeben. Range und beide Cells beziehen sich auf das aktive Tabellenblatt (bzw. auf das Tabellenblatt, in dessen Codemodul das Makro steht, falls dieses im Modul eines Tabellenblattes steht).
Beispiel3:
Set Bereich = Sheets("Namen").Range(Cells(2, 8), Cells(20, 8)) 

Das geht schief, da du für Range explizit das Tabellenblatt "Namen" vorgegeben hast. Die beiden Cells beziehen sich dagegen auf das aktive Tabellenblatt (bzw. auf das Tabellenblatt, in dessen Codemodul das Makro steht, falls dieses im Modul eines Tabellenblattes steht).
Alternative:
With Sheets("Namen")
.Range(.Cells(2, 8), .Cells(20,8))
End With
Jetzt werden (durch den Punkt davor) Range und beide Cells korrekt über das Tabellenblatt referenziert.
Gruß Ingolf
Anzeige
AW: Bereich festlegen
12.11.2009 10:23:42
Oberschlumpf
Moin Horst
Ich habe festgestellt, dass der Befehl
Set Bereich = Sheets("Namen").Range(Cells(2, 8), Cells(20, 8))
nur dann funzt, wenn die Tabelle "Namen" angezeigt wird.
Wenn irgdeine andere Tabelle das ActiveSheet ist, dann funzt der Befehl nicht.
Woran das liegt, weiss ich aber leider auch nicht, da ja zumindest der Befehl
Set Bereich = Sheets("Namen").Range("H2:H30")
der eigtl derselbe wie der obige Befehl ist, auch dann funktioniert, wenn Tabelle "Namen" NICHT angezeigt wird.
Daher würde ich vorschlagen, arbeite nur mit dem 2. Befehl.
/der dritte Befehl ist nicht hilfreich, da dieser Befehl immer nur den Bereich der aktiven Tabelle der Variablen Bereich zuweist.
Hilfts?
Ciao
Thorsten
Anzeige
Nachtrag
12.11.2009 10:28:29
Oberschlumpf
...wenn der Befehl
Set Bereich = Sheets("Namen").Range("H2:H30")
für deinen anderen Code n icht hilfreich ist, dann versuch es so:
Sheets("Namen").Activate
Set Bereich = Range(Cells(2, 8), Cells(20, 8))
Sheets("DeineVorherigeTabelle").Activate
Vielleicht solltest du mit
Application.ScreenUpdating = False
...
Application.ScreenUpdating = True
arbeiten, wenn das Flackern durch mehrere Sheets("...").Activate stören sollte.
Ciao
Thorsten
AW: Nachtrag
12.11.2009 10:37:30
Horst
Hallo Thorsten,
erst mal vielen Dank.
direkt mit Range("H2:H30") geht es leider nicht, weil ich den Bereich automatisch ermitteln muss.
Also bleibt mir nur die geschichte mit Cells(.....
Auf die Idee mit Sheets(" ").Activate bin ich nicht gekommen. grrrrrr
So könnte ich es machen, obwohl es mir so richtig nicht gefällt, die Blätter umzuschalten.
Auf jeden Fall vielen Dank
Gruß Horst
Anzeige
weil Cells... ein eigenes Range Objekt ist...
12.11.2009 10:44:40
Tino
Hallo,
braucht er auch die Tabelle als Objekt, siehe meine Antwort.
Gruß Tino
vielleicht so, Tabelle bei allen bezügen
12.11.2009 10:31:50
Tino
Hallo,
beachte die Punkte.
Dim Bereich As Range
With Sheets("Namen")
Set Bereich = .Range(.Cells(2, 8), .Cells(20, 8))
End With
Gruß Tino
AW: vielleicht so, Tabelle bei allen bezügen
12.11.2009 10:54:06
Oberschlumpf
Moin Tino
Danke auch von mir für den Hinweis ...Cells = auch Objekt..., aber...
...ist
With Sheets("Namen")
Set Bereich = .Range(.Cells(2, 8), .Cells(20, 8))
End With
nicht das Gleiche wie
Set Bereich = Sheets("Namen").Range(.Cells(2, 8), .Cells(20, 8))
was ohne Tabelle.Activate
auch zum Fehler führt?
Ciao
Thorsten
Anzeige
AW: vielleicht so, Tabelle bei allen bezügen
12.11.2009 11:41:15
Luschi
Hallo Thorsten,
bei dem Beispiel:
With Sheets("Namen")
   Set Bereich = .Range(.Cells(2, 8), .Cells(20, 8))
End With
verweisen alle Objekte (die mit dem Punkt davor) auf die Tabelle 'Namen'
Im folgenden Beispiel zeigt Range auf die Tabelle 'Namen' aber .Cells() erwartet eine vorangegangene With-Anweisung, die es aber nicht gibt, und deshalb der Fehler.
Set Bereich = Sheets("Namen").Range(.Cells(2, 8), .Cells(20, 8))
Gruß von Luschi
aus klein-Paris
AW: vielleicht so, Tabelle bei allen bezügen
12.11.2009 11:53:42
Oberschlumpf
huch
Hi ?
Ja, hast Recht, ich hab den . vor Cells "nich gesehn", obwohl Tino explizit drauf hingewiesen hatte.
Danke fürs Lernen!
Ciao
Thorsten
Anzeige
AW: vielleicht so, Tabelle bei allen bezügen
12.11.2009 11:50:44
Tino
Hallo,
kommt darauf an was Du für den Punkt eingesetzt hast und wo sich der Code befindet.
Befindet sich der Code in einem Modul wird ohne Angabe der Tabelle wird die aktive genommen.
Also muss man jedem Objekt die Tabelle mit zuweisen,
außer dem Range selbst also so 'Range(.Cells(),.Cells())' dies scheint VBA so geregelt zu bekommen
durch die Objekte innerhalb von Range.
Befindet sich der Code in der Tabelle wird diese Tabelle herangezogen.
Hier einige Beispiele
https://www.herber.de/bbs/user/65808.xls
Ich hoffe man kann verstehen was ich hier von mir gebe.
Gruß Tino
Anzeige
danke...
12.11.2009 11:55:21
Oberschlumpf
...Tino
Ich war zu vorschnell in meiner Kritik.
Ciao
Thorsten

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige