Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换HTMLbody中的文本(从Excel VBA创建电子邮件)_Vba_Excel_Email - Fatal编程技术网

替换HTMLbody中的文本(从Excel VBA创建电子邮件)

替换HTMLbody中的文本(从Excel VBA创建电子邮件),vba,excel,email,Vba,Excel,Email,我有以下VBA代码,可以使用电子邮件模板正确创建电子邮件,但是我正在尝试使用Substitute()函数更改电子邮件正文中的一些文本。我收到一个错误,不确定如何解决这个问题,任何帮助都将是伟大的 运行时错误“1004”: 无法获取工作表函数类的替换属性 下面是试图从我的模板创建电子邮件的代码 Public Function GenerateEmail(fileName As String) Application.ScreenUpdating = False Dim OutA

我有以下VBA代码,可以使用电子邮件模板正确创建电子邮件,但是我正在尝试使用
Substitute()
函数更改电子邮件正文中的一些文本。我收到一个错误,不确定如何解决这个问题,任何帮助都将是伟大的

运行时错误“1004”:

无法获取工作表函数类的替换属性

下面是试图从我的模板创建电子邮件的代码

Public Function GenerateEmail(fileName As String)

    Application.ScreenUpdating = False

    Dim OutApp As Object
    Dim OutMail As Object

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItemFromTemplate(fileName)

    With OutMail
        .HTMLbody = WorksheetFunction.Substitute(OutMail.HTMLbody, "%TESTNUM%", "98541")
        .Attachments.Add (Application.ActiveWorkbook.FullName)
        .Display
    End With

    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With

End Function

您可以使用
Replace

.HTMLbody = Replace(OutMail.HTMLbody, "%TESTNUM%", "98541")

您可以使用
Replace

.HTMLbody = Replace(OutMail.HTMLbody, "%TESTNUM%", "98541")

Replace
是正确的方法,正如@Brax所回答的那样


对于任何想了解这个错误背后原因的人来说

为了解释为什么1004发生在替换中,您需要在使用
WorksheetFunction
时检查参数

这里的问题是Excel单元格中允许的字符数。只能将
32767
字符放入单元格中。现在,当然,您的HTMLBody中有更多的字符,因此会出现错误

Sub Test()

    Dim validString     As String
    Dim inValidString   As String

    validString = "a" & Space(32766)
    inValidString = "b" & Space(32767)


    '/ Works as the string length is valid cell length : < =32767
    MsgBox WorksheetFunction.Substitute(validString, "a", "b")

    '/ Fails as the string length is invalid in terms of cell length : >32767
    MsgBox WorksheetFunction.Substitute(inValidString, "a", "b")

End Sub
子测试()
作为字符串的Dim validString
Dim inValidString作为字符串
validString=“a”和空格(32766)
inValidString=“b”和空格(32767)
“/在字符串长度为有效单元格长度时起作用:<=32767
MsgBox工作表函数替换(有效字符串“a”、“b”)
“/失败,因为字符串长度在单元格长度方面无效:>32767
MsgBox工作表function.Substitute(无效字符串“a”、“b”)
端接头

Replace
是正确的方法,正如@Brax所回答的那样


对于任何想了解这个错误背后原因的人来说

为了解释为什么1004发生在替换中,您需要在使用
WorksheetFunction
时检查参数

这里的问题是Excel单元格中允许的字符数。只能将
32767
字符放入单元格中。现在,当然,您的HTMLBody中有更多的字符,因此会出现错误

Sub Test()

    Dim validString     As String
    Dim inValidString   As String

    validString = "a" & Space(32766)
    inValidString = "b" & Space(32767)


    '/ Works as the string length is valid cell length : < =32767
    MsgBox WorksheetFunction.Substitute(validString, "a", "b")

    '/ Fails as the string length is invalid in terms of cell length : >32767
    MsgBox WorksheetFunction.Substitute(inValidString, "a", "b")

End Sub
子测试()
作为字符串的Dim validString
Dim inValidString作为字符串
validString=“a”和空格(32766)
inValidString=“b”和空格(32767)
“/在字符串长度为有效单元格长度时起作用:<=32767
MsgBox工作表函数替换(有效字符串“a”、“b”)
“/失败,因为字符串长度在单元格长度方面无效:>32767
MsgBox工作表function.Substitute(无效字符串“a”、“b”)
端接头

我更好奇的是,为什么你会收到那个错误,但你没有足够的信息来判断。@jeped我从另一个问题和帮助我失踪的人那里得到了大部分代码。我更好奇的是,为什么你会收到那个错误,但你没有足够的信息来判断。@jeped我有从另一个问题和帮助我的人那里得到了这段代码的大部分。这段代码工作得很好,我被困在上面太久了。。。非常感谢!是否有可能将
“%TESTNUM%”
替换为一个范围(例如A3:B7)的图形?我该怎么做呢?这正是我想要的,我希望我能给出双倍的答案。我刚刚意识到创建一个图像,我想创建一个实际的图表。。。原因是当我搜索我发送的收件箱中的特定号码时,它也会出现在那里。有没有不使用图像的方法?效果很好,我被困在上面太久了。。。非常感谢!是否有可能将
“%TESTNUM%”
替换为一个范围(例如A3:B7)的图形?我该怎么做呢?这正是我想要的,我希望我能给出双倍的答案。我刚刚意识到创建一个图像,我想创建一个实际的图表。。。原因是当我搜索我发送的收件箱中的特定号码时,它也会出现在那里。有没有不使用图像的方法?很好知道!每天学习一些新的东西。哇,这是很好的信息,也感谢对错误的解释!很高兴知道!每天学习一些新的东西。哇,这是很好的信息,也感谢对错误的解释!