Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
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

Neu Dimensionierung schlägt fehl

Neu Dimensionierung schlägt fehl
26.01.2017 10:35:07
Max2
Hallo Leute,
ich habe eine Tabelle "Übersicht" welche ausgewertete Daten enthält.
Nun möchte ich relevante Daten in ein Array schreiben.
Beim ersten Durchlauf klappt das Wunderbar, bei der zweiten Dimensionierung bockt er aber und ich verstehe nicht ganz warum.
Bitte hinterfragt nicht den Sinn bestimmte Daten aus "Übersicht" zu filtern, statt sie gleich an die gewollte stelle in einem anderen Blatt zu schreiben, ich habe lediglich das getan was mir aufgetragen wurde. *heul*
Da die ganze Situation die ich schildere nicht ganz klar ist, empfehle ich die Beispiel Datei anzuschauen: https://www.herber.de/bbs/user/110902.xlsm
Wer darauf allerdings keine Lust hat bekommt hier den Code:

Option Explicit
Public Function doku(ByVal c As Range, _
ByRef name As String, _
ByRef rows As Long, _
ByRef col As Long) As Boolean
Dim n As String
doku = False
n = ""
While doku = False
If Left(c.Value, 4) = "Spur" Then 'Wenn Zelle den String "Spur" hat
n = c.Value
rows = c.Row    'Benötigt für Range in Sub daten()
col = c.Column  'Benötigt für Range in Sub daten()
name = n
doku = True
End If
Exit Function   'Um Dauerschleife zu verhindern
Wend
End Function
Sub daten()
Dim ws, ws_2 As Worksheet
Dim rng, r As Range
Dim x As Long, y As Long
Dim i As Integer, j As Integer
Dim fnc As Boolean
Dim sname As String
Dim l As Long
Dim b, d, xmax
Dim arr_a(), arr_b() As Double
l = 0: xmax = 0
i = 1: j = 1: b = -1: d = -1
Set ws = ThisWorkbook.Sheets("Übersicht")
With ws
Do While xmax  "" Then 'mache solange bis Zelle in Spalte "Nr." Leer ist
If r.Offset(, 1).Value  "" Then   'Hole erst Daten wenn Zelle  _
daneben nicht leer ist
b = b + 1   'um auf Null zukommen
d = d + 1   ' ""
ReDim Preserve arr_a(xmax, b) 'Neu Dimensionierung
ReDim Preserve arr_b(xmax, d) 'Hierbei tritt Fehler auf, wenn  _
xmax > 0 ist
arr_a(xmax, b) = r.Offset(, 1).Value    'array mit Daten Füllen
arr_b(xmax, d) = Round(r.Offset(, 2).Value, 2) '""
'Debug.Print arr_a(xmax, b)
'Debug.Print arr_b(xmax, d)
End If
End If
Next r
End If
d = -1
b = -1
j = j + 9
xmax = xmax + 1
Loop
End With
End Sub
Stelle wo es Fehlschlägt ist dick markiert.
Bin mir sicher ihr könnt mir helfen.
MfG Max2

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Neu Dimensionierung schlägt fehl
26.01.2017 11:04:31
Mullit
Hallo,
das liegt daran:
http://msdn.microsoft.com/de-de/library/w8k3cys2(v=vs.120).aspx
Resizing with Preserve. If you use  _
Preserve, you can resize only the last dimension of the array.
For every other dimension, you must specify the bound of the existing array.

Gruß, Mullit
AW: Neu Dimensionierung schlägt fehl
26.01.2017 11:14:33
Max2
Ach verdammt das hab ich ganz vergessen... Danke!
Hier Lösung und Danke nochmals
26.01.2017 17:00:57
Max2

Public Function counter(ByVal c As Range, _
ByRef i As Integer) As Integer
If Left(c.Value, 4) = "Spur" Then
i = i + 1
End If
counter = counter + 1
End Function

Public Function doku(ByVal z As Range, _
ByRef name As String, _
ByRef rows As Long, _
ByRef col As Long) As Boolean
Dim n As String
doku = False
n = ""
While doku = False
If Left(z.Value, 4) = "Spur" Then
n = z.Value
rows = z.row
col = z.Column
name = n
doku = True
End If
Exit Function
Wend
End Function

Sub daten_doku()
Dim ws, ws2 As Worksheet
Dim rng, r As Range
Dim sname As String
Dim fnc As Integer
Dim fnc_2 As Boolean
Dim lzeile As Long, lspalte As Long, lzeile_2
Dim i As Integer, j As Integer
Dim x As Long, y As Long
Dim icount As Integer
Dim xmax As Integer
Dim arr_a() As Double
Dim arr_b() As Double
Dim arr_s() As String
Dim arr_z() As Long
Dim u As Long, v As Long
l = 0: xmax = 0: cc = 0: u = 5
i = 1: j = 1: b = -1: d = -1
a = -1: v = 8
Set ws = ThisWorkbook.Sheets("Übersicht")
With ws
lspalte = 10
Do Until i >= lspalte
lspalte = .Cells(1, .Columns.count).End(xlToLeft).Column
fnc = counter(.Range(.Cells(1, i), .Cells(1, i)), icount)
i = i + 9
Loop
i = 1
For xmax = 0 To (icount - 1)
fnc_2 = doku(.Range(.Cells(i, j), .Cells(i, j)), sname, x, y)
If fnc_2 = True Then
lzeile = .Cells(.rows.count, y + 1).End(xlUp).row
ReDim Preserve arr_s(icount, 0)
arr_s(xmax, 0) = sname
ReDim Preserve arr_a(icount, lzeile)
ReDim Preserve arr_b(icount, lzeile)
ReDim Preserve arr_z(icount, lzeile)
Set rng = .Range(.Cells(x + 1, y + 1), .Cells(lzeile, y + 1))
For Each r In rng
If r.Value  "" Then
If r.Offset(, 1).Value  "" Then
a = a + 1
arr_z(xmax, a) = r.Value
arr_a(xmax, a) = r.Offset(, 1).Value
arr_b(xmax, a) = Round(r.Offset(, 2).Value, 2)
End If
End If
Next r
End If
a = -1
j = j + 9
Next xmax
End With
End Sub

Anzeige
...null Problemo....
26.01.2017 17:03:54
Mullit
Ja, ja, die n-dimensionalen VBA-Arrays, ...
27.01.2017 02:44:06
Luc:-?
…Max … ;-]
Mit einem anderen Array-Typ hättest du dieses Problem erst gar nicht, müsstest ihn aber extra erzeugen. Mit einer UDF in einer ZellFml gäb's dann auch keine Abbildungs­probleme, mit einer SubProz müsstest du zum Schluss wieder in ein (1-)2-dimensionales VBA-Array wandeln.
🙈 🙉 🙊 🐵 Gruß, Luc :-?
Besser informiert mit …

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige