Wert-Zuweisung einer Variablen in VBA

Diskutiere Wert-Zuweisung einer Variablen in VBA im Developer Network Forum im Bereich Hardware & Software Forum; Hi, Habe, um die Spalten eines Excel Datenblattes einzulesen, 'ne kleine For/Next-Schleife gemacht, welche logischerweise bei "besetzten"...
  • Wert-Zuweisung einer Variablen in VBA Beitrag #1
BioaSharky

BioaSharky

Super-Moderator
Teammitglied
Dabei seit
25.01.1999
Beiträge
18.511
Reaktionspunkte
9
Hi,

Habe, um die Spalten eines Excel Datenblattes einzulesen, 'ne kleine For/Next-Schleife gemacht, welche logischerweise bei "besetzten" Zellen wunderbar funktioniert, jedoch bei Leeren Zellen zu "Typen unverträglich" führt.

Code:
'Globale Datentypen
Public Type singlevektor
 v(1 To 100) As Single
End Type

'Globale Daten
Public Wendigkeitslauf_Vorgaben As singlevektor

Sub Vorgaben_Einlesen()
Worksheets("Punkttabelle").Activate

'Zeiten dem Wendigkeitslaufvektor zuweisen
Dim i As Integer
Dim j As Integer
 
 For i = 1 To 25
  For j = 4 To 53 Step 2
   Wendigkeitslauf_Vorgaben.v(i) = Cells(j, 4)
   i = i + 1
  Next j
 Next

 For i = 26 To 50
  For j = 4 To 53 Step 2
   Wendigkeitslauf_Vorgaben.v(i) = Cells(j, 14)
  i = i + 1
  Next j
 Next

End Sub

Wie ersichtlich wird in den Spalten 4 und 14 von Zeile 4 bis 53 eingelesen, dabei enthält aber nur jede 2. Zeile einen Wert, was sich ja aber mal ändern könnte.
Oben genannter Code ist meine unelegante Lösung, das eigentliche Problem zu umgehen und in der inneren For/Next die Sprungweite 2 (Step 2) zu wählen.
Dies ist mir zu unflexibel, denn ich möchte jede Zeile auslesen --> mein singlevektor bietet ja auch 100 Werten Platz.
Nun hab ich mal in der Hilfe gestöbert und mit dem üblichen NULL hantiert bzw. Empty, jedoch brachte keines von beidem einen Typen-Verträglichkeit mit meinem Datentyp Single, den ich brauch, da er mir bei passender Genauigkeit wunderbar als Rechengrundlage dient.

Wie kann ich nun einer Zelle, die "nicht besetzt" (leer) ist in meinem singlevektor den Wert 0 zuweisen.
Wie gesagt Versuche mit If/then Vorschaltung und Abfrage der Zellen auf Null/Empty wurde probiert.

Bitte um zahlreiche Vorschläge.

Danke
BS
 
Zuletzt bearbeitet:
  • Wert-Zuweisung einer Variablen in VBA Beitrag #2
Chrisu

Chrisu

Bekanntes Mitglied
Dabei seit
30.11.1999
Beiträge
1.364
Reaktionspunkte
0
Ort
EnterpriZe Elite
IsEmpty() Funktion probiert?. Liefert wahr oder falsch, bei wahr (Zelle ist leer) kannst du eine andere Zahl zuweisen, also zB die 0.
 
  • Wert-Zuweisung einer Variablen in VBA Beitrag #3
N

NixRealFromm

Bekanntes Mitglied
Dabei seit
24.10.2001
Beiträge
424
Reaktionspunkte
0
Ort
hmpf!!! Nordpol
v(1 To 100) As Single
haste vielleicht strings oder zeichen zwischendurch in deinen zellen? dann kanns auch nicht gehen.
ansonsten mach doch einfach ne ifabfrage davor.

obwohl die fehlermeldung eigentlich eindeutig ist: Typen unverträglich.
oder haste zu große werte, oder minus werte...


gruß, NRFi :gluck:
 
  • Wert-Zuweisung einer Variablen in VBA Beitrag #4
BioaSharky

BioaSharky

Super-Moderator
Teammitglied
Dabei seit
25.01.1999
Beiträge
18.511
Reaktionspunkte
9
Es sind keine Strings dazwischen, alle Werte passen in den Variablen-Raum des Single-Datentyps.

@Chrisu

Gibt einen Wert vom Typ Boolean zurück, der angibt, ob eine Variable initialisiert wurde.

Syntax

IsEmpty(Ausdruck)

Das erforderliche Argument Ausdruck ist ein Wert vom Typ Variant und enthält einen numerischen Ausdruck oder einen Zeichenfolgenausdruck. Da mit der IsEmpty-Funktion jedoch geprüft wird, ob einzelne Variablen initialisiert worden sind, enthält das Argument Ausdruck in der Regel nur einen einzelnen Variablennamen.

Bemerkungen

IsEmpty gibt den Wert True zurück, wenn die Variable nicht initialisiert ist oder explizit auf Empty gesetzt wurde, andernfalls wird False zurückgegeben. Die IsEmpty-Funktion gibt immer den Wert False zurück, wenn Ausdruck mehrere Variablen enthält. IsEmpty gibt nur für Variant-Werte sinnvolle Informationen zurück.

Ich verwende aber Single-Werte. Wie gesagt ist in VBA, da geht nicht so alles, was im Visual Basic vielleicht geht.
Trotzdem erstmal vielen Dank für Eure Mühe.

Ciao
BS
 
  • Wert-Zuweisung einer Variablen in VBA Beitrag #5
Chrisu

Chrisu

Bekanntes Mitglied
Dabei seit
30.11.1999
Beiträge
1.364
Reaktionspunkte
0
Ort
EnterpriZe Elite
also ich habs mal ausprobiert

1. du überprüfst mit IsEmpty(Zelle), ob die Zelle leer ist, wenn ja, wird WAHR retourniert - d.h. du darfst dann den Inhalt der Zelle nicht an den Single übergeben - wenn FALSE zurückgegeben wird, dann kannst den Wert der Zelle an den Single übergeben ...
 
  • Wert-Zuweisung einer Variablen in VBA Beitrag #6
BioaSharky

BioaSharky

Super-Moderator
Teammitglied
Dabei seit
25.01.1999
Beiträge
18.511
Reaktionspunkte
9
Danke Chrisu.

Schau Dir mal an, was ich da falsch mache.

Code:
'Zeiten dem Wendigkeitslaufvektor zuweisen
 
 For i = 1 To 50
  For j = 4 To 53
   If IsEmpty(Cells(j, 4)) = True Then
   Wendigkeitslauf_Vorgaben.v(i) = 0
   Else: Wendigkeitslauf_Vorgaben.v(i) = Cells(j, 4)
   End If
   i = i + 1
  Next j
 Next

Hab mal die Einzelschritte debuggt. In Zeile 4 (j=4) steht ein Wert und wird eingelesen, somit Wendigkeitslauf_Vorgaben.v(1) = 11,6, aber ...
die 5. Zeile ist leer und If IsEmpty(Cells(j, 4)) = True liefert aber nicht den Wert True zurück, sondern es wird weiterhin die Else-Bedingung ausgeführt, was zur Typen-Unverträglichkeit führt?????
 
  • Wert-Zuweisung einer Variablen in VBA Beitrag #7
Chrisu

Chrisu

Bekanntes Mitglied
Dabei seit
30.11.1999
Beiträge
1.364
Reaktionspunkte
0
Ort
EnterpriZe Elite
so wie ich das sehe hast du die Schleifen nicht ineinander geschachtelt sondern sie überschneiden sich ... (i = i +1 steht innerhalb der j-Schleife)

Wenn ich das Problem richtig verstanden habe, dann gibt es eine feste Beziehung zwischen i und j - nämlich -3

for j = 4 to 53
if isempty(cells(j,SPALTE)) then
VEKTOR(j-3)=0
else
VEKTOR(j-3) = cells(j, SPALTE)
end if
next j
 
  • Wert-Zuweisung einer Variablen in VBA Beitrag #8
BioaSharky

BioaSharky

Super-Moderator
Teammitglied
Dabei seit
25.01.1999
Beiträge
18.511
Reaktionspunkte
9
Hi Chrisu,

Das Problem liegt ja schon hier:

If IsEmpty(Cells(j, 4)) Then

liefert mir keinen Wert True in meiner Tabelle für eine leere Zelle
 
  • Wert-Zuweisung einer Variablen in VBA Beitrag #9
Chrisu

Chrisu

Bekanntes Mitglied
Dabei seit
30.11.1999
Beiträge
1.364
Reaktionspunkte
0
Ort
EnterpriZe Elite
ich habe jetzt mal den Code von dir im 1. Posting verwendet - der funzt bei mir (Excel 2002) einwandfrei, bei leeren Zeilen schreibt er eine 0 in den Vektor ...

ich weiß jetzt auch nicht genau was das Problem ist ... sieh mal nach ob in den Leerzellen nicht doch was drin steht ... am besten du liest dir testweise eine leere Zelle aus oder wandelst den Inhalt mit asc() um - um zu überprüfen, ob nicht doch ein Wert in der "leeren" Zelle gespeichert is ...
 
  • Wert-Zuweisung einer Variablen in VBA Beitrag #10
BioaSharky

BioaSharky

Super-Moderator
Teammitglied
Dabei seit
25.01.1999
Beiträge
18.511
Reaktionspunkte
9
F*ck, F*ck, F*ck. :be:

Recht Herzlichen Dank an Euch beide, Chrisu und NixRealFromm.
Hatte beide recht und nun geht's mit beiden Varianten, also mit IsEmpty und ganz einfach einlesen.

Ein popliges kleines Leerzeichen hatte sich in Zeile 5 eingeschlichen, welches nach manuellem Löschen keine Probleme mehr darstellt, mich aber voll aus dem Konzept warf. Nun geht alles so, wie's sollte. :)

Besten Dank
BS
 
Thema:

Wert-Zuweisung einer Variablen in VBA

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.170
Mitglieder
55.874
Neuestes Mitglied
hnte
Oben