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

Range in Array füllen, Problem bei Cells.Count = 1

Range in Array füllen, Problem bei Cells.Count = 1
Andreas
Hallo VBA Freunde,
ich habe es heute zum ersten mal angewandt, ein Array nicht mit einer Schleife, sondern gleich als einen Block zu füllen. Dank Renee konnte ich auch den Fehler beheben, daß ich mein Array nur eindimensional eingerichtet hatte.
Also für Ranges mit mehr als 1 Zelle funktioniert es. Nun habe ich den Code aber eingesetzt und in bestimmten Konstellationen habe ich nur eine Zelle, die verarbeitet werden soll. Und da stürzt der Code ab. „Typen unverträglich“. Ich verstehe leider nicht warum dieser Fehler kommt. 4 Zellen untereinander sind ein Range. Aber eine einzelne Zelle ist doch genauso ein Range?! D.h. das Einlesen ins Array und anschließende Duplikate löschen und sortieren müßte alles glatt durchlaufen. OK, Duplikate und Sortierung sind in dem Fall überflüssig, aber ich will nicht noch eine IF Prüfung vorschalten, die auf .Cells.Count = 1 prüft.
Range ist Range (?) und daher interessiert es mich sehr, warum es nicht funktioniert.
https://www.herber.de/bbs/user/68173.xls
Es wäre toll, wenn ein interessierter Forumsteilnehmer einen Blick darauf werfen könnte.
Dank und Gruß, Andreas Hanisch
AW: Range in Array füllen, Problem bei Cells.Count = 1
22.02.2010 16:33:21
Tino
Hallo,
dies liegt daran das arrTest vom Typ Variant ist und bei einer Zelle nur den Wert der Zelle bekommt
und somit kein Array daraus wird.
Wenn Du nicht sicher stellen kannst ob Dein Bereich aus mehreren Zellen besteht,
kannst Du dies so abfangen.
Sub ArrayEinleseTest()
Dim rgArrTest2 As Range
Dim arrTest As Variant
Set rgArrTest2 = ThisWorkbook.Names("rgArrTest2").RefersToRange
arrTest = rgArrTest2.Value
If IsArray(arrTest) Then
Debug.Print arrTest(1, 1)
Else
Debug.Print arrTest
End If
End Sub
Gruß Tino
AW: Range in Array füllen, Problem bei Cells.Count = 1
22.02.2010 16:43:07
Andreas
Hey Tino,
vielen Dank. So geht es! Deine Erklärung hilft dem Verständnis sehr gut!
Hab noch einen schönen Nachmittag/ Abend.
Viele Grüße, Andreas
Anzeige
AW: Range in Array füllen, Problem bei Cells.Count = 1
22.02.2010 16:36:13
Rudi
Hallo,
Aber eine einzelne Zelle ist doch genauso ein Range?! 

Das schon. Ergibt aber kein Array, da überflüssig.
Du könntest dein Array ja testen, ob es eins ist: If IsArray(arrTest) Then...
Oder ein Array erzwingen:
arrTest=rgArrTest2.resize(,2): Redim Preserve arrTest(1 to Ubound(arrTest), 1 to 1)
(Also erst mal 2-spaltig einlesen und dann die 2.Spalte wegwerfen, nicht sehr elegant)
Das Entfernen der Duplikate würde ich über ein Dictionary-Objekt machen.
Gruß
Rudi
Habe deine Datei mal mit OO geöffnet,...
22.02.2010 16:48:17
Luc:-?
...Andreas,
um mir die Makros anzusehen. Sofort hat OO einen VBA-Syntax-Fehler gemeldet! Du hast bei den Debug-Befehlen ein unzulässiges Semikolon verwendet! Müsste sich doch eigentl auch VBE melden!? Dann fiel mir noch auf, dass du explizit nach einem 2-dimensionalen Feld (Array) verlangst. Normalerweise ist das auch für Ranges richtig, aber nicht, wenn du wie du schreibst nur 1 (eine) Zelle in das Array lädst. Dann gibt's keine 2.Dimension → also wirst du wohl „in den sauren Apfel beißen“ müssen... ;-)
Weil ich bei meinen udF idR auch Ergebnisse aus der Berechnung von Ausdrücken als Argument zulasse (machen ja auch die meisten xlStddFktt!) und deshalb idR nicht als Range, sondern als Variant deklariere, weshalb dann auch 1dimensionale Felder (Zeilenvektoren) auftreten können, muss ich das regelmäßig abfragen. Wenn On Error Resume Next am PgmAnfang steht, ist das auch kein Hit: If IsError(Ubound(xyz, 2)) Then
Zuvor lese ich idR auch Ranges in allgemeine Feldvariable (Variants) mit 2maliger Anwendung von WorksheetFunction.Transpose. Dadurch sind Zeilenvektoren immer 1dimensional, Spaltenvektoren immer 2dimensional. Einzelne Werte gehören dabei natürlich zu Ersteren. Man kann natürlich aus Spaltenvektoren auch Zeilenvektoren machen (1x .Transpose). Alle Matrizen bleiben quasi unverändert, nur kann man danach generell mit L/UBound arbeiten und muss nicht …Cells.Count verwenden.
Gruß Luc :-?
Anzeige
AW: Habe deine Datei mal mit OO geöffnet,...
24.02.2010 12:16:09
Andreas
Hallo Luc, hi Rudi,
danke Euch auch für Eure Hinweise. Ich habe es mit der Prüfung und der Erklärung von Tino schon realisieren können. Ich habe mir den Thread aber noch einmal ausgedruckt, um in Ruhe zu überdenken, ob ich - gerade auch mit den Hinweisen von Luc - die Sache etwas cleverer lösen könnte.
Viele Grüße, Andreas
Na dann - toi-toi-toi! Gruß owT
24.02.2010 16:27:31
Luc:-?
:-?

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige