' ----------------------------------------------------------------------
' Script to list all Scheduled tasks and their available properties
'	Written for TaskSchedule 2.0
' ----------------------------------------------------------------------

' <<** Set Log File name and path here **>>
CONST LOGFILE = "C:\TaskListing.txt"

'http://msdn.microsoft.com/en-us/library/windows/desktop/aa382079%28v=vs.85%29.aspx

' Option Explicit
Dim objFSO, objTextFile
Dim objTaskService, objTaskFolder, colTasks
Dim objTask, strstrTaskState
Dim objTaskDefinition, colActions, objTaskAction, arrAttachments, strAttachment
Dim colHeaderFields, objHeaderPair
Dim objPrincipal, objRegistrationInfo, objTaskSettings, objIdleSettings, objTaskNetworkSettings
Dim colTaskTriggers, objTaskTrigger, objTaskRepitition

' Write Task Data to a File 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile(LOGFILE)

' Create the TaskobjTaskService object and connect
Set objTaskService = CreateObject("Schedule.Service")
call objTaskService.Connect()

' Get the task folder that contains the tasks. 
Set objTaskFolder = objTaskService.GetFolder("\")
 
' Get all of the tasks (Enumeration of 0 Shows all including Hidden.  1 will not show hidden)
Set colTasks = objTaskFolder.GetTasks(0)

If colTasks.Count = 0 Then 
    objTextFile.WriteLine "No tasks are registered."
Else
    For Each objTask In colTasks
		' http://msdn.microsoft.com/en-us/library/windows/desktop/aa382079%28v=vs.85%29.aspx
		With objTask
			objTextFile.WriteLine "Task Name: " & .Name 
			objTextFile.WriteLine " -Enabled:" & .Enabled
			objTextFile.WriteLine " -LastRunTime:" & .LastRunTime
			objTextFile.WriteLine " -LastTaskResult:" & .LastTaskResult
			objTextFile.WriteLine " -NextRunTime:" & .NextRunTime
			objTextFile.WriteLine " -NumberOfMissedRuns:" & .NumberOfMissedRuns
			objTextFile.WriteLine " -Path:" & .Path
			Select Case .State 
				Case "0"
					strTaskState = "Unknown"
				Case "1"
					strTaskState = "Disabled"
				Case "2"
					strTaskState = "Queued"
				Case "3"
					strTaskState = "Ready"
				Case "4"
					strTaskState = "Running"
			End Select
			objTextFile.WriteLine " -Task State: " & .State & "=" & strTaskState
			
			' http://msdn.microsoft.com/en-us/library/windows/desktop/aa382542%28v=vs.85%29.aspx
			Set objTaskDefinition = .Definition
			With objTaskDefinition
				objTextFile.WriteLine " -TASK DEFINITION"
				objTextFile.WriteLine "   -Data:" & .Data
				'http://msdn.microsoft.com/en-us/library/windows/desktop/aa446803%28v=vs.85%29.aspx
				Set colActions = objTaskDefinition.Actions
				For each objTaskAction in colActions
					With objTaskAction
						objTextFile.WriteLine "   -ACTIONS"
						objTextFile.WriteLine "     -ID:" & .Id
						Select Case .Type
							Case 0
								objTextFile.WriteLine "     -Type:" & .Type & "= Execute / Command Line Operation"
								objTextFile.WriteLine "     -Arguments :" & .Arguments  
								objTextFile.WriteLine "     -Path:" & .Path
								objTextFile.WriteLine "     -WorkingDirectory:" & .WorkingDirectory
							Case 5
								objTextFile.WriteLine "     -Type:" & .Type & "= Handler"
								objTextFile.WriteLine "     -ClassId:" & .ClassId 
								objTextFile.WriteLine "     -Data:" & .Data 
							Case 6
								objTextFile.WriteLine "     -Type:" & .Type & "= Email Message"
								objTextFile.WriteLine "     -From:" & .From
								objTextFile.WriteLine "     -ReplyTo:" & .ReplyTo 
								objTextFile.WriteLine "     -To:" & .To 
								objTextFile.WriteLine "     -Cc:" & .Cc
								objTextFile.WriteLine "     -Bcc:" & .Bcc 
								objTextFile.WriteLine "     -Subject:" & .Subject
								objTextFile.WriteLine "     -Body:" & .Body
								objTextFile.WriteLine "     -Server:" & .Server
								arrAttachments = .Attachments
								For each strAttachment in arrAttachments 
									objTextFile.WriteLine "     -Attachment:" & strAttachment
								Next 'strAttachment
								Set colHeaderFields = .HeaderFields
								For each objHeaderPair in ColHeaderFields
									objTextFile.WriteLine "     -HeaderName:" & objHeaderPair.Name  & " | Value:" & objHeaderPair.Value
								Next 'objHeaderPair
							Case 7
								objTextFile.WriteLine "     -Type:" & .Type & "=Message Box"
								objTextFile.WriteLine "     -Title:" & .Title
								objTextFile.WriteLine "     -MessageBody:" & .MessageBody
						End Select
					End With 'objTaskAction
				Next ' objTaskAction
				
				' http://msdn.microsoft.com/en-us/library/windows/desktop/aa382071%28v=vs.85%29.aspx
				Set objPrincipal = .Principal
				objTextFile.WriteLine "   -PRINCIPAL"
				With objPrincipal
					objTextFile.WriteLine "     -ID:" & .Id
					objTextFile.WriteLine "     -DisplayName:" & .DisplayName
					objTextFile.WriteLine "     -GroupId:" & .GroupId
					objTextFile.WriteLine "     -ID:" & .Id
					Select Case .LogonType
						Case 0
							objTextFile.WriteLine "     -LogonType:" & .LogonType & " = None"
						Case 1
							objTextFile.WriteLine "     -LogonType:" & .LogonType & " = Password"
						Case 2
							objTextFile.WriteLine "     -LogonType:" & .LogonType & " = Service 4 Users"
						Case 3
							objTextFile.WriteLine "     -LogonType:" & .LogonType & " = Interactive (User Must be logged in)"
						Case 4
							objTextFile.WriteLine "     -LogonType:" & .LogonType & " = Group"
						Case 5
							objTextFile.WriteLine "     -LogonType:" & .LogonType & " = Local Service/System or Network Service"
						Case 6
							objTextFile.WriteLine "     -LogonType:" & .LogonType & " = Interactive Token then Try Password"
					End Select
					Select Case .RunLevel
						Case 0 
							objTextFile.WriteLine "     -RunLevel:" & .RunLevel & " = Least Privileges (LUA)"
						Case 1 
							objTextFile.WriteLine "     -RunLevel:" & .RunLevel & " = Highest Privileges"
					End Select
							
					objTextFile.WriteLine "     -UserId:" & .UserId
				End With 'objPrincipal
				
				'http://msdn.microsoft.com/en-us/library/windows/desktop/aa382100%28v=vs.85%29.aspx
				Set objRegistrationInfo = .RegistrationInfo
				objTextFile.WriteLine "   -REGISTRATION INFO"
				With objRegistrationInfo
					objTextFile.WriteLine "     -Author:" & .Author
					objTextFile.WriteLine "     -Date:" & .Date
					objTextFile.WriteLine "     -Description:" & .Description
					objTextFile.WriteLine "     -Date:" & .Date
					objTextFile.WriteLine "     -Documentation :" & .Documentation 
					objTextFile.WriteLine "     -SecurityDescriptor:" & .SecurityDescriptor 
					objTextFile.WriteLine "     -Source:" & .Source
					objTextFile.WriteLine "     -URI:" & .URI
					objTextFile.WriteLine "     -Version:" & .Version
				End With 'objRegistrationInfo
				
				'http://msdn.microsoft.com/en-us/library/windows/desktop/aa383480%28v=vs.85%29.aspx
				Set objTaskSettings = .Settings
				objTextFile.WriteLine "   -TASK SETTINGS"
				With objTaskSettings
					objTextFile.WriteLine "     -AllowDemandStart:" & .AllowDemandStart
					objTextFile.WriteLine "     -AllowHardTerminate:" & .AllowHardTerminate
					Select Case .Compatibility
						Case 0
							objTextFile.WriteLine "     -Compatibility:" & .Compatibility & " = compatible with the AT command"
						Case 1
							objTextFile.WriteLine "     -Compatibility:" & .Compatibility & " = compatible with Task Scheduler 1.0"
						Case 2
							objTextFile.WriteLine "     -Compatibility:" & .Compatibility & " = compatible with Task Scheduler 2.0 (Windows Vista / Windows 2008"
						Case 3 ' Not Documented
							objTextFile.WriteLine "     -Compatibility:" & .Compatibility & " = compatible with Task Scheduler 2.0 (Windows 7 / Windows 2008 R2"
					End Select
					objTextFile.WriteLine "     -DeleteExpiredTaskAfter:" & .DeleteExpiredTaskAfter
					objTextFile.WriteLine "     -DisallowStartIfOnBatteries:" & .DisallowStartIfOnBatteries
					objTextFile.WriteLine "     -Enabled:" & .Enabled
					objTextFile.WriteLine "     -ExecutionTimeLimit:" & .ExecutionTimeLimit
					objTextFile.WriteLine "     -Hidden:" & .Hidden
					Select Case .MultipleInstances
						Case 0
							objTextFile.WriteLine "     -MultipleInstances:" & .MultipleInstances & " = Run in Parallel"
						Case 1
							objTextFile.WriteLine "     -MultipleInstances:" & .MultipleInstances & " = Add to Queue"
						Case 2
							objTextFile.WriteLine "     -MultipleInstances:" & .MultipleInstances & " = Ignore New"
					End Select
					objTextFile.WriteLine "     -Priority:" & .Priority & " (0=High / 10= Low)"
					objTextFile.WriteLine "     -RestartCount:" & .RestartCount 
					objTextFile.WriteLine "     -RestartInterval:" & .RestartInterval
					objTextFile.WriteLine "     -RunOnlyIfIdle:" & .RunOnlyIfIdle
					objTextFile.WriteLine "     -RunOnlyIfNetworkAvailable:" & .RunOnlyIfNetworkAvailable
					objTextFile.WriteLine "     -StartWhenAvailable:" & .StartWhenAvailable 
					objTextFile.WriteLine "     -StopIfGoingOnBatteries:" & .StopIfGoingOnBatteries 
					objTextFile.WriteLine "     -WakeToRun:" & .WakeToRun 
					
					'http://msdn.microsoft.com/en-us/library/windows/desktop/aa380669%28v=vs.85%29.aspx
					Set objIdleSettings = .IdleSettings 
					objTextFile.WriteLine "     -IDLE SETTINGS"
					With objIdleSettings
						objTextFile.WriteLine "       -IdleDuration:" & .IdleDuration
						objTextFile.WriteLine "       -RestartOnIdle:" & .RestartOnIdle
						objTextFile.WriteLine "       -StopOnIdleEnd:" & .StopOnIdleEnd
						objTextFile.WriteLine "       -WaitTimeout:" & .WaitTimeout
					End With 'objIdleSettings

					'http://msdn.microsoft.com/en-us/library/windows/desktop/aa382067%28v=vs.85%29.aspx
					Set objTaskNetworkSettings = .NetworkSettings 
					objTextFile.WriteLine "     -NETWORK SETTINGS"
					With objTaskNetworkSettings
						objTextFile.WriteLine "       -ID:" & .Id
						objTextFile.WriteLine "       -Name:" & .Name
					End With 'objTaskNetworkSettings
				End With 'objTaskSettings

				'http://msdn.microsoft.com/en-us/library/windows/desktop/aa383868%28v=vs.85%29.aspx
				Set colTaskTriggers = .Triggers
				For Each objTaskTrigger in colTaskTriggers
					objTextFile.WriteLine "   -TRIGGER"
					With objTaskTrigger
						objTextFile.WriteLine "     -Enabled:" & .Enabled
						objTextFile.WriteLine "     -Id:" & .Id
						objTextFile.WriteLine "     -StartBoundary:" & .StartBoundary
						objTextFile.WriteLine "     -EndBoundary:" & .EndBoundary
						objTextFile.WriteLine "     -ExecutionTimeLimit:" & .ExecutionTimeLimit
						Select Case .Type
							Case 0
								objTextFile.WriteLine "     -Type:" & .Type & " = Event"
								objTextFile.WriteLine "     -Delay:" & .Delay
								objTextFile.WriteLine "     -Subscription :" & .Subscription 
							Case 1
								objTextFile.WriteLine "     -Type:" & .Type & " = Time"
							Case 2
								objTextFile.WriteLine "     -Type:" & .Type & " = Daily"
								objTextFile.WriteLine "     -DaysInterval:" & .DaysInterval
							Case 3
								objTextFile.WriteLine "     -Type:" & .Type & " = Weekly"
								objTextFile.WriteLine "     -WeeksInterval:" & .WeeksInterval
								objTextFile.WriteLine "     -DaysOfWeek:" & .DaysOfWeek & "=" & ConvertDaysOfWeek(.DaysOfWeek)
							Case 4
								objTextFile.WriteLine "     -Type:" & .Type & " = Monthly"
								objTextFile.WriteLine "     -DaysOfMonth:" & .DaysOfMonth & "=" & ConvertDaysOfMonth(.DaysOfMonth)
								objTextFile.WriteLine "     -MonthsOfYear:" & .MonthsOfYear & "=" & ConvertMonthsofYear(.MonthsOfYear)
								objTextFile.WriteLine "     -RandomDelay:" & .RandomDelay 
								objTextFile.WriteLine "     -RunOnLastDayOfMonth :" & .RunOnLastDayOfMonth  
							Case 5
								objTextFile.WriteLine "     -Type:" & .Type & " = Monthly on Specific Day"
								objTextFile.WriteLine "     -DaysOfWeek:" & .DaysOfWeek & "=" & ConvertDaysOfWeek(.DaysOfWeek)
								objTextFile.WriteLine "     -MonthsOfYear:" & .MonthsOfYear & "=" & ConvertMonthsofYear(.MonthsOfYear)
								objTextFile.WriteLine "     -RandomDelay:" & .RandomDelay 
								objTextFile.WriteLine "     -RunOnLastWeekOfMonth :" & .RunOnLastWeekOfMonth  
								objTextFile.WriteLine "     -WeeksOfMonth:" & .WeeksOfMonth & "=" & ConvertWeeksOfMonth(.WeeksOfMonth)
							Case 6
								objTextFile.WriteLine "     -Type:" & .Type & " = When Computer is idle"
							Case 7
								objTextFile.WriteLine "     -Type:" & .Type & " = When Task is registered"
								objTextFile.WriteLine "     -Delay:" & .Delay
							Case 8
								objTextFile.WriteLine "     -Type:" & .Type & " = Boot"
								objTextFile.WriteLine "     -Delay:" & .Delay
							Case 9
								objTextFile.WriteLine "     -Type:" & .Type & " = Logon"
								objTextFile.WriteLine "     -Delay:" & .Delay
								objTextFile.WriteLine "     -UserId:" & .UserId
							Case 11 
								objTextFile.WriteLine "     -Type:" & .Type & " = Session State Change"
								Select Case .StateChange
									Case 0
										objTextFile.WriteLine "     -LogonType:" & .StateChange & " = None"
									Case 1
										objTextFile.WriteLine "     -LogonType:" & .StateChange & " = User Session Connect to Local  Computer"
									Case 2
										objTextFile.WriteLine "     -LogonType:" & .StateChange & " = User Session Disconnect from Local Computer"
									Case 3
										objTextFile.WriteLine "     -LogonType:" & .StateChange & " = User Session Connect to Remote Computer"
									Case 4
										objTextFile.WriteLine "     -LogonType:" & .StateChange & " = User Session Disconnect from Remote Computer"
									Case 7
										objTextFile.WriteLine "     -LogonType:" & .StateChange & " = On Workstation Lock"
									Case 8
										objTextFile.WriteLine "     -LogonType:" & .StateChange & " = On Workstation Unlock"
								End Select
								objTextFile.WriteLine "     -Delay:" & .Delay
								objTextFile.WriteLine "     -UserId:" & .UserId
						End Select
						
						Set objTaskRepitition = .Repetition
						objTextFile.WriteLine "     -REPITITION"
						With objTaskRepitition
							objTextFile.WriteLine "       -Duration:" & .Duration
							objTextFile.WriteLine "       -Interval:" & .Interval
							objTextFile.WriteLine "       -StopAtDurationEnd:" & .StopAtDurationEnd
						End With 'objTaskRepitition
					End With 'objTaskTrigger
				Next 'objTaskTrigger

			End With 'objTaskDefinition
			objTextFile.WriteLine
			objTextFile.WriteLine " -XML:" & .XML
			objTextFile.WriteLine "****************************************"
			objTextFile.WriteLine
		End With 'objTask
    Next
End If

objTextFile.Close
msgbox "Done"

Function ConvertDaysOfMonth(BitValue)
	Dim strMsg

	If BitValue AND &H01& Then strMsg = "1"
	If BitValue AND &H02& Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "2"
	End If
	If BitValue AND &H04&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "3"
	End if
	If BitValue AND &H08&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "4"
	End if
	If BitValue AND &H10&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "5"
	End if
	If BitValue AND &H20&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "6"
	End if
	If BitValue AND &H40&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "7"
	End if
	If BitValue AND &H80&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "8"
	End if
	If BitValue AND &H100&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "9"
	End if
	If BitValue AND &H200&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "10"
	End if
	If BitValue AND &H400&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "11"
	End if
	If BitValue AND &H800&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "12"
	End if
	If BitValue AND &H1000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "13"
	End if
	If BitValue AND &H2000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "14"
	End if
	If BitValue AND &H4000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "15"
	End if
	If BitValue AND &H8000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "16"
	End if
	If BitValue AND &H10000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "17"
	End if
	If BitValue AND &H20000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "18"
	End if
	If BitValue AND &H40000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "19"
	End if
	If BitValue AND &H80000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "20"
	End if
	If BitValue AND &H100000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "21"
	End if
	If BitValue AND &H200000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "22"
	End if
	If BitValue AND &H400000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "23"
	End if
	If BitValue AND &H800000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "24"
	End if
	If BitValue AND &H1000000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "25"
	End if
	If BitValue AND &H2000000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "26"
	End if
	If BitValue AND &H4000000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "27"
	End if
	If BitValue AND &H8000000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "28"
	End if
	If BitValue AND &H10000000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "29"
	End if
	If BitValue AND &H20000000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "30"
	End if
	If BitValue AND &H40000000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "31"
	End if
	If BitValue AND &H80000000&  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "LAST"
	End if

	ConvertDaysOfMonth = strMsg
End Function

Function ConvertDaysOfWeek(BitValue)
	Dim strMsg

	If BitValue AND 1 Then strMsg = "Sunday"
	If BitValue AND 2 Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "Monday"
	End If
	If BitValue AND 4  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "Tuesday"
	End if
	If BitValue AND 8  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "Wednesday"
	End if
	If BitValue AND 16  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "Thursday"
	End if
	If BitValue AND 32  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "Friday"
	End if
	If BitValue AND 64  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "Saturday"
	End if
	
	ConvertDaysOfWeek = strMsg
End Function

Function ConvertMonthsofYear(BitValue)
	Dim strMsg

	If BitValue AND  1 Then strMsg = "January"
	If BitValue AND 2 Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "February"
	End If
	If BitValue AND 4  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "March"
	End if
	If BitValue AND 8  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "April"
	End if
	If BitValue AND 16  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "May"
	End if
	If BitValue AND 32  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "June"
	End if
	If BitValue AND 64  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "July"
	End if
	If BitValue AND 128  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "August"
	End if
	If BitValue AND 256  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "September"
	End if
	If BitValue AND 512  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "October"
	End if
	If BitValue AND 1024  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "November"
	End if
	If BitValue AND 2048  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "December"
	End if

	ConvertMonthsofYear = strMsg
End Function

Function ConvertWeeksOfMonth(BitValue)
	Dim strMsg

	If BitValue AND  1 Then strMsg = "First"
	If BitValue AND 2 Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "Second"
	End If
	If BitValue AND 4  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "Third"
	End if
	If BitValue AND 8  Then
		If len(strMsg) > 0 Then strMsg = strMsg & ", "
		strMsg = strMsg & "Fourth"
	End if

	ConvertWeeksOfMonth = strMsg
End Function