[英]Getting Compile Error Function or Sub Function not Defined Excel VBA
我正在尝试通过在 Excel 中编写代码来自动化 Outlook。 Excel 数据将复制到 Outlook 邮件正文中。 但是当我尝试运行代码时,我收到编译错误,即未定义函数或子函数。 以下是代码:
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 = "abc@dc.com"
.Subject = "Satus as on " & VarDate1 & " March "
.HTMLBody = RangetoHTML(CopyExcelData)
.Display
End With
End Sub
Private Sub SendMail_Click() 以黄色突出显示。 问题出在这行代码上。 我也尝试过添加对求解器加载项的引用。 但我仍然面临同样的问题。
提前致谢
首先在模块代码表顶部的声明区域中键入Option Explicit
¹(参见脚注)。
第一个错误:将Dim Outlookbj As Object
Dim OutlookObj 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 的工具 ► 选项 ► 编辑器属性页面中设置Require Variable Declaration会将Option Explicit语句放在每个新创建的代码表的顶部。 这将避免诸如拼写错误之类的愚蠢编码错误以及影响您在变量声明中使用正确的变量类型。 没有声明的动态创建的变量都是变体/对象类型。 使用Option Explicit被广泛认为是“最佳实践”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.