Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1524to1528
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

Laufzeitfehler 1004 bei Arraybefüllung

Laufzeitfehler 1004 bei Arraybefüllung
25.11.2016 18:07:56
MaxD.
Hallo zusammen,
ich habe folgendes Projekt. Ich möchte eine Liste generieren, die aus der Kombination von zwei Positionen (Produkte und Fälligkeiten) besteht. Jedes in der Liste vorgegebene Produkt soll hierbei genau einmal mit den in der Liste vorgegebenen Fälligkeitsterminen kombiniert werden. Es gibt also insgesamt Produktanzahl mal Fälligkeitenanzahl mögliche Kombinationsvarianten. Da die Anzahl der Produkte und Fälligkeitstermine sich immer weiter erhöhen, wird die Liste sehr lang wird, weshalb sie über den Code aktualisiert werden soll.
Zusätzlich sollen noch Attribute zu den jeweiligen Produkten mitgegeben werden, welche aber für die Kombinationen keine Rolle spielen.
In der Mappe (https://www.herber.de/bbs/user/109723.xlsm) habe ich ein Sheet (Input) für die Basisdaten und ein Sheet (PivotSource) für die Ausgabe.
Folgenden Code habe ich geschrieben und in Modul 1 abgelegt:
______________________________________________________

Sub Variantenzusammenstellung()
Dim intProdAnz As Integer
Dim intFaellAnz As Integer
Dim lngVariaAnz As Long
Dim varProdArr As Variant
Dim varFaellArr As Variant
Dim intWdhAnz As Integer
Dim intCounter As Integer
ThisWorkbook.Worksheets("Input").Range("C4:D5").Calculate 'Durchrechnen
'Datenauf-/vorbereitung
intProdAnz = ThisWorkbook.Worksheets("Input").Range("C5").Value 'Anzahl Positionen "Produkt"  _
zuweisen
intFaellAnz = ThisWorkbook.Worksheets("Input").Range("D5").Value 'Anzahl Positionen "Fä _
lligkeiten" zuweisen
lngVariaAnz = ThisWorkbook.Worksheets("Input").Range("C4").Value 'Anzahl Varianten zuweisen
varProdArr = ThisWorkbook.Worksheets("Input").Range(Cells(7, 3), Cells(7 + intProdAnz - 1, 8) _
_
_
_
_
).Value 'Produkt-Werte Array zuweisen
varFaellArr = ThisWorkbook.Worksheets("Input").Range(Cells(7, 4), Cells(7 + intFaellAnz - 1, _
_
_
_
4)) _
.Value 'Fälligkeits-Werte Array zuweisen
intCounter = 0 'intCounter auf Null setzen
'Datenausgabe
ThisWorkbook.Worksheets("PivotSource").Range(Cells(3, 2), Cells(Rows.Count, 7)).Value = "" ' _
Ausgabebereich leeren
Application.ScreenUpdating = False 'Ansichtsaktualisierung ausstellen
intWdhAnz = lngVariaAnz / intFaellAnz 'Wiederholungen "Fälligkeiten" ermitteln
Do Until intCounter = intWdhAnz 'Fälligkeiten x-mal (intWdhAnz) wiederholt in Spalte ausgeben
intCounter = intCounter + 1
ThisWorkbook.Worksheets("PivotSource").Range(Cells(3 + intFaellAnz * (intCounter - 1), 3),   _
_
_
_
_
Cells(3 + intFaellAnz * intCounter - 1, 3)) = varFaellArr
Loop
intCounter = 0 'intCounter auf Null setzen
intWdhAnz = 0 'intWdhAnz auf Null setzen
Do Until intCounter = intProdAnz 'Produkte und Produktattribute nacheinander den Fälligkeiten    _
_
_
_
_
zuordnen
intCounter = intCounter + 1
ThisWorkbook.Worksheets("PivotSource").Range(Cells(3 + intFaellAnz * (intCounter - 1), 2),   _
_
_
_
_
Cells(3 + intFaellAnz * intCounter - 1, 2)) = varProdArr(1 + intCounter - 1, 1)
ThisWorkbook.Worksheets("PivotSource").Range(Cells(3 + intFaellAnz * (intCounter - 1), 4),   _
_
_
_
_
Cells(3 + intFaellAnz * intCounter - 1, 4)) = varProdArr(1 + intCounter - 1, 3)
ThisWorkbook.Worksheets("PivotSource").Range(Cells(3 + intFaellAnz * (intCounter - 1), 5),   _
_
_
_
_
Cells(3 + intFaellAnz * intCounter - 1, 5)) = varProdArr(1 + intCounter - 1, 4)
ThisWorkbook.Worksheets("PivotSource").Range(Cells(3 + intFaellAnz * (intCounter - 1), 6),   _
_
_
_
_
Cells(3 + intFaellAnz * intCounter - 1, 6)) = varProdArr(1 + intCounter - 1, 5)
ThisWorkbook.Worksheets("PivotSource").Range(Cells(3 + intFaellAnz * (intCounter - 1), 7),   _
_
_
_
_
Cells(3 + intFaellAnz * intCounter - 1, 7)) = varProdArr(1 + intCounter - 1, 6)
Loop
ThisWorkbook.Worksheets("PivotSource").Range(Cells(2, 2), Cells(2 + lngVariaAnz, 19)).Name = "   _
_
_
_
_
Pivotdatenbasis" 'Namen für Ausgabebereich vergeben
Application.Calculate 'Durchrechnen
Application.ScreenUpdating = True 'Ansichtsaktualisierung einstellen
'Variablen zurücksetzen
intProdAnz = 0
intFaellAnz = 0
lngVariaAnz = 0
Erase varProdArr
Erase varFaellArr
intCounter = 0
'MsgBox intWdhAnz & intProdAnz & intFaellAnz & lngVariaAnz, , "Prüfung"
End Sub

______________________________________________________
Wenn ich den Code ausführen will, bleibt er bei der fettgedruckten Zeile (Datenbefüllung des 1. Arrays)hängen und wirft den Laufzeitfehler '1004' - Anwendungs- oder objektdefinierter Fehler - raus.
Ich habe bereits versucht, mir selber über diverse Foren zu helfen und bin langsam mit meinem Latein am Ende.
In meiner ursprünglichen Arbeits- und Testversion hatte ich alles (Ein- und Ausgabe, Code) in einem Tabellenblatt intergriert und es funktionierte. Erst nachdem ich Ein- und Ausgabe auf verschiedene Tabellenblätter gebracht habe und den Code in das Modul geschrieben habe, kam dieser Fehler hoch.
Was steckt dahinter? Kann mir jemand helfen?
Viele Grüße
Max

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004 bei Arraybefüllung
25.11.2016 18:50:15
Bastian
Du hast die cells nicht zugewiesen ;)
Hier So
Gruß Basti
'Datenauf-/vorbereitung
With ThisWorkbook.Worksheets("Input")
intProdAnz = .Range("C5").Value 'Anzahl Positionen "Produkt" zuweisen
intFaellAnz = .Range("D5").Value 'Anzahl Positionen "Fälligkeiten" zuweisen
lngVariaAnz = .Range("C4").Value 'Anzahl Varianten zuweisen
varProdArr = .Range(.Cells(7, 3), .Cells(7 + intProdAnz - 1, 8)).Value 'Produkt-Werte Array  _
zuweisen
varFaellArr = .Range(.Cells(7, 4), .Cells(7 + intFaellAnz - 1, 4)).Value 'Fälligkeits-Werte  _
Array zuweisen
End With

Anzeige
AW: Laufzeitfehler 1004 bei Arraybefüllung
25.11.2016 19:02:07
fcs
Hallo Max,
du hast die Referenz Cells zum zugehörigen Tabellenblatt nicht vollständig angegben.
Deshalb kommt es hier zumFehler.
Auflösen kann man dies hier am "einfachsten" indem man ein With-End With konstrukt erstellt und vor RAnge und Cells jeweils einen Punkt einfügt, der die Verbidung zum hinter With genannten Tabellenblatt herstellt.
Gruß
Franz
Sub Variantenzusammenstellung()
Dim intProdAnz As Integer
Dim intFaellAnz As Integer
Dim lngVariaAnz As Long
Dim varProdArr As Variant
Dim varFaellArr As Variant
Dim intWdhAnz As Integer
Dim intCounter As Integer
Dim wksInput As Worksheet, wksPivotSource As Worksheet
Set wksInput = ThisWorkbook.Worksheets("Input")
Set wksPivotSource = ThisWorkbook.Worksheets("PivotSource")
wksInput.Range("C4:D5").Calculate 'Durchrechnen
'Datenauf-/vorbereitung
With wksInput
intProdAnz = .Range("C5").Value 'Anzahl Positionen "Produkt" zuweisen
intFaellAnz = .Range("D5").Value 'Anzahl Positionen "Fälligkeiten" zuweisen
lngVariaAnz = .Range("C4").Value 'Anzahl Varianten zuweisen
varProdArr = .Range(.Cells(7, 3), .Cells(7 + intProdAnz - 1, 8)).Value 'Produkt-Werte Array  _
zuweisen
varFaellArr = .Range(.Cells(7, 4), .Cells(7 + intFaellAnz - 1, 4)).Value 'Fälligkeits-Werte  _
Array zuweisen
intCounter = 0 'intCounter auf Null setzen
End With
'Datenausgabe
With wksPivotSource
.Range(.Cells(3, 2), .Cells(Rows.Count, 7)).Value = "" ' _
Ausgabebereich leeren
Application.ScreenUpdating = False 'Ansichtsaktualisierung ausstellen
intWdhAnz = lngVariaAnz / intFaellAnz 'Wiederholungen "Fälligkeiten" ermitteln
Do Until intCounter = intWdhAnz 'Fälligkeiten x-mal (intWdhAnz) wiederholt in Spalte  _
ausgeben
intCounter = intCounter + 1
.Range(.Cells(3 + intFaellAnz * (intCounter - 1), 3), _
.Cells(3 + intFaellAnz * intCounter - 1, 3)) = varFaellArr
Loop
intCounter = 0 'intCounter auf Null setzen
intWdhAnz = 0 'intWdhAnz auf Null setzen
Do Until intCounter = intProdAnz 'Produkte und Produktattribute nacheinander den Fä _
lligkeiten zuordnen
intCounter = intCounter + 1
.Range(.Cells(3 + intFaellAnz * (intCounter - 1), 2), _
.Cells(3 + intFaellAnz * intCounter - 1, 2)) = varProdArr(1 + intCounter - 1, 1)
.Range(.Cells(3 + intFaellAnz * (intCounter - 1), 4), _
.Cells(3 + intFaellAnz * intCounter - 1, 4)) = varProdArr(1 + intCounter - 1, 3)
.Range(.Cells(3 + intFaellAnz * (intCounter - 1), 5), _
.Cells(3 + intFaellAnz * intCounter - 1, 5)) = varProdArr(1 + intCounter - 1, 4)
.Range(.Cells(3 + intFaellAnz * (intCounter - 1), 6), _
.Cells(3 + intFaellAnz * intCounter - 1, 6)) = varProdArr(1 + intCounter - 1, 5)
.Range(.Cells(3 + intFaellAnz * (intCounter - 1), 7), _
.Cells(3 + intFaellAnz * intCounter - 1, 7)) = varProdArr(1 + intCounter - 1, 6)
Loop
.Range(.Cells(2, 2), .Cells(2 + lngVariaAnz, 19)).Name = "Pivotdatenbasis " 'Namen für  _
Ausgabebereich vergeben"
End With
Application.Calculate 'Durchrechnen
Application.ScreenUpdating = True 'Ansichtsaktualisierung einstellen
'Variablen zurücksetzen
intProdAnz = 0
intFaellAnz = 0
lngVariaAnz = 0
Erase varProdArr
Erase varFaellArr
intCounter = 0
wksInput = Nothing
wksPivotSource = Nothing
'MsgBox intWdhAnz & intProdAnz & intFaellAnz & lngVariaAnz, , "Prüfung"
End Sub

Anzeige
AW: Laufzeitfehler 1004 bei Arraybefüllung
25.11.2016 21:27:31
MaxD.
Hallo Bastian,
Hallo Franz,
habe es mit Eurer Hilfe hinbekommen.
Ich danke Euch vielmals für die Unterstützung.
Viele Grüße
Max

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige