Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Array - Keine Zuweisung an Datenfeld möglich

Array - Keine Zuweisung an Datenfeld möglich
24.04.2009 14:59:55
eres
Einen sonnigen Gruß ins Forum,
eigentlich denke ich dass ich mein Level mit VBA bescheiden ganz gut beschreibe, obwohl die nachfolgende Frage für Euch sicher eher VBA = 0 vermuten lässt.
Folgendes Beispiel funktioniert bestens:

Sub Beispiel_1()
Dim BU(1 To 4) As Integer
BU(1) = 2000
BU(2) = 2100
BU(3) = 2200
BU(4) = 2300
MsgBox BU(1)
End Sub


Schreibe ich jedoch:


Sub Beispiel_2()
Dim BU(1 To 4) As Integer
BU = Array(2000, 2100, 2200, 2300)
MsgBox BU(1)
End Sub


erhalte ich bei der Zeile BU = Array ...
die Fehlermeldung: " Keine Zuweisung an Datenfeld möglich"
Ändere ich die Dimensionierung in Beispiel 2 auf
Dim BU() as Integer
erhalte ich bei der Zeile BU = Array ...
die Fehlermeldung: "Laufzeitfehler 13, Typen unverträglich"
Kann mir hier jemand mal die Logik erklären ?
Herzlichen Dank für jede Hilfe
Gruß
erwin

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array - Keine Zuweisung an Datenfeld möglich
24.04.2009 15:31:51
Tino
Hallo,
ich denke dies liegt daran, dass Du eine Array einer Array zuweisen möchtest und dies kommt wahrscheinlich einer ReDimensionierung gleich und dies wird verweigert.
(ist nur eine Theorie von mir)
Versuche es mal so, jetzt ist Bu noch keine Arrey sondern eine Variable vom Typ Variant.
Man sollte jetzt nur bedenken, dass der erste Eintrag bei 0 anfängt.

Sub Beispiel_2()
Dim BU
BU = Array(2000, 2100, 2200, 2300)
MsgBox BU(0)
End Sub


Gruß Tino

Anzeige
AW: Array - Keine Zuweisung an Datenfeld möglich
24.04.2009 16:30:23
eres
Hallo Tino, ja Dein Beispiel funktioniert.
Mein Wunsch war halt, wenn ich weiss, dass ich nur Integer-Werte ins Array reinschiebe, dass ich dann durch die Definition als Integer-Datenfeld weniger Speicher verbrauche als mit einem Typ Variant.
Vielen Dank für Deine Hilfe
Gruß
erwin
Anzeige
AW: Array - Keine Zuweisung an Datenfeld möglich
24.04.2009 17:33:06
Nepumuk
Hallo Erwin,

weniger Speicher verbrauche


Fädelst du Rinkernspeicher noch mit der Hand? Also wozu? Ich hab es noch nicht geschafft die 512MB auszureizen, welche Excel für VBA reserviert.
@Tino,
es ist grundsätzlich nicht möglich einem Array mit = etwas zuzuweisen. Auch wenn du völlig identische Arrays hättest. Das geht aufgrund der Struktur im Arbeitsspeicher nicht. Dazu wäre eine Funktion nötig, welche mehrere Werte im Speicher umkopiert, das kann das = Zeichen nicht, das kann nur einzelne Speicherplätze umkopieren bzw. beschreiben.
Gruß
Nepumuk

Anzeige
AW: Array - Keine Zuweisung an Datenfeld möglich
24.04.2009 17:45:22
Tino
Hallo,
ok. danke, ist auch eine Erklärung, klingt auf alle Fälle besser wie meine Theorie.
Gruß Tino
AW: Array - Keine Zuweisung an Datenfeld möglich
27.04.2009 08:03:56
eres
Hallo Nepumuk, gestattest Du mir als VBA-Lehrling eine Nachfrage ?
Du schreibst, "es ist grundsätzlich nicht möglich einem Array mit = etwas zuzuweisen."
Wenn ich nun Tino's Lösung ansehe:

Sub TinosAnsatz
Dim BU
BU = Array(2000, 2001, 2002, 2003)
MsgBox BU(0)
End Sub


heißt dies dann, dass ich der Variable BU (vom Typ Variant) ein Array zuweise, wodurch diese Variable dann erst zu einem Datenfeld ("Array") wird ?
Auf der anderen Seite, wenn ich also ein zunächst ein Array definiere
Dim BU
dann kann ich diesem Datenfeld nur jeweils einzelne Werte (z.B. über Schleife) zuweisen ?
Hab ich dies so korrekt verstanden ?
p.s.
(1) Nochmals vielen Dank für Deine Mitarbeit hier im Forum. Ich bewundere das Wissen der Experten hier und denke, auch wenn es Mini-Schritte sind, immer etwas weiterzukommen Dank Euch.
(2) Wegen meinem "Rinkernspeicher": Ich habe versucht eine sehr große csv-Datei zu bearbeiten und stoße hier auf Excel-Speicherfehler. Ich bin so vorgegangen:
Ich lese zunächst 50.000 Sätze in ein Array (mittels Schleife), lege die dann in einem Arbeitsblatt "work" ab, lösche das Array, wähle dann Daten-Text-in-Spalten und lösche alle Spalten bis auf 2 von mir benötigte Spalten. Über diese beide Spalten erstelle ich dann eine Pivot-Tabelle. Diese übersichtliche Tabelle lese ich von Zeile 1 bis zum Ende und speichere mit die hier von mir benötigten Zeilen in einem Zielblatt ab.
Danach lösche ich das Pivotblatt und das Arbeitsblatt "work" um nun die nächsten 50.000 Sätze einzulesen.
Das klappt für so 15-20 Durchläufe ganz gut und danach bewegt sich der Rechner kaum noch und meldet "zu wenig Speicher".
Ich muss mir hier wohl einen gänzlich anderen Ansatz überlegen, der jedoch nicht Access heißen darf, da dies bei uns nicht verwendet werden soll ...
Nochmals VIELEN Dank
Gruß
erwin

Anzeige
AW: Array - Keine Zuweisung an Datenfeld möglich
27.04.2009 09:34:24
Tino
Hallo,
hast Du schon versucht die .csv Datei über
Daten --> Externe Daten importieren --> Daten importieren versucht.
Dort kannst Du bestimmen welche Spalten importiert werden sollen und welche nicht.
Userbild
Gruß Tino
Anzeige
AW: Array - Keine Zuweisung an Datenfeld möglich
27.04.2009 10:27:50
eres
Hallo Tino,
ja, dies kenne ich und habe das auch brav in meinem Code umgesetzt.
Ich traue mich kaum, aber ich mach's doch mal. Anbei mein abgestrippter Ansatz als Excel-File:
https://www.herber.de/bbs/user/61436.xls
Erwarte keine Lösung von Dir oder einem der Experten. Dennoch bin ich für jeden Tipp dankbar.
Wünsche Dir / Euch einen schönen Tag.
@Tino: Habe ich Nepumuks Erklärung bezüglich der Array-Zuweisung richtig verstanden ?
Gruß
erwin
Anzeige
AW: Array - Keine Zuweisung an Datenfeld möglich
27.04.2009 11:02:11
Tino
Hallo,
hättest Du auch eine entsprechende *.csv Datei die zum Makro passt?
Gruß Tino
AW: Array - Keine Zuweisung an Datenfeld möglich
27.04.2009 11:21:16
Tino
Hallo,
mach mal überall als erste Zeile Option Explicit und gehe mal auf
Debuggen --> Kompilieren …
Ist Dein Makro wirklich schon mal gelaufen?
Gruß Tino
AW: Array - Keine Zuweisung an Datenfeld möglich
27.04.2009 12:15:15
eres
Tino, Option Explicit habe ich in meinem Original-Makro drin.
Fürs hochladen hatte ich meine Datei so weit runter abgespeckt, dass nur die relevanten Code-Teile enthalten waren. Ich versuche mal eine csv incl. Makro-Datei zur Verfügung zu stellen. Das schaffe ich aber heute nicht mehr, da noch andere Aufgaben zu erledigen sind.
Nochmals vielen Dank, bis bald
erwin
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Array-Fehler in Excel VBA: Keine Zuweisung an Datenfeld möglich


Schritt-für-Schritt-Anleitung

  1. Array-Deklaration: Beginne mit der Deklaration deines Arrays. Du kannst entweder eine feste Größe angeben oder ein dynamisches Array verwenden:

    Dim BU(1 To 4) As Integer  ' Feste Größe
    Dim BU() As Integer        ' Dynamisches Array
  2. Werte zuweisen: Bei der Zuweisung von Werten zu einem Array gibt es zwei Möglichkeiten. Entweder kannst du die einzelnen Werte manuell zuweisen oder die Array-Funktion verwenden. Achte darauf, dass du den Typ richtig definierst, um den Fehler "keine Zuweisung an Datenfeld möglich" zu vermeiden.

    ' Manuelle Zuweisung
    BU(1) = 2000
    BU(2) = 2100
    BU(3) = 2200
    BU(4) = 2300
    
    ' Mit Array-Funktion (Achtung: Typ Variant)
    Dim BU As Variant
    BU = Array(2000, 2100, 2200, 2300)
  3. Fehlerbehebung: Überprüfe, ob du die richtige Syntax verwendest und ob dein Array richtig deklariert ist. Bei der Verwendung von Array wird der Typ Variant verwendet, was in bestimmten Situationen zu Typkonflikten führen kann.


Häufige Fehler und Lösungen

  • Fehler: "Keine Zuweisung an Datenfeld möglich"
    Dieser Fehler tritt auf, wenn du versuchst, einem fest deklarierten Array mit der Array-Funktion Werte zuzuweisen. Stelle sicher, dass das Array als Variant deklariert ist, um diesen Fehler zu vermeiden.

  • Fehler: "Laufzeitfehler 13, Typen unverträglich"
    Dieser Fehler kann auftreten, wenn du versuchst, unterschiedliche Datentypen in ein Array zuzuweisen. Achte darauf, dass die Datentypen übereinstimmen.


Alternative Methoden

Eine alternative Methode zur Zuweisung von Werten an ein Array besteht darin, eine Schleife zu verwenden, um die Werte einzeln zuzuweisen. Dies ist besonders nützlich, wenn du die Werte aus einer externen Quelle wie einer CSV-Datei liest.

Dim i As Integer
Dim BU(1 To 4) As Integer
Dim values As Variant
values = Array(2000, 2100, 2200, 2300)

For i = LBound(BU) To UBound(BU)
    BU(i) = values(i)
Next i

Praktische Beispiele

  1. Beispiel 1: Manuelle Zuweisung

    Sub Beispiel_1()
       Dim BU(1 To 4) As Integer
       BU(1) = 2000
       BU(2) = 2100
       BU(3) = 2200
       BU(4) = 2300
       MsgBox BU(1)  ' Gibt 2000 aus
    End Sub
  2. Beispiel 2: Zuweisung mit Array

    Sub Beispiel_2()
       Dim BU As Variant
       BU = Array(2000, 2100, 2200, 2300)
       MsgBox BU(0)  ' Gibt 2000 aus
    End Sub

Tipps für Profis

  • Verwende immer Option Explicit am Anfang deines Codes, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler frühzeitig zu erkennen.
  • Wenn du mit großen Datenmengen arbeitest, überlege, ob es sinnvoll ist, die Daten in einem anderen Format zu verarbeiten, um den Speicherverbrauch zu optimieren.
  • Nutze Debugging-Tools in Excel VBA, um den Code Schritt für Schritt zu überprüfen und Fehlerquellen schnell zu identifizieren.

FAQ: Häufige Fragen

1. Kann ich einem Array Werte zuweisen, nachdem ich es deklariert habe?
Ja, du kannst einem Array Werte zuweisen, nachdem es deklariert wurde, solange du die richtige Syntax verwendest.

2. Was ist der Unterschied zwischen einem Variant und einem Integer-Datenfeld?
Ein Variant kann unterschiedliche Datentypen speichern, während ein Integer nur Ganzzahlen speichern kann. Die Verwendung von Variant kann in bestimmten Fällen zu einem höheren Speicherverbrauch führen.

3. Wie kann ich große Datenmengen effizient verarbeiten?
Erwäge die Verwendung von Datenbanklösungen oder speichere die Daten in temporären Dateien, um den Speicherverbrauch in Excel zu minimieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige