如何使用VBA在Excel中获取单元格的字体值列表

问题描述 投票:0回答:1

是否可以使用VBA在excel中获取单元格属性的列表?我想确定一个单元格是否为粗体,下划线,斜体等。到目前为止,我在互联网上发现的所有建议都建议我检查该值是否为真。例如,在下面的代码中,我正在验证单元格是否为粗体:

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

我宁愿不必创建条件语句或案例语句来检查所有可能性。我只希望能够用一行代码来获取属性。

例如,在Python中,我可以使用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

谢谢。

excel vba
1个回答
0
投票

例如:

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


Function FormatString(c As Range)
    Dim f, e
    With c
        For Each e In Array("Bold", "Italic", "Color", "ColorIndex", _
                            "Underline", "Superscript", "subscript")
            f = f & e & "=" & CallByName(.Font, e, VbGet) & ";"
        Next e
    End With
    FormatString = f
End Function
© www.soinside.com 2019 - 2024. All rights reserved.