1

Excel VBA を使用して Outlook でタスク リマインダーを設定したいので、次のコードを見つけました: 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)

なぜそのエラーが発生するのですか?

4

1 に答える 1

1

AddToTasks別のから呼び出す必要がありますSubroutine。(今、あなたは自分自身の内部からそれを呼び出そうとしています。) したがって、次の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

AddToTasksTrueまたはそれが成功したかどうかFalseに応じて返されます。コードが次のような関数内のいくつかの場所で発生する場所を確認できます。

AddToTasks = False (or True)

実際には日付ではない日付のようなものが失敗することがわかります。

于 2013-06-16T21:26:20.070 に答える