Feldzuordnung funktioniert nicht
#1
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
Top
#2
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
Top
#3
@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.
Top
#4
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.
Top
#5
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
Top
#6
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.
Top
#7
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
Top
#8
Hallo,

So:

Sub Feldauffüllung()
Dim varF
varF = Range("A1:A10").Value
End Sub
Gruß Atilla
Top
#9
@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.
Top
#10
Beitrag folgt noch...
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste