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

标签 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

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

例如,在 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

谢谢。

最佳答案

例如:

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

关于excel - 如何使用 VBA 在 Excel 中获取单元格的字体值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59776012/

相关文章:

excel - 使用 Perl 生成的 csv 文件已损坏

vba - 如何循环遍历具有拆分单元格的单词表格中的所有单元格

CustomOrder 上的 VBA 类型不匹配

excel - MsgBox 语法错误

excel - 有哪些免费的 Microsoft Excel 替代品可用于编辑 .xlsx 格式?

sql - 在 Excel 数据源 SQL 查询中使用表名而不是命名范围

excel - 通过一个动态数组公式排序聚合表

vba - Excel VBA - 两个值之间的总和

sql - 在 Access DB 中将字段拆分为多条记录

vba - 如果自动过滤器已经打开,如何使用 if 语句将其关闭,否则关闭