Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1376to1380
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

Schreiben Von Arrays in die Tabelle - Verwirrung

Schreiben Von Arrays in die Tabelle - Verwirrung
03.09.2014 15:19:24
Robert
Hallo zusammen,
ich versuche grade mich den arrays ein wenig anzunähern, und stoße dabei immer wieder auf Hürden.
z.B. Beim Wiedereinfügen von Arraywerten in eine Range.
rngZiel = arrWerte

funktioniert nicht. Es gibt zwar keine Fehlermeldung, aber Werte werden auch nicht eingefügt.
rngZiel.Select
Selection = arrWerte

Funktioniert wunderbar!
Und jetzt bin ich irgendwie mit meinem Latein am Ende und die Verwirrung ist groß.
Kompletter Code:
Set rngOutputPartNo = .Range(.Cells(3, 4), .Cells(.UsedRange.SpecialCells(xlCellTypeLastCell). _
Row, 4))
arrOutputPartNo = rngOutputPartNo
For x = LBound(arrOutputPartNo) To UBound(arrOutputPartNo)
arrOutputPartNo(x, 1) = Left(arrOutputPartNo(x, 1), 12)
Next x
rngOutputPartNo = arrOutputPartNo

Es werden Teilenummern auf die ersten 12 Stellen gekürzt. Hatte den Code (vorher eine Schleife über alle Zeilen, ohne Array) als meinen ersten Umbauversuch ausgesucht.
Hoffe auf Hilfe!
viele Grüße
Robert

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schreiben Von Arrays in die Tabelle - Verwirrung
03.09.2014 15:29:15
Rudi
Hallo,
der Code ist OK.
Gruß
Rudi

AW: Schreiben Von Arrays in die Tabelle - Verwirrung
03.09.2014 15:29:44
Daniel
Hi
eines der grossen Mysterien von VBA ist, dass bei der Verwendung von Select manchmal Dinge tut und automatsich ergeänzt, die man ohne Select selber hinschreiben muss (insbesonder wer schonmal bei Grafikobjekten versucht hat, Select-frei zu arbeiten weiss was ich meine)
Grundsätzlich zu deinem Problem:
rngZiel ist ein Range-Objekt und Objekte zeichnen sich dadurch aus, dass sie nicht nur einen Wert haben sondern viele viele Eigenschaften (eine Range bespw die Zellwerte, die Formeln, die Hintergrundfarben, die Rahmenfarben, die Zahlenformate).
Wenn wir nun mit den Objekten arbeiten und nicht ganze Objekt verwenden sondern nur eine der vielen Eigenschaften, dann sollten wir VBA auch mitteilen, welche dieser Eigenschaften wir verwenden wollen und es nicht der VBA-Automatik überlassen sich eine der vielen Eigenschaften auszusuchen:
heißt konkrekt:
rngZiel.Value = arrWerte
Set rngOutputPartNo = .Range(.Cells(3, 4), .Cells(.UsedRange.SpecialCells(xlCellTypeLastCell).  _
_
Row, 4))
arrOutputPartNo = rngOutputPartNo.value
For x = LBound(arrOutputPartNo) To UBound(arrOutputPartNo)
arrOutputPartNo(x, 1) = Left(arrOutputPartNo(x, 1), 12)
Next x
rngOutputPartNo.value = arrOutputPartNo
Gruß Daniel

Anzeige
AW: Schreiben Von Arrays in die Tabelle - Verwirrung
03.09.2014 15:58:18
Rudi
Hallo,
rngZiel.Value = arrWerte
das ist in dem Fall überflüssig, da die Default-Eigenschaft des Range-Objekts .Value ist.
Schadet aber auch nicht,
Wie schon gesagt, läuft der Code bei mir auch ohne .Value.
Gruß
Rudi

AW: Schreiben Von Arrays in die Tabelle - Verwirrung
03.09.2014 20:00:37
Luschi
Hallo Rudi,
ich bin ja ein Verfechter der Vollständigkeit im Vba-Code, also auch die Eigenschaften/Methoden nennen, die von Hause aus als Standard definiert sind.
Da ich z.Z. wieder verstärkt VSTO mit C# & VB.Net mache, um Office-Addins zu erstellen, bin ich dazu auch gezwungen, da sonst der Compiler dumm tut.
Außerdem läßt sich der Vba-Code dann nach einer gewissen Zeit doch leichter nachvollziehbar kontrollieren.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Schreiben Von Arrays in die Tabelle - Verwirrung
05.09.2014 12:42:33
Robert
Hallo nochmal.
Um die Verwirrung komplett zu machen:
zielrng = arrWerte funktioniert nicht
range(zielrng.address) = arrWerte funktioniert
zielrng.value = arrWerte funktioniert
Ich nehm das jetzt einfach so hin.
Vielen Dank euch!

AW: Schreiben Von Arrays in die Tabelle - Verwirrung
05.09.2014 13:28:34
Daniel
Hi
die automatische Verwendung der Default-Eigenschaft des Objektes funktioniert nur, wenn VBA den Objektyp eindeutig erkennen kann.
Dazu muss aber der Variablen im Deklarationsteil ein eindeutiger Objekttyp zugewiesen worden sein.
Bei einer Variant-Variablen oder wenn du undeklarierte Variablen einsetzt (diese sind dann immer vom Typ Variant) funktioniert diese Objekttyperkennung nicht und die Default-Eigenschaft kann nicht eingesetzt werden.
Dh. bei Variantvariablen gibt es keine Default-Eigenschaft deswegen muss man bei ihnen immer die zu verwendende Eigenschaft angeben:
dh:
Dim zielrng as Range
zielrng = arrWerte '-> funktioniert, .value wird bei Range-Objekten automatisch ergänzt
Dim zielrng '(oder deklaration fehlt)
zielrng.Value = arrWerte '-> bei Variant-Variablen ist die Angabe der Eigenschaft erforderlich
range(zielrng.address) = arrWerte '-> funktioniert, weil über den ausdruck RANGE der Objektyp klar definiert ist und die Default-Eigenschaft eingesezt werden kann
also nicht verwirrend, sondern eingentlich ganz logisch.
Gruß Daniel

Anzeige
AW: Schreiben Von Arrays in die Tabelle - Verwirrung
05.09.2014 13:40:21
Robert
Wäre logisch, allerdings habe ich alle Ranges als eben solche deklariert. und zwar nicht in der Sub, sondern global direkt nach Option Explicit
Dim rngOutputPartNo, rngOutputVolumes, rngOutputRevEur, rngOutputRevCom, rngOutputRevDoc As Range

AW: Schreiben Von Arrays in die Tabelle - Verwirrung
05.09.2014 18:05:11
Luschi
Hallo Robert,
mit 'Dim' ist die Variable nur in dem Modul/Klassenmodul bekannt, in dem sie definiert wurde.
Noch ein altbekannter Irrtum:

Dim rngOutputPartNo, rngOutputVolumes, rngOutputRevEur, rngOutputRevCom, rngOutputRevDoc As Range
Bei dieser Definition ist NUR!!! die Variable 'rngOutputRevDoc' vom Typ 'Range' - der Rest ist 'Variant'.
Um Variablen 'GLOBAL' bekannt zu machen , muß man 'Public' statt 'Dim' benutzen.
Gruß von Luschi
ausw klein-Paris

Anzeige
AW: Schreiben Von Arrays in die Tabelle - Verwirrung
08.09.2014 09:02:39
Robert
Hallo Luschi,
Das mit dem Public vs. Dim war mir bekannt, hatte eben die Variablen am Anfang von ThisWorkbook definiert (ich versuche wenn möglich immer alles in ThisWorkbook abzuhandeln)
Die Zweite Sache allerdings, tja da hast du mich erwischt.
Ich muss also für jede Variable as Range schreiben?
Gibt es da nicht eine Möglichkeit mehrere Variablen gleichzeitig zu definieren?
Oder vllt sogar eine Funktion, die die Variablen je nach Namen automatisch definiert?
also z.B. rngZelle wird automatisch zu Range, lngZähler automatisch Long und intSpalte automatisch Integer?
Wie geht ihr vor, wenn ihr ein großes Projekt habt mit 100 Variablen oder ähnlichem?
Viele Grüße
Robert

Anzeige
AW: Schreiben Von Arrays in die Tabelle - Verwirrung
08.09.2014 10:09:57
Daniel
Hi
Ja, du musst jede Variable einzeln ihren Typ zuweisen.
Du kannst zwar in einer Zeile mehrere Variablen deklarieren, aber nach jeder muss mit AS der Typ folgen.
Was andererseits den Vorteil hat, dass du in einer Zeile unterschiedliche Typen zuweisen kannst.
Es gibt zwar die Möglichkeit mit Abkürzungen zu arbeiten:
dim DeinText$ anstelle von dim DeinText as String
Aber wenn man mit den Abkürzungen nicht Vertraut ist, macht es die Deklaration nur schwerer lesbar.
Gruß Daniel

Rudi und Luschi liegen wohl richtig, denn ...
08.09.2014 02:39:45
Luc:-?
…die Default-Eigenschaft .Value ist tatsächlich idR überflüssig, Robert!
Der eigentl Grund wird wohl eine nicht ausreichende Deklarierung der Variablen rngZiel sein, wenn gar nichts passiert. Wird nur der 1.Wert von arrWerte oder mehrere, aber nicht alle, bzw der 1. mehrfach ausgegeben, repräsentiert rngZiel nicht den vollständigen Bereich bzw die Richtung von arrWerte stimmt nicht mit der von rngZiel überein (speziell bei Vektoren, sonst ggf verdreht).
Ein weiterer Grund für die NichtFkt kann sein, dass arrWerte eine nicht-abbildbare Form hat, was mir hier aber wenig wahrscheinlich scheint, da die anderen Varianten ja fktionieren.
Gruß, Luc :-?
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige