marcoborn
Goto Top

Excel: Auflisten der verschiedenen Zellformate per VBA bzw. .NET

Hallo Forum,
in Excel kann ich verschiedenste Formatierungen auf Zellen anwenden (Hintergrund, Schriftart, Rahmen, etc.). Diese Einstellungen sind im Interior-Objekt hinterlegt.

Ich möchte gern eine Auflistung der verschiedenen Formatierungen per VBA bzw. per VB.NET erstellen, die Zahl der verwendeten Formatierungen ausgeben und ggf. auch die Formatierungen auflisten. Dazu hatte ich mir folgenden VBA-Code überlegt:

  Sub test()
    Dim zähler As Integer
    Dim Formatierung(10) As Interior
    With Application
      zähler = 0
      Formatierung(1) = .Cells(1, 1).Interior
      For i = 1 To .Worksheets(1).UsedRange.Row
        For j = 1 To .Worksheets(1).UsedRange.Column
          For k = 1 To 10
            If .Cells(i, j).Interior <> Formatierung(k) Then
              Formatierung(k + 1) = .Cells(i, j).Interior
              zähler = zähler + 1
            End If
          Next
        Next
      Next
      MsgBox (zähler)
    End With
  End Sub

Bereits beim Zuweisen des Interior-Objekts zu meiner Variable bricht das Ganze ab. Ist ein komplettes Auslesen bzw. Vergleichen des Interior-Objekts überhaupt möglich oder müsste ich alle Eigenschaften einzeln abfragen und abgleichen?

Vielen Dank im voraus,
M. Born

Content-Key: 6462882312

Url: https://administrator.de/contentid/6462882312

Printed on: April 27, 2024 at 13:04 o'clock

Mitglied: 6247018886
Solution 6247018886 Mar 22, 2023 updated at 15:00:56 (UTC)
Goto Top
Moin.
Da wirst du wohl die Eigenschaften einzeln abfragen müssen, denn das Object kannst du hier nicht vergleichen weil es bei jeder Zelle eine andere Instanz ist egal welches Format die Zelle besitzt.

Hier mal mit den meisten (nicht allen) was gescriptet, die Eigenschaften der Properties alle in Strings gewandelt:
Sub FormateAuflisten()
    Dim cell As Range, dict As Object, format As String
    Set dict = CreateObject("Scripting.Dictionary")  
    For Each cell In ActiveSheet.UsedRange
        With cell.Interior
            format = CStr(.Color) & "|" & CStr(.ColorIndex) & "|" & CStr(.Pattern) & "|" & CStr(.PatternColor) & "|" & CStr(.PatternColorIndex) & "|" & CStr(.PatternThemeColor) & "|" & CStr(.PatternTintAndShade) & "|" & CStr(.ThemeColor) & "|" & CStr(.TintAndShade)  
            If dict.Exists(format) Then
                dict.Item(format) = dict.Item(format) + 1
            Else
                dict.Add format, 1
            End If
        End With
    Next
    For Each Key In dict.Keys
        MsgBox "Format: " & Key & " ## Anzahl = " & dict.Item(Key)  
    Next
End Sub
Das vielleicht mal als Ansatz.

Cheers Briggs
Member: MarcoBorn
MarcoBorn Mar 22, 2023 at 15:34:10 (UTC)
Goto Top
Hallo Briggs,
vielen Dank für den Lösungsansatz. Das Ganze ist zwar nicht so einfach wie gedacht, aber ich kann mir Dein Beispiel gern an meine Bedürfnisse anpassen.

Viele Grüße,
M. Born