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
根据成功返回True
或False
。 你可以看到在代码所在的函数中发生的情况:
AddToTasks = False (or True)
你可以看到像date不是真正的date会导致它失败。