Ich hab einen Codeschnipsel, mit dem ich prüfe, ob ein Array bereits dimensioniert ist oder ob es richtig dimensioniert ist. In beiden Fällen dimensioniere ich es neu und fülle es mit Daten.
Das Ganze mache ich mehrmals für verschieden Arrays.
Meine Frage ist nun, wie ich den Code evtl. vereinfachen bzw. verallgemeinern kann.
- Leider kann die Abfrage ob das Array dimensioniert ist oder ob es die richtige Größe hat nicht mit OR in der selben Zeile stehen.
- Die Redimensioniereung kann ich auch nicht außerhalb der If Anweisung schreiben, weil sonst immer befüllt wird, auch wenn das Array dimensioniert ist und die richtige Größe hat.
- In eine neue Sub auslagern hat nicht hingehauen, weil es mir nicht gelungen ist, den Blattname (hier: "fit") und die verschiedenen Spalten, wo die Daten stehen, zu übergeben...
Kann jemand mal reinsehen? Bin für Ideen dankbar...
'***** X Werte *****
If (0 / 1) + (Not Not aX) = 0 Then
ReDim aX(nSteps)
tmpX = fit.Range("A1:A" & nSteps & "").Value
For lRow = 1 To UBound(tmpX)
If Not IsEmpty(tmpX(lRow, 1)) Then aX(lRow) = tmpX(lRow, 1)
Next lRow
ElseIf UBound(aX()) nSteps Then
ReDim aX(nSteps)
tmpX = fit.Range("A1:A" & nSteps & "").Value
For lRow = 1 To UBound(tmpX)
If Not IsEmpty(tmpX(lRow, 1)) Then aX(lRow) = tmpX(lRow, 1)
Next lRow
End If
'***** Y Werte *****
If (0 / 1) + (Not Not aYObs) = 0 Then ' Abfrage fuer dimension. Array kann nicht in der selben _
Zeile stehen wegen IndexFehler, daher Code doppelt!
ReDim aYObs(nSteps)
tmpYObs = fit.Range("B1:B" & nSteps & "").Value
For lRow = 1 To UBound(tmpYObs)
If Not IsEmpty(tmpYObs(lRow, 1)) Then aYObs(lRow) = tmpYObs(lRow, 1)
Next lRow
ElseIf UBound(aYObs()) nSteps Then
ReDim aYObs(nSteps)
tmpYObs = fit.Range("B1:B" & nSteps & "").Value
For lRow = 1 To UBound(tmpYObs)
If Not IsEmpty(tmpYObs(lRow, 1)) Then aYObs(lRow) = tmpYObs(lRow, 1)
Next lRow
End If
'***** Background Werte *****
If (0 / 1) + (Not Not aBg) = 0 Then
ReDim aBg(nSteps)
tmpBG = fit.Range("J1:J" & nSteps & "").Value
For lRow = 1 To UBound(tmpBG)
If Not IsEmpty(tmpBG(lRow, 1)) Then aBg(lRow) = tmpBG(lRow, 1)
Next lRow
ElseIf UBound(aBg()) nSteps Then
ReDim aBg(nSteps)
tmpBG = fit.Range("J1:J" & nSteps & "").Value
For lRow = 1 To UBound(tmpBG)
If Not IsEmpty(tmpBG(lRow, 1)) Then aBg(lRow) = tmpBG(lRow, 1)
Next lRow
End If
Das Ganze klappt zwar sehr gut, aber es kommt mir einfach umständlich und zu lang vor. Die Redimensionierung und Befüllung steht hier für 3 Arrays ganze 6 mal...Heiko