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

Rob*_*ert 2 excel vba

是否可以使用 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
Run Code Online (Sandbox Code Playgroud)

我宁愿不必创建条件语句或 case 语句来检查每种可能性。我宁愿能够用一行代码获得属性。

例如,在 Python 中,我可以使用 Openpyxl 库完成此操作:

from openpyxl import load_workbook

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

ex = ws.cell(2,10)
print(ex.font)
Run Code Online (Sandbox Code Playgroud)

然后我会得到以下输出:

<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'
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在 VBA 中执行此操作,则会收到“需要运行时错误 '424' 对象”

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

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

End Sub
Run Code Online (Sandbox Code Playgroud)

谢谢你。

Tim*_*ams 8

例如:

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
Run Code Online (Sandbox Code Playgroud)

  • 这里巧妙地使用了`CallByName`。请注意,数组通常应使用“For...Next”循环进行迭代。不过,对于这几个元素来说,不会产生太大的影响。 (3认同)