Microsoft Excel

Herbers Excel/VBA-Archiv

Array mit Range(Cells(y,x),Cells(a,b)) ? | Herbers Excel-Forum


Betrifft: Array mit Range(Cells(y,x),Cells(a,b)) ? von: Sebastian
Geschrieben am: 25.07.2012 15:07:09

Hallo Zusammen,

Ich habe ein seltsames Phänomen, das mich in der Programmierung zuerst irriterte und jetzt weiß ich zwar, wie ich es umgehen kann. Aber ich möchte wissen, warum es nicht funktioiert...

Wenn ich ein Array auf einem anderen Worksheet auslesen möchte und das mit Array-Formeln versuche gibt es bei dieser Syntax einen "Prozedur-Fehler":

Dim SuchArray As Variant
Dim LetztZelle as Decimal
LetzteZelle = Sheets("BDE LISTE").Range("a5").End(xlDown).Row
SuchArray = Sheets("BDE LISTE").Range(Cells(1, 1), Cells(LetzteZelle, 6))

Wen ich das ganze so schreibe, bekomme ich kenen Fehler...:

Dim SuchArray As Variant
Dim LetztZelle as Decimal
LetzteZelle = Sheets("BDE LISTE").Range("a5").End(xlDown).Row
SuchArrayTerm = "A1:F" & LetzteZelle
SuchArray = Sheets("BDE LISTE").Range(SuchArrayTerm)

Ich verstehe nicht, warum der Array die "Cells" Methode nicht versteht. Weiß jemand warum?
Oder mache ich das so richtig stümperhaft falsch, so dass alle VBA-Cracks jetzt gerade vor Lachen vom Stuhl fallen... :-)

Würde gerne wissen, was ich falsch gedacht habe... in Bezug auf den Array und sein Verhalten....

  

Betrifft: AW: Array mit Range(Cells(y,x),Cells(a,b)) ? von: fcs
Geschrieben am: 25.07.2012 16:21:37

Hallo Sebastian,

Das Problem tritt auf, wenn "BDE_Liste" bei dir nicht nicht das aktive Blatt ist. Range und Cell beziehen sich ohne vorangestelltes Tabellen-Objekt immer auf das aktive Blatt bzw. innerhalb von Tabellenblatt-Modulen immer auf das zum Modul gehörige Tabellenblatt. Es ist aber nicht möglich innerhalb von Range(Bereich1,Bereich2) für Bereich1 und Bereich2 Zelle(n) aus einem anderen tabellenblatt anzugeben.

Du muss für alle Range-Objekte in der Zeile den Bezug zum gleichen Tabellenblatt herstellen. Das geht am einfachstem mit With und dann einem Punkt vor allen relevanten Objekten.

  Dim SuchArray As Variant
  Dim LetzteZelle As Long
  LetzteZelle = Sheets("BDE LISTE").Range("a5").End(xlDown).Row
  With Worksheets("BDE LISTE")
    SuchArray = .Range(.Cells(1, 1), .Cells(LetzteZelle, 6))
  End With

Deklaration als Decimal führt bei mir zu einer Fehlermeldung, Long ist auch ausreichend.

Gruß
Franz


  

Betrifft: AW: Array mit Range(Cells(y,x),Cells(a,b)) ? von: Sebastian
Geschrieben am: 25.07.2012 20:47:22

Hallo Franz,

Vielen Dank für die Aufklärung. So ist es auch einleuchtend.
Und der Code auch "sauber" geschrieben.
Ich habe das nie wirtklich richtig gelernt...deshalb gehe ich oft nach dem Motto: "Blöd darf man sein...man muss sich nur zu helfen wissen :-)"

Trotzdem Danke nochmal

Freundliche Grüße

Sebastian