2016-03-06 94 views
-1

我想通过在Excel中编写代码来自动化Outlook。 Excel数据将在Outlook邮件正文中复制。但是当我试图运行代码时,我得到了编译错误,即功能或SubFunction未定义。以下是代码:获取编译错误函数或子函数未定义Excel VBA

Private Sub SendMail_Click() 


Dim Outlookbj As Object 

Dim OutlookMailItem As Object 

Dim OutlookAttachment As Object 

Dim CopyExcelData As Range 

Dim VarDate As String 

Dim VarDate1 As String 

VarDate = Date 

VarDate1 = Left(VarDate, 2) 


Set CopyExcelData = Nothing 

Set CopyExcelData = Sheets("Sheet1").Range("A1:L27").SpecialCells(xlCellTypeVisible) 

If CopyExcelData Is Nothing Then 
MsgBox "The Selection is not a range" 

End If 

With Application 
.EnableEvents = False 
.ScreenUpdating = False 
End With 

Set OutlookObj = CreateObject("Outlook.Application") 
Set OutlookMailItem = OutlookObj.CreateItem(0) 

With OutlookMailItem 
.To = "[email protected]" 
.Subject = "Satus as on " & VarDate1 & " March " 
.HTMLBody = RangetoHTML(CopyExcelData) 
.Display 


End With 

End Sub 

Private Sub SendMail_Click()以黄色突出显示。问题在于这行代码。 我也尝试了向Solver加载项添加引用。但我仍面临同样的问题。

由于事先

+2

你在项目中包含了'RangetoHTML'函数吗? –

回答

1

开始键入Option Explicit¹到声明区域在模块代码表的顶部(见脚注)。

第一个错误:Dim Outlookbj As Object应该是Dim OutlookObj As Object

二错误:RangetoHTML(... < ~~这不是一个天然的工作表或VBA函数。这是一个UDF(可能是Ron de Bruin写的)。你需要在模块代码表中看到它的代码(见下文)。

Function RangetoHTML(rng As Range) 
' Changed by Ron de Bruin 28-Oct-2006 
' Working in Office 2000-2010 
    Dim fso As Object 
    Dim ts As Object 
    Dim TempFile As String 
    Dim TempWB As Workbook 

    TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm" 

    'Copy the range and create a new workbook to past the data in 
    rng.Copy 
    Set TempWB = Workbooks.Add(1) 
    With TempWB.Sheets(1) 
     .Cells(1).PasteSpecial Paste:=8 
     .Cells(1).PasteSpecial xlPasteValues, , False, False 
     .Cells(1).PasteSpecial xlPasteFormats, , False, False 
     .Cells(1).Select 
     Application.CutCopyMode = False 
     On Error Resume Next 
     .DrawingObjects.Visible = True 
     .DrawingObjects.Delete 
     On Error GoTo 0 
    End With 

    'Publish the sheet to a htm file 
    With TempWB.PublishObjects.Add(_ 
     SourceType:=xlSourceRange, _ 
     Filename:=TempFile, _ 
     Sheet:=TempWB.Sheets(1).Name, _ 
     Source:=TempWB.Sheets(1).UsedRange.Address, _ 
     HtmlType:=xlHtmlStatic) 
     .Publish (True) 
    End With 

    'Read all data from the htm file into RangetoHTML 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2) 
    RangetoHTML = ts.ReadAll 
    ts.Close 
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _ 
          "align=left x:publishsource=") 

    'Close TempWB 
    TempWB.Close savechanges:=False 

    'Delete the htm file we used in this function 
    Kill TempFile 

    Set ts = Nothing 
    Set fso = Nothing 
    Set TempWB = Nothing 
End Function 

¹设置要求的VBE的工具中的变量声明►选项►编辑器属性页将把Option Explicit声明在每个新创建的代码页的顶端。这个 将避免像拼写错误那样的愚蠢的编码错误,并且影响你在变量 声明中使用正确的变量类型。在没有声明的情况下即时创建的变量都是变体/对象类型。使用选项明确是 被广泛认为是'最佳实践'。

相关问题