Mit nachfolgendem Makro lege ich mir das Worksheet "Index" an und fülle die Spalte A und gegebenenfalls auch die Spalten C, E, G und I mit Werten ab.
In Spalte C wird eine Nummer abgefüllt. Diese Nummer ermittle ich wie folgt:
lngNummer = IFF(blnNumerisch, Mid(.Worksheets(lngIndex).Range("A2"), 10, 99) * 1, "")
Obschohn es sich hier um eine Longvariable handelt, erhalte ich als Ergebnis eine Zahl als Text
Weshalb ist das so und was muss ich vorkehren, dass ich eine Zahl erhalte (nicht im Textformat)?
In Spalte E erhalte ich ein Datum im Textformat. Das ist klar, da ich das Datum einem Teilstring entspricht.
Was muss ich vorkehren, damit ich in Spalte E ein Datum im Datumsformat "DD.MM.JJJJ" erhalte?
Gruss, Peter
Sub TabellenIndex()
Dim vntSheets() As String, lngIndex As Long, WkbThis As Excel.Workbook, objSh As Worksheet, _
blnNumerisch, strText As String, lngNummer As Long
Set WkbThis = ThisWorkbook
Application.DisplayAlerts = False
On Error Resume Next
WkbThis.Sheets("Index").Delete
Set objSh = WkbThis.Worksheets.Add(after:=Sheets("Daten"))
objSh.Name = "Index"
With WkbThis
''' Matrix anlegen für Anzahl Zeilen = Anzahl Worksheets und 9 Spalten
ReDim vntSheets(1 To .Worksheets.Count, 1 To 9)
''' Alle Worksheets abarbeiten
For lngIndex = 1 To .Worksheets.Count
''' Abfragen, ob es sich beim abzuarbeitenden Worksheet um eine ALUX-Tabelle _
handelt (Bezeichnung ist ab dritter Stelle numerisch)
blnNumerisch = IsNumeric(Mid(.Worksheets(lngIndex).Name, 3, 99))
''' Bei numerischen Worksheets aus Zelle A2 die XNummer auslesen
''' (muss mit 1 multipliziert werden, damit aus dem String ein numerischer Wert _
wird)
lngNummer = IFF(blnNumerisch, Mid(.Worksheets(lngIndex).Range("A2"), 10, 99) * 1, "") _
''' Bei numerischen Worksheets aus Zelle A2 die ersten 8 Zeichen (=Datumsstring) _
auslesen
strText = IFF(blnNumerisch, Left(.Worksheets(lngIndex).Range("A2"), 8), "")
'' Spalte 1 wird der Name des Worksheets übergeben
vntSheets(lngIndex, 1) = .Worksheets(lngIndex).Name
'' bei ALUX-Tabellen wird Spalte 3 die XNummer übergeben
vntSheets(lngIndex, 3) = IFF(blnNumerisch, lngNummer, "")
''' bei ALUX-Tabellen wird Spalte 5 das Datum as String übergeben
vntSheets(lngIndex, 5) = IFF(blnNumerisch, strText, "")
'' bei ALUX-Tabellen wird Spalte 7 der Fondsname übergeben
vntSheets(lngIndex, 7) = IFF(blnNumerisch, Application.WorksheetFunction.VLookup( _
lngNummer, Range("Daten2"), 5, False), "")
'' bei ALUX-Tabellen wird Spalte 9 der Klassennamen übergeben
vntSheets(lngIndex, 9) = IFF(blnNumerisch, Application.WorksheetFunction.VLookup( _
lngNummer, Range("Daten2"), 6, False), "")
'' Spalten 2, 4, 6, 8 bleiben leer - damit Worksheet "Index" besser lesbar ist
Next
End With
'' Sheets("Index").Cells.ClearContents 'nicht notwendig, da Worksheet immer neu angelegt wird
With Sheets("Index")
.Range("A:I").ClearContents
.Range("A1").Resize(UBound(vntSheets, 1), 9) = vntSheets
.Columns.Range("A:I").ColumnWidth = 1.5
'' .Rows.Range("1:2").RowHeight = 10 Zeilenhöhe anpassen entfällt
.Columns.AutoFit
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
WkbThis.Worksheets("Cockpit").Activate
End Sub