AW: Benutzerdefinierte Formatierung in Excel
28.01.2020 21:07:53
Matthias
Moin!
Genau das hatte ich befürchtet - deswegen hatte ich das vorhin mal nicht angesprochen. ICh habe ein wenig recherchiert. Eine Enummeration der Werte oder Formate an sich gibt es wohl nicht. Auch keine LIste aus der man das auslesen kann. Mann könnte sich das was zusammen programmieren. Aber ganz so einfach ist das nicht. Die normalen Formate sind wohl im Excel schon integriert. Sie können deshalb auch nicht gelöscht werden. Die benutzerdefinierten Formate werden in der styles.xml der jeweiligen Datei zwischengespeichert. Die kannst du sehen, wenn du deine Datei in zip umbenennst und dann öffnest. In dem Unterordner xl liegt die Datei und dort sind auch die Formate im xml hinterlegt. Das Problem ist nun, dass man an die Daten nicht rankommt, wenn du die Datei schon offen hast. HIer mal ein schnell zusammengebastelter Code, um die Formate aus einer anderen Datei auszulesen. Pfad und Datei kann du anpassen. Damit werden dir zur Datei die Format in einem Array erstellt. Das könnte man in eine Schleife umbasteln, mit welcher du aus deinen Dateien die Formate ausliest und in einer Referenzdatei zwischenspeicherst. Beim Öffnen deiner eigenen Datei dann in dieser Datei gegebenfalls "nachschlagen" und schauen, ob es da Formate gibt.
Sub auslesen()
Dim pfad, datei
Dim nr, temp, neudat, inhalt
Dim anzahl As Long, stelle As Long
Dim myformat()
'die beiden kannst du anpassen
pfad = ThisWorkbook.Path
datei = "test.xlsx"
'das so lassen
neudat = "test.zip"
If Dir(pfad & "\" & datei) "" Then Name pfad & "\" & datei As pfad & "\" & neudat
With CreateObject("Shell.Application")
For i = 0 To .Namespace(ThisWorkbook.Path & "\test.zip").items.Count
If .Namespace(ThisWorkbook.Path & "\test.zip").items.Item(i + 1) = "xl" Then
Set neu = .Namespace(ThisWorkbook.Path & "\" & neudat).items.Item(i + 1)
For j = 0 To .Namespace(neu).items.Count - 1
If .Namespace(neu).items.Item(j).Name = "styles.xml" Then
.Namespace(ThisWorkbook.Path).CopyHere .Namespace(neu).items.Item(j)
nr = FreeFile
Open ThisWorkbook.Path & "\styles.xml" For Input As nr
inhalt = Input(LOF(nr), nr)
Close nr
Kill ThisWorkbook.Path & "\styles.xml"
Exit For
End If
Next
Exit For
End If
Next
End With
If Dir(pfad & "\" & neudat) "" Then Name pfad & "\" & neudat As pfad & "\" & datei
'jetzt auswerten
temp = Split(inhalt, "", vbTextCompare) - 1
anzahl = Trim(Replace(Left(temp, stelle), Chr(34), ""))
temp = Split(temp, "formatCode=""")
ReDim myformat(anzahl)
For stelle = 1 To anzahl
myformat(stelle) = Left(temp(stelle), InStr(1, temp(stelle), Chr(34), vbTextCompare) - 1)
Next
MsgBox "Es gibt " & anzahl & " individuelle Formate. Diese lauten." & vbCrLf & Join(myformat, _
vbCrLf)
End Sub
HAbe es getestet und läuft. Einfach mal probieren. Bei Fragen einfach melden.
VG