Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema RefEdit
BildScreenshot zu RefEdit RefEdit-Seite mit Beispielarbeitsmappe aufrufen

Bereich festlegen | Herbers Excel-Forum


Betrifft: Bereich festlegen von: Horst
Geschrieben am: 12.11.2009 10:05:24

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

  

Betrifft: Dim Bereich As Range ? von: robert
Geschrieben am: 12.11.2009 10:14:36




  

Betrifft: AW: Dim Bereich As Range ? von: Horst
Geschrieben am: 12.11.2009 10:23:47

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


  

Betrifft: AW: Dim Bereich As Range ? von: IngGi
Geschrieben am: 12.11.2009 12:18:28

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


  

Betrifft: AW: Bereich festlegen von: Oberschlumpf
Geschrieben am: 12.11.2009 10:23:42

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


  

Betrifft: Nachtrag von: Oberschlumpf
Geschrieben am: 12.11.2009 10:28:29

...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


  

Betrifft: AW: Nachtrag von: Horst
Geschrieben am: 12.11.2009 10:37:30

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


  

Betrifft: weil Cells... ein eigenes Range Objekt ist... von: Tino
Geschrieben am: 12.11.2009 10:44:40

Hallo,
braucht er auch die Tabelle als Objekt, siehe meine Antwort.

Gruß Tino


  

Betrifft: vielleicht so, Tabelle bei allen bezügen von: Tino
Geschrieben am: 12.11.2009 10:31:50

Hallo,

beachte die Punkte.

Dim Bereich As Range
With Sheets("Namen")
 Set Bereich = .Range(.Cells(2, 8), .Cells(20, 8))
End With
Gruß Tino


  

Betrifft: AW: vielleicht so, Tabelle bei allen bezügen von: Oberschlumpf
Geschrieben am: 12.11.2009 10:54:06

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


  

Betrifft: AW: vielleicht so, Tabelle bei allen bezügen von: Luschi
Geschrieben am: 12.11.2009 11:41:15

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


  

Betrifft: AW: vielleicht so, Tabelle bei allen bezügen von: Oberschlumpf
Geschrieben am: 12.11.2009 11:53:42

huch

Hi ???

Ja, hast Recht, ich hab den . vor Cells "nich gesehn", obwohl Tino explizit drauf hingewiesen hatte.


Danke fürs Lernen!

Ciao
Thorsten


  

Betrifft: AW: vielleicht so, Tabelle bei allen bezügen von: Tino
Geschrieben am: 12.11.2009 11:50:44

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


  

Betrifft: danke... von: Oberschlumpf
Geschrieben am: 12.11.2009 11:55:21

...Tino

Ich war zu vorschnell in meiner Kritik.

Ciao
Thorsten


Beiträge aus den Excel-Beispielen zum Thema "Bereich festlegen"