Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Excel VBA将单元格附加到电子邮件正文(Outlook)时出现问题_Excel_Vba_Outlook - Fatal编程技术网

Excel VBA将单元格附加到电子邮件正文(Outlook)时出现问题

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

我正在使用excel 2003,在将单元格附加到电子邮件正文时遇到问题。我得到了一些代码,但对我来说不起作用。发生在我身上的事情是,会弹出一个没有同行评审的电子表格,并显示一条错误消息“runtime error'1004'PasteSpecial method of Range class failed”。请提供协助

下面是代码(粗体代码为错误):




更换含铁管线

.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>", "&nbsp;")
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>", "&nbsp;")
s = s & "</td></tr></table>"

RangetoHTML = s

rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Function