移除和#xEF»¿;从VBA中的电子邮件签名

移除和#xEF»¿;从VBA中的电子邮件签名,vba,excel,Vba,Excel,我制作了一个excel宏,根据用户数据一次发送多封电子邮件。我将.body更改为.htmlbody以允许使用粗体等。;然而,当我调用电子邮件签名时,它将ï»?置于电子邮件中实际签名之前。我发现这是由于UTF-BOM编码,然而,在这个例子中,我不能简单地更新文件的编码。我需要脚本以更新的(UTF-8)编码实际打开文件,但根本不改变文件。这是到目前为止我的代码。我遗漏了大部分代码,因为我相信唯一的更新将在“GetBoiler”函数上完成 Dim SigString As String Dim Sig

我制作了一个excel宏,根据用户数据一次发送多封电子邮件。我将.body更改为.htmlbody以允许使用粗体等。;然而,当我调用电子邮件签名时,它将ï»?置于电子邮件中实际签名之前。我发现这是由于UTF-BOM编码,然而,在这个例子中,我不能简单地更新文件的编码。我需要脚本以更新的(UTF-8)编码实际打开文件,但根本不改变文件。这是到目前为止我的代码。我遗漏了大部分代码,因为我相信唯一的更新将在“GetBoiler”函数上完成

Dim SigString As String
Dim Signature As String


SigString = Environ("appdata") & _
    "\Microsoft\Signatures\Default English - Main.htm"

If Dir(SigString) <> "" Then
    Signature = GetBoiler(SigString)
Else
    Signature = ""
End If

Function GetBoiler(ByVal sFile As String) As String
    Dim fso As Object
    Dim ts As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
    GetBoiler = ts.readall
    ts.Close
End Function
Dim SigString作为字符串
作为字符串的数字签名
SigString=Environ(“appdata”)&_
“\Microsoft\Signatures\Default English-Main.htm”
如果Dir(SigString)“,则
Signature=GetBoiler(SigString)
其他的
Signature=“”
如果结束
函数GetBoiler(ByVal sFile作为字符串)作为字符串
作为对象的Dim fso
将T作为对象
设置fso=CreateObject(“Scripting.FileSystemObject”)
设置ts=fso.GetFile(sFile).OpenAsTextStream(1,-2)
GetBoiler=ts.readall
关闭
端函数
无法读取 :

FSO只能读取ASCII文本文件。您不能使用FSO读取ASCII文本文件 Unicode文件或读取二进制文件格式,如Microsoft Word或 微软Excel

由于您使用了奇怪的字符,我想这有点不正确,文件是在8位windows代码页中读取的,因为如果它真的只能读取ASCII,您会看到

无论如何,如果您可以使用,您可以这样做:

Dim objStream, strData

Set objStream = CreateObject("ADODB.Stream")

objStream.CharSet = "utf-8"
objStream.Open
objStream.LoadFromFile("C:\Users\admin\Desktop\ArtistCG\folder.txt")

strData = objStream.ReadText()

objStream.Close
Set objStream = Nothing
()


Outlook签名
  • 罗恩·德布鲁因:
  • 堆栈溢出:

欢迎光临!请参阅“”以及如何创建(您的不是)。此外,这里还有一个来自网站顶级用户的“完美问题”。@ashleedawg我添加了所有需要的信息。。。我只需要知道如何用不同的编码打开一个文件…查看提供的链接(特别是)以查看示例中应该/不应该包含的内容,以便其他人可以重现您的问题。如果你“只需要知道如何用不同的编码打开一个文件”,这应该是问题的重点,并且只应该包括与之相关的代码。@ashleedawg你的答案没有帮助。在我的问题中,我用产生问题的代码确切地说了发生了什么。我解释了确切的问题以及我认为需要解决的问题,但在需要简单更改的情况下添加了代码。这怎么不完整呢?如果您无法提供解决方案,那么您为什么要发表评论?首先,了解您对
签名所做的操作将很有帮助。a背后的想法是人们可以很容易地重现问题。这对你来说也是一个很好的练习,因为它可以缩小问题的范围,让你根本不用发帖!