property ICalendar.RecurPartValue (Recur as String, Part as RecurPartEnum) as Variant
Returns the value of the giving part of the recur expression.

TypeDescription
Recur as String A String expression that specifies the recurrence rule according to RFC 5545. The Recur parameter must include DTSTART and FREQ rule parts, else the recurrence rule is not valid. 
Part as RecurPartEnum A RecurPartEnum expression that specifies the part of the recurrence rule to be requested
Variant A VARIANT expression that specifies the value of the recurrence part.
The RecurPartValue property returns the value of the giving part of the recur expression. Use the RecurPartValue(exRecurSyntaxError) or RecurPartValue(exRecurSyntaxErrorInfo) to specify whether the Recur parameter is valid or invalid. The RecurAll property returns all occurrences of the giving recurrence rule, as a safe array. The RecurAllAsString property returns all occurrences of the giving recurrence rule, as a string. The RecurCheck property specifies whether the date fits the giving recurrence rule. The RecurRange property returns the occurrences of the giving recurrence rule between start and end dates ( interval, range of dates ), as a safe array. The RecurRangeAsString property returns the occurrences of the giving recurrence rule between start and end dates ( interval, range of dates ), as a string. 

The BNF syntax for Recur parameter is:

recur = recur-rule-part *( ";" recur-rule-part )
	;
	; The rule parts are not ordered in any
	; particular sequence.
	;
	; The FREQ rule part is REQUIRED,
	; but MUST NOT occur more than once.
	;
	; The UNTIL or COUNT rule parts are OPTIONAL,
	; but they MUST NOT occur in the same 'recur'.
	;
	; The other rule parts are OPTIONAL,
	; but MUST NOT occur more than once.

recur-rule-part = ( "FREQ" "=" freq )
				/ ( "UNTIL" "=" enddate )
				/ ( "COUNT" "=" 1*DIGIT )
				/ ( "INTERVAL" "=" 1*DIGIT )
				/ ( "BYSECOND" "=" byseclist )
				/ ( "BYMINUTE" "=" byminlist )
				/ ( "BYHOUR" "=" byhrlist )
				/ ( "BYDAY" "=" bywdaylist )
				/ ( "BYMONTHDAY" "=" bymodaylist )
				/ ( "BYYEARDAY" "=" byyrdaylist )
				/ ( "BYWEEKNO" "=" bywknolist )
				/ ( "BYMONTH" "=" bymolist )
				/ ( "BYSETPOS" "=" bysplist )
				/ ( "WKST" "=" weekday )

freq        = "SECONDLY" / "MINUTELY" / "HOURLY" / "DAILY"
			/ "WEEKLY" / "MONTHLY" / "YEARLY"
enddate     = date / date-time
byseclist   = ( seconds *("," seconds) )
seconds     = 1*2DIGIT       ;0 to 60
byminlist   = ( minutes *("," minutes) )
minutes     = 1*2DIGIT       ;0 to 59
byhrlist    = ( hour *("," hour) )
hour        = 1*2DIGIT       ;0 to 23
bywdaylist  = ( weekdaynum *("," weekdaynum) )
weekdaynum  = [[plus / minus] ordwk] weekday
plus        = "+"
minus       = "-"
ordwk       = 1*2DIGIT       ;1 to 53
weekday     = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA" ;Corresponding to SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, and SATURDAY days of the week.
bymodaylist = ( monthdaynum *("," monthdaynum) )
monthdaynum = [plus / minus] ordmoday
ordmoday    = 1*2DIGIT       ;1 to 31
byyrdaylist = ( yeardaynum *("," yeardaynum) )
yeardaynum  = [plus / minus] ordyrday
ordyrday    = 1*3DIGIT      ;1 to 366
bywknolist  = ( weeknum *("," weeknum) )
weeknum     = [plus / minus] ordwk
bymolist    = ( monthnum *("," monthnum) )
monthnum    = 1*2DIGIT       ;1 to 12
bysplist    = ( setposday *("," setposday) )
setposday   = yeardaynum

The following samples show how you can check if the recurrence expression is syntactically correct:

VBA (MS Access, Excell...)

Set ICalendar1 = CreateObject("Exontrol.ICalendar.1")
With ICalendar1
	Debug.Print( "1.A) SyntaxError: " )
	Debug.Print( .RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-1) )
	Debug.Print( "1.B) SyntaxErrorInfo: " )
	Debug.Print( .RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-2) )
	Debug.Print( "2.A) SyntaxError: " )
	Debug.Print( .RecurPartValue("FREQ=DAILY;BYDAY=MO",-1) )
	Debug.Print( "2.B) SyntaxErrorInfo: " )
	Debug.Print( .RecurPartValue("FREQ=DAILY;BYDAY=MO",-2) )
End With

VB6

Set ICalendar1 = CreateObject("Exontrol.ICalendar.1")
With ICalendar1
	Debug.Print( "1.A) SyntaxError: " )
	Debug.Print( .RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",exRecurSyntaxError) )
	Debug.Print( "1.B) SyntaxErrorInfo: " )
	Debug.Print( .RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",exRecurSyntaxErrorInfo) )
	Debug.Print( "2.A) SyntaxError: " )
	Debug.Print( .RecurPartValue("FREQ=DAILY;BYDAY=MO",exRecurSyntaxError) )
	Debug.Print( "2.B) SyntaxErrorInfo: " )
	Debug.Print( .RecurPartValue("FREQ=DAILY;BYDAY=MO",exRecurSyntaxErrorInfo) )
End With

VB.NET

' Add 'exontrol.exicalendar.dll(ExICalendar.dll)' reference to your project.
Exicalendar1 = New exontrol.EXICALENDARLib.exicalendar()
With Exicalendar1
	Debug.Print( "1.A) SyntaxError: " )
	Debug.Print( .get_RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",exontrol.EXICALENDARLib.RecurPartEnum.exRecurSyntaxError) )
	Debug.Print( "1.B) SyntaxErrorInfo: " )
	Debug.Print( .get_RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",exontrol.EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo) )
	Debug.Print( "2.A) SyntaxError: " )
	Debug.Print( .get_RecurPartValue("FREQ=DAILY;BYDAY=MO",exontrol.EXICALENDARLib.RecurPartEnum.exRecurSyntaxError) )
	Debug.Print( "2.B) SyntaxErrorInfo: " )
	Debug.Print( .get_RecurPartValue("FREQ=DAILY;BYDAY=MO",exontrol.EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo) )
End With

VB.NET for /COM

AxICalendar1 = CreateObject("Exontrol.ICalendar.1")
With AxICalendar1
	Debug.Print( "1.A) SyntaxError: " )
	Debug.Print( .get_RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",EXICALENDARLib.RecurPartEnum.exRecurSyntaxError) )
	Debug.Print( "1.B) SyntaxErrorInfo: " )
	Debug.Print( .get_RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo) )
	Debug.Print( "2.A) SyntaxError: " )
	Debug.Print( .get_RecurPartValue("FREQ=DAILY;BYDAY=MO",EXICALENDARLib.RecurPartEnum.exRecurSyntaxError) )
	Debug.Print( "2.B) SyntaxErrorInfo: " )
	Debug.Print( .get_RecurPartValue("FREQ=DAILY;BYDAY=MO",EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo) )
End With

C++

/*
	Includes the definition for CreateObject function like follows:

	#include <comdef.h>
	IUnknownPtr CreateObject( BSTR Object )
	{
		IUnknownPtr spResult;
		spResult.CreateInstance( Object );
		return spResult;
	};

*/
/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXICALENDARLib' for the library: 'ICalendar 1.0 Type Library'

	#import <ExICalendar.dll>
	using namespace EXICALENDARLib;
*/
EXICALENDARLib::IICalendarPtr spICalendar1 = ::CreateObject(L"Exontrol.ICalendar.1");
OutputDebugStringW( L"1.A) SyntaxError: " );
OutputDebugStringW( _bstr_t(spICalendar1->GetRecurPartValue(L"DTSTART=20151205;FREQ=DAILY;BYDAY=MO",EXICALENDARLib::exRecurSyntaxError)) );
OutputDebugStringW( L"1.B) SyntaxErrorInfo: " );
OutputDebugStringW( _bstr_t(spICalendar1->GetRecurPartValue(L"DTSTART=20151205;FREQ=DAILY;BYDAY=MO",EXICALENDARLib::exRecurSyntaxErrorInfo)) );
OutputDebugStringW( L"2.A) SyntaxError: " );
OutputDebugStringW( _bstr_t(spICalendar1->GetRecurPartValue(L"FREQ=DAILY;BYDAY=MO",EXICALENDARLib::exRecurSyntaxError)) );
OutputDebugStringW( L"2.B) SyntaxErrorInfo: " );
OutputDebugStringW( _bstr_t(spICalendar1->GetRecurPartValue(L"FREQ=DAILY;BYDAY=MO",EXICALENDARLib::exRecurSyntaxErrorInfo)) );

C++ Builder

Exicalendarlib_tlb::IICalendarPtr ICalendar1 = Variant::CreateObject(L"Exontrol.ICalendar.1");
OutputDebugString( L"1.A) SyntaxError: " );
OutputDebugString( PChar(ICalendar1->RecurPartValue[L"DTSTART=20151205;FREQ=DAILY;BYDAY=MO",Exicalendarlib_tlb::RecurPartEnum::exRecurSyntaxError]) );
OutputDebugString( L"1.B) SyntaxErrorInfo: " );
OutputDebugString( PChar(ICalendar1->RecurPartValue[L"DTSTART=20151205;FREQ=DAILY;BYDAY=MO",Exicalendarlib_tlb::RecurPartEnum::exRecurSyntaxErrorInfo]) );
OutputDebugString( L"2.A) SyntaxError: " );
OutputDebugString( PChar(ICalendar1->RecurPartValue[L"FREQ=DAILY;BYDAY=MO",Exicalendarlib_tlb::RecurPartEnum::exRecurSyntaxError]) );
OutputDebugString( L"2.B) SyntaxErrorInfo: " );
OutputDebugString( PChar(ICalendar1->RecurPartValue[L"FREQ=DAILY;BYDAY=MO",Exicalendarlib_tlb::RecurPartEnum::exRecurSyntaxErrorInfo]) );

C#

// Add 'exontrol.exicalendar.dll(ExICalendar.dll)' reference to your project.
exontrol.EXICALENDARLib.exicalendar exicalendar1 = new exontrol.EXICALENDARLib.exicalendar();
System.Diagnostics.Debug.Print( "1.A) SyntaxError: " );
System.Diagnostics.Debug.Print( exicalendar1.get_RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",exontrol.EXICALENDARLib.RecurPartEnum.exRecurSyntaxError).ToString() );
System.Diagnostics.Debug.Print( "1.B) SyntaxErrorInfo: " );
System.Diagnostics.Debug.Print( exicalendar1.get_RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",exontrol.EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo).ToString() );
System.Diagnostics.Debug.Print( "2.A) SyntaxError: " );
System.Diagnostics.Debug.Print( exicalendar1.get_RecurPartValue("FREQ=DAILY;BYDAY=MO",exontrol.EXICALENDARLib.RecurPartEnum.exRecurSyntaxError).ToString() );
System.Diagnostics.Debug.Print( "2.B) SyntaxErrorInfo: " );
System.Diagnostics.Debug.Print( exicalendar1.get_RecurPartValue("FREQ=DAILY;BYDAY=MO",exontrol.EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo).ToString() );

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:D6C87100-38E2-4ABB-8AC2-4C0097AEE2D6" id="ICalendar1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
	alert( "1.A) SyntaxError: " );
	alert( ICalendar1.RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-1) );
	alert( "1.B) SyntaxErrorInfo: " );
	alert( ICalendar1.RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-2) );
	alert( "2.A) SyntaxError: " );
	alert( ICalendar1.RecurPartValue("FREQ=DAILY;BYDAY=MO",-1) );
	alert( "2.B) SyntaxErrorInfo: " );
	alert( ICalendar1.RecurPartValue("FREQ=DAILY;BYDAY=MO",-2) );
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:D6C87100-38E2-4ABB-8AC2-4C0097AEE2D6" id="ICalendar1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
	With ICalendar1
		alert( "1.A) SyntaxError: " )
		alert( .RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-1) )
		alert( "1.B) SyntaxErrorInfo: " )
		alert( .RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-2) )
		alert( "2.A) SyntaxError: " )
		alert( .RecurPartValue("FREQ=DAILY;BYDAY=MO",-1) )
		alert( "2.B) SyntaxErrorInfo: " )
		alert( .RecurPartValue("FREQ=DAILY;BYDAY=MO",-2) )
	End With
End Function
</SCRIPT>
</BODY>

C# for /COM

EXICALENDARLib.ICalendar axICalendar1 = new EXICALENDARLib.ICalendar();
System.Diagnostics.Debug.Print( "1.A) SyntaxError: " );
System.Diagnostics.Debug.Print( axICalendar1.get_RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",EXICALENDARLib.RecurPartEnum.exRecurSyntaxError).ToString() );
System.Diagnostics.Debug.Print( "1.B) SyntaxErrorInfo: " );
System.Diagnostics.Debug.Print( axICalendar1.get_RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo).ToString() );
System.Diagnostics.Debug.Print( "2.A) SyntaxError: " );
System.Diagnostics.Debug.Print( axICalendar1.get_RecurPartValue("FREQ=DAILY;BYDAY=MO",EXICALENDARLib.RecurPartEnum.exRecurSyntaxError).ToString() );
System.Diagnostics.Debug.Print( "2.B) SyntaxErrorInfo: " );
System.Diagnostics.Debug.Print( axICalendar1.get_RecurPartValue("FREQ=DAILY;BYDAY=MO",EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo).ToString() );

X++ (Dynamics Ax 2009)

public void init()
{
	COM com_exicalendar1;
	anytype exicalendar1;
	;

	super();

	// Add 'exicalendar.dll(ExICalendar.dll)' reference to your project.
	exicalendar1 = COM::createFromObject(new EXICALENDARLib.exicalendar()); com_exicalendar1 = exicalendar1;
	print( "1.A) SyntaxError: " );
	print( com_exicalendar1.RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-1/*exRecurSyntaxError*/) );
	print( "1.B) SyntaxErrorInfo: " );
	print( com_exicalendar1.RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-2/*exRecurSyntaxErrorInfo*/) );
	print( "2.A) SyntaxError: " );
	print( com_exicalendar1.RecurPartValue("FREQ=DAILY;BYDAY=MO",-1/*exRecurSyntaxError*/) );
	print( "2.B) SyntaxErrorInfo: " );
	print( com_exicalendar1.RecurPartValue("FREQ=DAILY;BYDAY=MO",-2/*exRecurSyntaxErrorInfo*/) );
}

Delphi 8 (.NET only)

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( '1.A) SyntaxError: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=20151205;FREQ=DAILY;BYDAY=MO',EXICALENDARLib.RecurPartEnum.exRecurSyntaxError) );
	OutputDebugString( '1.B) SyntaxErrorInfo: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=20151205;FREQ=DAILY;BYDAY=MO',EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo) );
	OutputDebugString( '2.A) SyntaxError: ' );
	OutputDebugString( get_RecurPartValue('FREQ=DAILY;BYDAY=MO',EXICALENDARLib.RecurPartEnum.exRecurSyntaxError) );
	OutputDebugString( '2.B) SyntaxErrorInfo: ' );
	OutputDebugString( get_RecurPartValue('FREQ=DAILY;BYDAY=MO',EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo) );
end

Delphi (standard)

ICalendar1 := (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1'))) as EXICALENDARLib_TLB.ICalendar);
with ICalendar1 do
begin
	OutputDebugString( '1.A) SyntaxError: ' );
	OutputDebugString( RecurPartValue['DTSTART=20151205;FREQ=DAILY;BYDAY=MO',EXICALENDARLib_TLB.exRecurSyntaxError] );
	OutputDebugString( '1.B) SyntaxErrorInfo: ' );
	OutputDebugString( RecurPartValue['DTSTART=20151205;FREQ=DAILY;BYDAY=MO',EXICALENDARLib_TLB.exRecurSyntaxErrorInfo] );
	OutputDebugString( '2.A) SyntaxError: ' );
	OutputDebugString( RecurPartValue['FREQ=DAILY;BYDAY=MO',EXICALENDARLib_TLB.exRecurSyntaxError] );
	OutputDebugString( '2.B) SyntaxErrorInfo: ' );
	OutputDebugString( RecurPartValue['FREQ=DAILY;BYDAY=MO',EXICALENDARLib_TLB.exRecurSyntaxErrorInfo] );
end

VFP

thisform.ICalendar1 = CreateObject("Exontrol.ICalendar.1")
with thisform.ICalendar1
	DEBUGOUT( "1.A) SyntaxError: " )
	DEBUGOUT( .RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-1) )
	DEBUGOUT( "1.B) SyntaxErrorInfo: " )
	DEBUGOUT( .RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-2) )
	DEBUGOUT( "2.A) SyntaxError: " )
	DEBUGOUT( .RecurPartValue("FREQ=DAILY;BYDAY=MO",-1) )
	DEBUGOUT( "2.B) SyntaxErrorInfo: " )
	DEBUGOUT( .RecurPartValue("FREQ=DAILY;BYDAY=MO",-2) )
endwith

dBASE Plus

local oICalendar

oICalendar = new OleAutoClient("Exontrol.ICalendar.1")

? "1.A) SyntaxError: " 
? Str(oICalendar.RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-1)) 
? "1.B) SyntaxErrorInfo: " 
? Str(oICalendar.RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-2)) 
? "2.A) SyntaxError: " 
? Str(oICalendar.RecurPartValue("FREQ=DAILY;BYDAY=MO",-1)) 
? "2.B) SyntaxErrorInfo: " 
? Str(oICalendar.RecurPartValue("FREQ=DAILY;BYDAY=MO",-2)) 

XBasic (Alpha Five)

Dim oICalendar as P

oICalendar = OLE.Create("Exontrol.ICalendar.1")

? "1.A) SyntaxError: " 
? oICalendar.RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-1) 
? "1.B) SyntaxErrorInfo: " 
? oICalendar.RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-2) 
? "2.A) SyntaxError: " 
? oICalendar.RecurPartValue("FREQ=DAILY;BYDAY=MO",-1) 
? "2.B) SyntaxErrorInfo: " 
? oICalendar.RecurPartValue("FREQ=DAILY;BYDAY=MO",-2) 

Visual Objects


oDCOCX_Exontrol1 := IICalendar{"Exontrol.ICalendar.1"}
OutputDebugString(String2Psz( "1.A) SyntaxError: " ))
OutputDebugString(String2Psz( AsString(oDCOCX_Exontrol1:[RecurPartValue,"DTSTART=20151205;FREQ=DAILY;BYDAY=MO",exRecurSyntaxError]) ))
OutputDebugString(String2Psz( "1.B) SyntaxErrorInfo: " ))
OutputDebugString(String2Psz( AsString(oDCOCX_Exontrol1:[RecurPartValue,"DTSTART=20151205;FREQ=DAILY;BYDAY=MO",exRecurSyntaxErrorInfo]) ))
OutputDebugString(String2Psz( "2.A) SyntaxError: " ))
OutputDebugString(String2Psz( AsString(oDCOCX_Exontrol1:[RecurPartValue,"FREQ=DAILY;BYDAY=MO",exRecurSyntaxError]) ))
OutputDebugString(String2Psz( "2.B) SyntaxErrorInfo: " ))
OutputDebugString(String2Psz( AsString(oDCOCX_Exontrol1:[RecurPartValue,"FREQ=DAILY;BYDAY=MO",exRecurSyntaxErrorInfo]) ))

PowerBuilder

OleObject oICalendar

oICalendar = CREATE OLEObject
oICalendar.ConnectToNewObject("Exontrol.ICalendar.1")

MessageBox("Information",string( "1.A) SyntaxError: " ))
MessageBox("Information",string( String(oICalendar.RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-1)) ))
MessageBox("Information",string( "1.B) SyntaxErrorInfo: " ))
MessageBox("Information",string( String(oICalendar.RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-2)) ))
MessageBox("Information",string( "2.A) SyntaxError: " ))
MessageBox("Information",string( String(oICalendar.RecurPartValue("FREQ=DAILY;BYDAY=MO",-1)) ))
MessageBox("Information",string( "2.B) SyntaxErrorInfo: " ))
MessageBox("Information",string( String(oICalendar.RecurPartValue("FREQ=DAILY;BYDAY=MO",-2)) ))

Visual DataFlex

Procedure OnCreate
	Forward Send OnCreate
	Variant oComICalendar1
	Get ComCreateObject "Exontrol.ICalendar.1" to oComICalendar1

	Showln "1.A) SyntaxError: " (ComRecurPartValue(Self,"DTSTART=20151205;FREQ=DAILY;BYDAY=MO",OLEexRecurSyntaxError))
	Showln "1.B) SyntaxErrorInfo: " (ComRecurPartValue(Self,"DTSTART=20151205;FREQ=DAILY;BYDAY=MO",OLEexRecurSyntaxErrorInfo))
	Showln "2.A) SyntaxError: " (ComRecurPartValue(Self,"FREQ=DAILY;BYDAY=MO",OLEexRecurSyntaxError))
	Showln "2.B) SyntaxErrorInfo: " (ComRecurPartValue(Self,"FREQ=DAILY;BYDAY=MO",OLEexRecurSyntaxErrorInfo))
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oICalendar

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oICalendar := XbpActiveXControl():new( oForm:drawingArea )
	oICalendar:CLSID  := "Exontrol.ICalendar.1" /*{D6C87100-38E2-4ABB-8AC2-4C0097AEE2D6}*/
	oICalendar:create(,, {10,60},{610,370} )

		DevOut( "1.A) SyntaxError: " )
		DevOut( Transform(oICalendar:RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-1/*exRecurSyntaxError*/),"") )
		DevOut( "1.B) SyntaxErrorInfo: " )
		DevOut( Transform(oICalendar:RecurPartValue("DTSTART=20151205;FREQ=DAILY;BYDAY=MO",-2/*exRecurSyntaxErrorInfo*/),"") )
		DevOut( "2.A) SyntaxError: " )
		DevOut( Transform(oICalendar:RecurPartValue("FREQ=DAILY;BYDAY=MO",-1/*exRecurSyntaxError*/),"") )
		DevOut( "2.B) SyntaxErrorInfo: " )
		DevOut( Transform(oICalendar:RecurPartValue("FREQ=DAILY;BYDAY=MO",-2/*exRecurSyntaxErrorInfo*/),"") )

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN