Ich habe an einem Makro gearbeitet, das die Daten aus mehreren Blättern in meiner Arbeitsmappe zusammenfasst. Um zu wissen, welche Spalten ich in meinem Übersichtsblatt verwenden soll, muss ich zuerst alle eindeutigen Werte aus der ersten Spalte in meinen Blättern extrahieren.Verwenden eines Arrays für eindeutige Kopie aus mehreren Blättern/VBA
Die Idee ist, dass es die Blätter durchlaufen und einen Bereich definieren wird, dann wird es durch jede Zelle im Bereich durchlaufen, prüfen, ob der Wert dieser Zelle bereits im Array ist und wenn nicht kopieren und einfügen und füge es dem Array hinzu.
Leider bekomme ich den Fehler "Index außerhalb des gültigen Bereichs" für die Zeile, die den Zellenwert zum Array hinzufügen soll.
ReDim Preserve uniqueVal(1 To UBound(uniqueVal) + 1) As Variant
Ich nahm diesen spezifischen Code aus der Frage https://superuser.com/questions/808798/excel-vba-adding-an-element-to-the-end-of-an-array.
Hier ist der gesamte Code als Referenz.
Private Sub CommandButton24_Click()
Dim xSheet As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
Dim copyRng As Range
Dim destRng As Range
Dim cRange As Range
Dim c As Range
Dim uniqueVal() As Variant
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
'Delete the summary worksheet if it exists.
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Worksheets("Summary").Delete
On Error GoTo 0
Application.DisplayAlerts = True
' Add a worksheet with the name "Summary"
Set DestSh = ActiveWorkbook.Worksheets.Add
DestSh.Name = "Summary"
Set destRng = DestSh.Range("A1")
'Define inital array values
uniqueVal = Array("Account by Type", "Total")
' Loop through all worksheets and copy the data to the
' summary worksheet.
For Each xSheet In ActiveWorkbook.Worksheets
If InStr(1, xSheet.Name, "ACCOUNT") And xSheet.Range("B1") <> "No Summary Available" Then _
Set copyRng = xSheet.Range("A:A")
For Each c In copyRng.SpecialCells(xlCellTypeVisible)
If Len(c) <> 0 And Not ISIN(c, uniqueVal) Then _
'Copy to destination Range
c.Copy destRng
'move destination Range
Set destRng = destRng.Offset(0, 1)
'change/adjust the size of array
ReDim Preserve uniqueVal(1 To UBound(uniqueVal) + 1) As Variant
'add value on the end of the array
uniqueVal(UBound(uniqueVal)) = c.Value
End If
Next c
End If
Next xSheet
ExitTheSub:
Application.Goto DestSh.Cells(1)
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Anstelle der 'ReDim Preserve uniqueVal (1 bis UBound (uniqueVal) + 1) als Variante'. Kannst du 'ReDim Preserve uniqueVal (1 bis UBound (uniqueVal) - 1) Als Variante' verwenden –
Vielen Dank für deine schnelle Hilfe. Ich änderte das + zu einem - und ich bekomme immer noch die gleiche Fehlermeldung. – ShieldData
Warum gibt es einen Unterstrich am Ende dieser Zeile 'If Len (c) <> 0 Und nicht ISIN (c, uniqueVal) Dann _'? – Variatus