Excel VBA将单元格附加到电子邮件正文(Outlook)时出现问题
我正在使用excel 2003,在将单元格附加到电子邮件正文时遇到问题。我得到了一些代码,但对我来说不起作用。发生在我身上的事情是,会弹出一个没有同行评审的电子表格,并显示一条错误消息“runtime error'1004'PasteSpecial method of Range class failed”。请提供协助 下面是代码(粗体代码为错误):Excel VBA将单元格附加到电子邮件正文(Outlook)时出现问题,excel,vba,outlook,Excel,Vba,Outlook,我正在使用excel 2003,在将单元格附加到电子邮件正文时遇到问题。我得到了一些代码,但对我来说不起作用。发生在我身上的事情是,会弹出一个没有同行评审的电子表格,并显示一条错误消息“runtime error'1004'PasteSpecial method of Range class failed”。请提供协助 下面是代码(粗体代码为错误): 更换含铁管线 .Cells(1).PasteSpecial Paste:=8 与 另一种可能是编写自己的代码生成html,这非常简单: P
更换含铁管线
.Cells(1).PasteSpecial Paste:=8
与
另一种可能是编写自己的代码生成html,这非常简单:
Public Sub
Dim crtRow as Integer
Dim crtCol as Integer
Dim tempBody as String
tempBody = "<table>" & vbNewline
For crtRow = 0 To maxRow
tempBody = tempBody & " <tr>" & vbNewline
For crtCol = 0 To maxCol
tempBody = tempBody & " <td>" & yourWorksheet.Cells(maxRow, maxCol).Value & "</td>" & vbNewline
Next crtCol
tempBody = tempBody & " </tr>" & vbNewline
Next crtRow
tempBody = "</table>" & vbNewline
yourEmail.HTMLBody = tempBody
End Sub
公共子系统
Dim crtRow为整数
作为整数的Dim crtCol
作为字符串的文本体
tempBody=”“&vbNewline
对于crtRow=0到maxRow
tempBody=tempBody&&vbNewline
对于crtCol=0到maxCol
tempBody=tempBody&&yoursheet.Cells(maxRow,maxCol.Value&&vbNewline
下一个crtCol
tempBody=tempBody&&vbNewline
下一个crtRow
tempBody=”“&vbNewline
yourEmail.HTMLBody=tempBody
端接头
当然,格式不是这样复制的。不过,您必须自己添加它。您的电子邮件的其余部分也需要构建
希望这有点帮助
关于关于:
s = RangetoHTML(Application.ActiveSheet.Name & "$" & "A1:E" & totalRows)
Function RangetoHTML(rng As String)
''Reference: Microsoft ActiveX Data Objects x.x Library
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
strFile = Workbooks(1).FullName
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
cn.Open strCon
rs.Open "SELECT * FROM [" & rng & "]", cn
s = "<table border=""1"" width=""100%""><tr><td>"
s = s & rs.GetString(, , "</td><td>", "</td></tr><tr><td>", " ")
s = s & "</td></tr></table>"
RangetoHTML = s
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Function
s=RangetoHTML(Application.ActiveSheet.Name&“$”和“A1:E”&totalRows)
函数RangetoHTML(rng作为字符串)
''参考:Microsoft ActiveX数据对象x.x库
Dim cn作为新的ADODB.连接
将rs设置为新ADODB.Recordset
strFile=工作簿(1).全名
strCon=“Provider=Microsoft.Jet.OLEDB.4.0;数据源=”&strFile_
&“扩展属性=”“Excel 8.0;HDR=No;IMEX=1”“
cn.开放式strCon
打开“从[”&rng&“]”中选择*,cn
s=“”
s=s&rs.GetString(,“”,“”,“”)
s=s&“
RangetoHTML=s
rs.Close
cn.Close
设置rs=无
设置cn=Nothing
端函数
请将代码缩进至少4个空格字符以突出显示。这样的话几乎看不懂。我无法编辑它…与文档相比,语法似乎有点奇怪,但由于它是一个运行时错误,我想它不仅仅是这样。但是FWIW我希望高亮显示的行看起来更像:.Cells(1).PasteSpecial Paste:=8,Operation:=xlPasteValues,SkipBlanks:=False,Transpose:=False通过添加断点逐步调试代码。您应该检查TempWB.Sheets(1)是否真的返回了一个对象。不管怎样,假设这是危险的当我尝试第一种方法时,excel给了我一个编译错误:语法错误。我不知道如何将第二种方法合并到代码中。原因是我写错了。现在它是正确的,“粘贴:=8”肯定需要删除。抱歉,Regardi尝试了新代码,但我仍然收到错误消息“runtime error'1004'PasteSpecial method of Range class failed”,并突出显示了新代码。请在失败的行上添加一个断点,然后执行。当执行停止时,在直接窗口中键入:print vartype(TempWB.Sheets(1))
并将结果转储到此处。还可以通过键入print(TempWB.Sheets(1)为Nothing)
来查找对象是否为null,并转储输出。是否在断点代码之前添加“print vartype(TempWB.Sheets(1))?
.Cells(1).PasteSpecial xlPasteColumnWidths, xlPasteSpecialOperationNone, False, False
Public Sub
Dim crtRow as Integer
Dim crtCol as Integer
Dim tempBody as String
tempBody = "<table>" & vbNewline
For crtRow = 0 To maxRow
tempBody = tempBody & " <tr>" & vbNewline
For crtCol = 0 To maxCol
tempBody = tempBody & " <td>" & yourWorksheet.Cells(maxRow, maxCol).Value & "</td>" & vbNewline
Next crtCol
tempBody = tempBody & " </tr>" & vbNewline
Next crtRow
tempBody = "</table>" & vbNewline
yourEmail.HTMLBody = tempBody
End Sub
s = RangetoHTML(Application.ActiveSheet.Name & "$" & "A1:E" & totalRows)
Function RangetoHTML(rng As String)
''Reference: Microsoft ActiveX Data Objects x.x Library
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
strFile = Workbooks(1).FullName
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
cn.Open strCon
rs.Open "SELECT * FROM [" & rng & "]", cn
s = "<table border=""1"" width=""100%""><tr><td>"
s = s & rs.GetString(, , "</td><td>", "</td></tr><tr><td>", " ")
s = s & "</td></tr></table>"
RangetoHTML = s
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Function