Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1172to1176
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

Ranges konditional in Array übertragen - Problem

Ranges konditional in Array übertragen - Problem
Andreas
Hallo Herber Fans,
ich arbeite an einer Methode, eine Selection in Abhängigkeit der Anzahl ihrer Spalten entweder zeilenweise oder gleich "en bloc" in ein Array zu übertragen. Zeilenweise hat es auch kurz funktioniert, aber nie blockweise (.columns.count = 1). Ich weiß nicht mehr, was ich noch ändern soll, damit beide Varianten laufen. Dimensionierung? Deklaration des Arrays? Vielleicht kann jemand bei Gelegenheit und Interesse mal einen Blick darauf werfen. Ich würde mich freuen.
Option Explicit
Sub ArrayEinlesen()
Dim rgTemp As Range
Dim clCell As Range
Dim i As Long
Dim ii As Long
Dim arrTest() As Variant 'as Range 'as Object
With Selection
If .Columns.Count = 1 Then
arrTest = Selection
Else
For i = 1 To .Rows.Count
ReDim arrTest(1 To .Rows.Count, 1 To 1)
Set arrTest(i, 1) = .Rows(i)
Next i
End If
End With
For i = LBound(arrTest, 1) To UBound(arrTest, 1)
For ii = LBound(arrTest, 2) To UBound(arrTest, 2)
rgTemp = arrTest(i, ii)
Debug.Print rgTemp.Address
For Each clCell In rgTemp.Cells
Debug.Print clCell.Address
Next clCell
Next ii
Next i
End Sub
Vielen Dank und Grüße, Andreas Hanisch
AW: Ranges konditional in Array übertragen - Problem
02.09.2010 15:44:11
Rudi
Hallo,
wenn es ein zusammenhängender Bereich ist, geht es einfach mit ArrTest=Selection.
Gruß
Rudi
AW: Ranges konditional in Array übertragen - Problem
02.09.2010 16:16:02
Andreas
Hi Rudi,
ja, es ist ein zusammenhängender Range. Die von Dir vorgeschlagene Zeile habe ich aber auch schon im Code drin. Was ich erreichen möchte:
Selection = A1:B5, 2 Columns
Ausgabe im clCell.Address Debug.Print:
A1:B1
...
A5:B5
Wenn hingegen nur der Bereich A1:A5 (Columns.Count = 1, Füllung en bloc) selektiert ist, dann soll die Debug.Print Ausgabe liefern:
A1
...
A5
Und eben diese Mischung von 1. Das Array über eine Schleife mit Ranges befüllen und 2. en bloc mit einem (einspaltigen) Range befüllen, bekomme ich nicht hin.
Kannst Du Dir es bitte noch einmal ansehen?
Dank und Gruß, Andreas
Anzeige
AW: Ranges konditional in Array übertragen - Problem
02.09.2010 17:08:58
xr8k2
Hallo Andreas,
also wenn ich das richtig verstehe, und das ist nicht ganz so einfach, kriegst du die Rangeobjekte selbst nicht en bloc in dein Array, auch nicht bei einspaltiger Selection. M.E. kannst du en bloc (ich werf jetzt auch mal mit diesen Ausdrücken um mich ;-) ) nur die Values einem Variant-Datenfeld zuweisen. Die Range-Objekte selbst (egal ob nun einzelne Zellen oder Zeilenabschnitte) wirst du immer schrittweise ins Array reinwerfen müssen.
Gruß,
xr8k2
PS: Ich lass mich aber gern eines besseren belehren ^^
AW: Ranges konditional in Array übertragen - Problem
02.09.2010 17:12:52
Rudi
Hallo,
da liegst du voll daneben.
Mit arrTest=Selection hast du den Inhalt des Bereichs im Array. Da gibt es keine Adressen.
Wenn du den Bereich als solchen einlesen willst, musst du die Selection einer Objektvariablen vom Typ Range zuweisen. Set myRange=Selection. Das ist was ganz anderes.
Gruß
Rudi
Anzeige
AW: Ranges konditional in Array übertragen - Problem
02.09.2010 20:52:14
Gerd
Hallo Andreas,
über deinem Vorhaben hängt noch eine Art Schleier.
Sub a()
Dim Bereich As Range
Dim arr()
Dim lngRow As Long, lngCol As Long
Set Bereich = Selection
ReDim arr(1 To Bereich.Rows.Count)
For lngRow = 1 To Bereich.Rows.Count
For lngCol = 1 To Bereich.Columns.Count
arr(lngRow) = Range(Bereich(lngRow, 1), Bereich(lngRow, lngCol)).Address(False, False, xlA1)
Next
Next
For lngRow = LBound(arr) To UBound(arr)
Debug.Print arr(lngRow)
Next
End Sub
Sub b()
Dim rngZeile As Range
Dim arr()
Dim lngIndex As Long
ReDim arr(Selection.Rows.Count - 1)
For Each rngZeile In Selection.Rows
Debug.Print rngZeile.Address(False, False, xlA1)
arr(lngIndex) = rngZeile.Address(False, False, xlA1)
lngIndex = lngIndex + 1
Next
For lngIndex = LBound(arr) To UBound(arr)
Debug.Print arr(lngIndex)
Next
End Sub
Gruß Gerd
Anzeige
AW: Ranges konditional in Array übertragen - Problem
02.09.2010 23:38:34
Andreas
Hallo liebe Antworter,
ich habe es rausgefunden. Eure Erläuterungen haben mich drauf gebracht. Einen ganzen Range, sprich dessen Ergebnisse en bloc in ein Array zu füttern ist eine sehr hilfreiche Methode. In diesem Fall wollte ich aber den Range als solches im Array haben. Wir gesagt, Eure Erläuterungen... Und zwar:
Set arrTest(1,1) = Selection

Man muß die Selection nicht dem Array als solches, sondern dessen "Speicherplatz" auf der (1,1) zuweisen! Wer es probieren will - es war auch noch ein Fehler in der Schleife die den .Rows.Count bearbeitet. Die Arraydimensionierung muß VOR dem Schleifenbeginn gesetzt sein, nicht darin.
Vielen Dank für Eure zielführenden Anregungen! Und wieder hat sich etwas Wissen etwas tiefer ins Bewußtsein gegraben.
Schlaft gut. Viele Grüße, Andreas Hanisch
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige