【问题标题】:Formatting specific part of text string in VBA在 VBA 中格式化文本字符串的特定部分
【发布时间】:2015-08-31 01:23:30
【问题描述】:

我正在创建一个宏来保存当前工作簿、创建新的 Outlook 消息并将文件附加到消息中。我的宏可以做到这一点,但我无法根据自己的喜好格式化电子邮件正文中的文本。

Dim OutApp As Object
Dim OutMail As Object
Dim sBody, Customer As String

ActiveWorkbook.Save


sBody = "All," & Chr(10) & Chr(10) & "Please Approve attached Request below for " & rType & "." _
 & Chr(10) & Chr(10) & "Customer: " & customer & Chr(10)

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

On Error Resume Next
    With OutMail
        .to = recip
        .CC = CCed
        .BCC = ""
        .subject = subject
        .Body = sBody
        .Attachments.Add ActiveWorkbook.FullName
        .display

       End With
    On Error GoTo 0

End Sub  

我希望在电子邮件中显示以下消息(带有格式)。

全部,

请批准下面附加的“rtype”请求。

客户: Stackoverflow

因此,“客户”一词需要加粗。我已经厌倦了多种解决方案,但它们不起作用,因为这是在创建 Outlook 邮件对象。

任何帮助将不胜感激。

**

解决方案:要使 HTML 标记正常工作,请将正文类型更改为 html “.HTMLBody”。并且您将能够使用 HTML 标签。向迪克致敬 库斯莱卡

**

【问题讨论】:

  • 您尝试过的多种解决方案是什么?您是否尝试过插入粗体 HTML 标记(即<b>Customer</b>)?
  • 你可以从this开始。
  • 是的,我已经厌倦了 html 标签。它们不起作用。

标签: vba excel outlook format


【解决方案1】:

HTML 标签确实有效。我不知道你为什么说他们没有。

sBody = "All,<br /><br />Please Approve attached request for " & rType & ".<br /><br /><strong>Customer:</strong> " & customer & "<br />"

然后使用 .HTMLBody 代替 .Body 属性

.HTMLBody = sBody

【讨论】:

  • 这就是我所缺少的。我没有将正文类型更改为 HTML。在将正文类型更改为 HTML 后,他们工作了。谢谢你:)
【解决方案2】:

你有几个选择

1) 像一些人评论的那样使用 HTML

2)将该文本放在隐藏的工作表上并根据需要对其进行格式化,然后将其作为范围引用到正文中,例如.Body = sheet("hidden_​​Body").range("A1:B10")

3) 你们可以尝试使用类似下面的东西(请注意,下面用于将一个侧翼字符添加到字符串中,需要进行修改以适合您的目的)

Sub Build_Wingdings(Sh As Worksheet, rng As Range)

Dim cur_L As Integer
cur_L = 1
Sheets("Word_Specifications").Range("BZ9").Copy
Sh.Range(rng.Address).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

Application.CutCopyMode = False

With Sheets("Word_Specifications")
    .Select
    For Each cell In .Range(.Range("Word_Standard_Start").Address, .Range("Word_Standard_Start").End(xlDown).Address)
        If cell.value = "" Then
        Else
            L = Len(cell.value) + 1
            With Sh.Range(rng.Address)
                With .Characters(start:=cur_L, Length:=L).Font
                    .Name = "Arial"
                    .FontStyle = "Regular"
                    .Size = 9
                    .Bold = False
                    .Strikethrough = False
                    .Superscript = False
                    .Subscript = False
                    .OutlineFont = False
                    .Shadow = False
                    .Underline = xlUnderlineStyleNone
                    .ThemeColor = xlThemeColorLight1
                    .TintAndShade = 0
                    .ThemeFont = xlThemeFontNone
                End With

                cur_L = cur_L + L

                If .value <> "" Then
                    add_Wingdings cur_L, 1, Sh, rng
                    cur_L = cur_L + 2
                End If
            End With
        End If
    Next
End With


End Sub

Sub add_Wingdings(start As Integer, Length As Integer, Sh As Worksheet, rng As Range)
With Sh.Range(rng.Address).Characters(start:=start, Length:=Length).Font
    .Name = "Wingdings 3"
    .FontStyle = "Regular"
    .Size = 9
    .Bold = False
    .Strikethrough = False
    .Superscript = False
    .Subscript = False
    .OutlineFont = False
    .Shadow = False
    .Underline = xlUnderlineStyleNone
    .ThemeColor = xlThemeColorLight1
    .TintAndShade = 0
    .ThemeFont = xlThemeFontNone
End With
End Sub

【讨论】:

  • 感谢您的详细解答。 html 对我不起作用,因为我没有将我的正文定义为 html。在将我的正文定义为 html ".HTMLbody" 而不是 ".body" 之后,我能够使用所有 HTML 代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 2017-08-04
相关资源
最近更新 更多