VBA – 编译错误,预期:行号或标签或语句或语句结束

我想使用Excel VBA在Outlook中设置任务提醒,所以我从这里find了这个代码: http : //www.jpsoftwaretech.com/using-excel-vba-to-set-up-task-reminders-in-外表/

Dim bWeStartedOutlook As Boolean Function AddToTasks(strDate As String, strText As String, DaysOut As Integer) As Boolean =AddToTasks(B2, M2 Time, 120) ' Adds a task reminder to Outlook Tasks a specific number of days before the date specified ' Returns TRUE if successful ' Will not trigger OMG because no protected properties are accessed ' by Jimmy Pena, http://www.jpsoftwaretech.com, 10/30/2008 ' ' Usage: ' =AddToTasks("12/31/2008", "Something to remember", 30) ' or: ' =AddToTasks(A1, A2, A3) ' where A1 contains valid date, A2 contains task information, A3 contains number of days before A1 date to trigger task reminder ' ' can also be used in VBA : 'If AddToTasks("12/31/2008", "Christmas shopping", 30) Then ' MsgBox "ok!" 'End If  Dim intDaysBack As Integer Dim dteDate As Date Dim olApp As Object ' Outlook.Application Dim objTask As Object ' Outlook.TaskItem  ' make sure all fields were filled in If (Not IsDate(strDate)) Or (strText = "") Or (DaysOut <= 0) Then   AddToTasks = False   GoTo ExitProc End If  ' We want the task reminder a certain number of days BEFORE the due date ' ex: if DaysOut = 120, then we want the due date to be -120 before the date specified ' we need to pass -120 to the NextBusinessDay function, so to go from 120 to -120, ' we subtract double the number (240) from the number provided (120). ' 120 - (120 * 2); 120 - 240 = -120  intDaysBack = DaysOut - (DaysOut * 2)  dteDate = NextBusinessDay(CDate(strDate), intDaysBack)  On Error Resume Next   Set olApp = GetOutlookApp On Error GoTo 0  If Not olApp Is Nothing Then   Set objTask = olApp.CreateItem(3) ' task item    With objTask     .StartDate = dteDate     .Subject = strText & ", due on: " & strDate     .ReminderSet = True     .Save   End With  Else   AddToTasks = False   GoTo ExitProc End If  ' if we got this far, it must have worked AddToTasks = True  ExitProc: If bWeStartedOutlook Then   olApp.Quit End If Set olApp = Nothing Set objTask = Nothing End Function  Function GetOutlookApp() As Object  On Error Resume Next   Set GetOutlookApp = GetObject(, "Outlook.Application")   If Err.Number <> 0 Then     Set GetOutlookApp = CreateObject("Outlook.Application")     bWeStartedOutlook = True   End If On Error GoTo 0  End Function Sub Test() 

我的问题是,如果我有电子表格中的所有数据,并且初始化AddToTasks就像这样:= AddToTasks(A1,A2,120)

为什么会出现这个错误?

您需要从一个单独的子Subroutine调用AddToTasks 。 (现在你正试图从内部调用它。)所以,创build一个单独的子Subroutine ,就像这样:

 Sub CallAddToTasksFunction If AddToTasks("12/31/2008", "Something to remember", 30) = True Then Debug.Print "Task Added" Else Debug.Print "Failed" End If End Sub 

AddToTasks根据成功返回TrueFalse 。 你可以看到在代码所在的函数中发生的情况:

 AddToTasks = False (or True) 

你可以看到像date不是真正的date会导致它失败。