Vba 检查单元格中是否部分粗体

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

我正在从工作表中的文本列表生成 XML,但我不知道如何检查当前单元格中是否有粗体字。我需要做的是检查 A 列中的每个单元格,将文本读入字符串,如果我点击任何粗体单词,请在其周围添加 标签。

我知道您可以逐字符读取单元格内容,但不能读取其格式。

任何帮助将不胜感激!

excel vba formatting cell
2个回答
11
投票

您可以使用以下方法来检查单元格是否有

  1. 混合字符加粗。在这种情况下,它将返回
    NULL
  2. 所有字符均为粗体。在这种情况下,它将返回
    TRUE
  3. 没有一个字符是粗体的。在这种情况下,它将返回
    FALSE

示例

enter image description here

Sub Sample()
    Debug.Print Range("A1").Font.Bold
    Debug.Print Range("A2").Font.Bold
    Debug.Print Range("A3").Font.Bold
End Sub

enter image description here

要检查单元格是否有粗体字符,您也可以使用此函数(来自 VBA 或工作表

'~~> This is an additional function which will return...
'~~> TRUE if Cell has mixed/all chars as bold
'~~> FALSE if cell doesn't have any character in bold.
'~~> This can also be used as a worksheet function.
Function FindBoldCharacters(ByVal aCell As Range) As Boolean
    FindBoldCharacters = IsNull(aCell.Font.Bold)
    If Not FindBoldCharacters Then FindBoldCharacters = aCell.Font.Bold
End Function

截图

enter image description here enter image description here

并且您可以使用

.Characters().Font.FontStyle
检查每个字符是否为粗体。使用上面的 Range
A1
示例。

Sub Sample()
    For i = 1 To Len(Range("A1").Value)
        Debug.Print Range("A1").Characters(i, 1).Font.FontStyle
    Next i
End Sub

截图

enter image description here

修改代码

Sub Sample()
    For i = 1 To Len(Range("A1").Value)
        If Range("A1").Characters(i, 1).Font.FontStyle = "Bold" Then
            Debug.Print "The " & i & " character is in bold."
        End If
    Next i
End Sub

截图

enter image description here


0
投票

使用 https://stackoverflow.com/users/1140579/siddharth-rout 帖子进行轻微修改。 (我本来会把它放在评论中,但字符太多)。

通过以下方式在您的子系统中调用它:

strTempText = isItBold(frBook.Worksheets(arraySys(x, 1)).Range("H" & y))
If strTempText <> "XXX" Then
 Debug.Print strTempText
End If

还有功能。

Function isItBold(aCell As Range) As String
  Dim i As Integer
  Dim Sentence_Length As Integer
  Dim checkText As String

  Sentence_Length = Len(aCell)
  checkText = ""

  For i = 1 To Sentence_Length
    If aCell.Characters(i, 1).Font.Bold = True Then
      checkText = checkText & aCell.Characters(i, 1).text
    End If
  Next i
  If Len(checkText) < 1 Then
    isItBold = "XXX"
  Else
    isItBold = checkText
  End If

End Function
© www.soinside.com 2019 - 2024. All rights reserved.