Registriert seit: 19.02.2016
Version(en): 2010
31.03.2016, 14:34
(Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2016, 14:34 von Gladiator.)
Hallo VBA Profis,
habe über die Spalte A verteilt in einigen Zellen Werte drin stehen. Diese Werte möchte ich gern in ein Feld varZ schreiben. Leider
funktioniert der folgende Code nicht. Es kommt die Fehlermeldung Typen unverträglich. Was ist falsch an diesem Code?
Die Anzahl der Feldelemente von varZ ist doch genauso groß, wie die Anzahl der Zellen aus Spalte A, in denen ein Wert steht.
Code:
Sub Testcode()
ReDim varZ(Range("A:A").SpecialCells(xlCellTypeConstants).Count)
varZ = Range("A:A").SpecialCells(xlCellTypeConstants).Value 'Fehlermeldung: Typen unverträglich??
End Sub
Registriert seit: 06.12.2015
Version(en): 2016
Hallo,
ungeprüft:
Anstelle von redim
Varz = range(... usw wie gehabt
In der Zeile
Varz kann nicht .value sein, nur .cout wie eine Zeile darüber.
Mfg
Registriert seit: 19.02.2016
Version(en): 2010
@Fennek
Auf ReDim verzichten wird wohl nicht funktionieren, da ohne Deklaration varZ als Variable nicht definiert ist.
Aber vielleicht meinst du auch was anderes. Dann bitte poste deinen Code.
Registriert seit: 13.04.2014
Version(en): 365
Hallo,
die Fehlermeldung beruht wohl darauf, dass in Deiner Spalte A nur Zahlen stehen.
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 06.12.2015
Version(en): 2016
Hallo,
bevor ich im Nebel stochere, erkläre bitte (kurz) deine Absicht und die Datenstruktur, insbesondere, ob in Spalte A verschiedene Arten von Konstanten stehen oder auch anderes, z.b. Formeln, Wahrheitswerte.
Falls du nur 'alle' Zellen in ein Array übergeben möchtest, geht das auch direkter.
Mfg
Registriert seit: 19.02.2016
Version(en): 2010
Also es steht in irgendwelchen Zellen der Spalte A irgendetwas drin. Zahlen, Konstanten, Texte. Egal. Viele Zellen sind natürlich auch leer.
Schaut euch diesen funktionierenden Code als Analogie dazu an:
Code:
Sub Feldauffüllung()
ReDim varF(1 To 10)
varF = Range("A1:A10").Value
End Sub
Das Feld varF wird mit Werten aus dem Bereich von A1 bis A10 aufgefüllt.
Gelingt es mir nun mit den SpecialCells(xlCellTypeConstants) das Feld aufzufüllen würde ich mir ja, als grundsätzlich fauler Mensch, das Programmieren mit einer If Anweisung sparen, da ich nicht mehr überprüfen müßte, ob nun in den einzelnen Zellen etwas steht oder der nicht.
Registriert seit: 06.12.2015
Version(en): 2016
Hallo,
hier ein paar Beispiele, in Spalte A stehen nur Texte.
Code:
Sub sAr()
Dim rng as range
ar = application.transpose(range("a1:a4"))
For i = 1 to 4
Debug.print ar(i)
Next i
'Nur falls keine Leerzeilen existieren
ar2 = application.transpose(columns(1).specialcells(xlcelltypeconstants))
For i = 1 to ubound(ar2)
Debug.print ar2(i)
Next
Set rng = columns(1).specialcells(xlcelltypeconstants)
Debug.print rng.address
For each ar3 in columns(1).specialcells(xlcelltypeconstants).areas
Debug.print ar3.address
Next
End sub
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo,
So:
Sub Feldauffüllung()
Dim varF
varF = Range("A1:A10").Value
End Sub
Gruß Atilla
Registriert seit: 19.02.2016
Version(en): 2010
@Attila: Ich glaub du hast das gemacht, was ich auch oft tue: Diagonal gelesen und das Problem noch nicht erkannt.
@Fennek. Danke für den Code. Ich fasse mal zusammen:
Code:
Sub Code()
Dim rng As Range, ar3 As Variant
Set rng = Columns(1).SpecialCells(xlCellTypeConstants)
Debug.Print rng.Address
For Each ar3 In Columns(1).SpecialCells(xlCellTypeConstants).Areas
Debug.Print ar3.Address
Next
End Sub
Der Code macht genau das, worauf ich hinaus wollte. Dabei ist "Columns(1).SpecialCells(xlCellTypeConstants)" eine Objektvariable und keine Feldvariable. Deshalb wohl die
Typenunverträglichkeit. Ergo gehts wohl auch nicht mit einer einfachen Feldvariablen. Aber vielleicht hat jemand noch einen zusätzlichen Einfall.
Zunächst einmal aber nochmals Danke.
Registriert seit: 19.02.2016
Version(en): 2010
31.03.2016, 17:20
(Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2016, 17:48 von Gladiator.)
Beitrag folgt noch...