Как получить список значений шрифта ячейки в Excel, используя VBA - PullRequest
2 голосов
/ 16 января 2020

Можно ли получить список атрибутов ячейки в Excel, используя VBA? Я хочу выяснить, выделена ли ячейка жирным шрифтом, подчеркнута курсивом и т. Д. c. Пока все предложения, которые я нашел в inte rnet, предлагают проверить, является ли значение истинным. Например, в приведенном ниже коде я проверяю, выделена ли ячейка жирным шрифтом:

Sub format_cells()
    Dim ws As Worksheet
    Set ws = Sheets("Uploads")

    rc = ws.UsedRange.Rows.Count

    For i = 2 To rc
        If ws.Cells(i, 10).Font.Bold = True Then
            Debug.Print "Pass"
        End If
    Next

End Sub

Я бы предпочел не создавать условный оператор или оператор case для проверки каждой возможности. Я предпочел бы просто получить свойства одной строкой кода.

Например, в Python я могу выполнить sh, используя библиотеку Openpyxl:

from openpyxl import load_workbook

wb = load_workbook("Book1.xlsx")
ws = wb["Uploads"]

ex = ws.cell(2,10)
print(ex.font)

Затем я получил бы следующий вывод:

<openpyxl.styles.fonts.Font object>
Parameters:
name='Calibri', charset=None, family=2.0, b=False, i=False, strike=None, outline=None, shadow=None, condense=None, color=<openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=None, auto=None, theme=1, tint=0.0, type='theme', extend=None, sz=11.0, u=None, vertAlign=None, scheme='minor'

Но, если я попытался сделать это в VBA, я получил бы «Ошибка во время выполнения» 424 «Требуется объект»

Sub test()
    Dim ws As Worksheet
    Set ws = Sheets("Uploads")

    ex = ws.Range("J3")
    Debug.Print ex.Font

End Sub

Спасибо.

1 Ответ

7 голосов
/ 16 января 2020

Например:

Debug.Print FormatString(Range("A1"))


Function FormatString(c As Range)
    Dim f, e
    With c
        For Each e In Array("Bold", "Italic", "Underline", "Color", _
                            "ColorIndex", "Superscript", "subscript")
            f = f & e & "=" & CallByName(.Font, e, VbGet) & ";"
        Next e
    End With
    FormatString = f
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...