如何在VBA中格式化文本/字符串?

时间:2009-09-10 15:26:04

标签: vba text formatting excel-vba string-formatting

在下面的代码中,我获取一些输入参数,文本或单元格,并使用我需要的格式将它们组合成一个字符串。我需要使Task_Name变为粗体,以及像“Lead:”这样的文本。我知道你不能用变量粗体制作文字,但我该怎么做呢?我存储该值的单元格最终用于Word邮件合并。

我需要格式化字符串的一部分。在下面的代码中,我需要将Task_Name,“Lead:”等全部加粗。

Function GENERATE_STAFFING_SECTION(Task_Name, Lead_By, Members, Instructions)
    Dim tmpSection As String

    If Len(Task_Name > 0) And Len(Lead_By) > 0 And Len(Members) > 0 And Len(Instructions) > 0 Then
        tmpSection = vbLf _
                    & Task_Name _
                    & vbLf & "Lead : " & Lead_By _
                    & vbLf & "Ambassadors : " & Members _
                    & vbLf & "Instructions : " & Instructions _
                    & vbLf
    Else
        tmpSection = ""
    End If

    GENERATE_STAFFING_SECTION = tmpSection
End Function

此外,我知道这不是最干净的代码,所以如果有任何其他改进建议,我们非常欢迎。

谢谢!

1 个答案:

答案 0 :(得分:5)

您不能直接向字符串添加任何内容以使单元格具有粗体字符。

将字符串写入单元格后,您需要返回并重新处理单元格。 例如:

With ActiveCell.Characters(Start:=11, Length:=6).Font 
    .Name = "Arial" 
    .FontStyle = "Bold" 
    .Size = 10 
    .Strikethrough = False 
    .Superscript = False 
    .Subscript = False 
    .OutlineFont = False 
    .Shadow = False 
    .Underline = xlUnderlineStyleNone 
    .ColorIndex = xlAutomatic 
End With 

此代码段只会将单元格的一部分设置为粗体。

编辑:

此代码可用于实现上述内容并为您提供所需内容。 它可以写得更好,但应该让你知道你要写什么:

Public Sub FormatOuput()

    Dim i As Integer

    'Format Task_name
    i = InStr(1, ActiveCell.Text, vbLf)
    MakeBold 1, i

    'Format 'Lead'
    MakeBold i + 1, 4

    'Format 'Ambassadors'
    i = InStr(i + 1, ActiveCell.Text, vbLf)
    MakeBold i+1, 11

    'Format 'Instructions'
    i = InStr(i + 1, ActiveCell.Text, vbLf)
    MakeBold i+1, 10

End Sub

Public Sub MakeBold(startPos As Integer, charCount As Integer)
    With ActiveCell.Characters(start:=startPos, length:=charCount).Font
        .Name = "Arial"
        .FontStyle = "Bold"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
End Sub