Как настроить запланированное задание в Windows XP для запуска Marcro в ms-access? - PullRequest
1 голос
/ 01 июля 2011

У меня обычно есть потребность запускать процесс каждый день до моего прибытия в офис.Я хотел бы установить это как запланированное задание.

Как это можно сделать?

Есть ли лучшая практика для этого?

Можно или нужно сделать это программно?

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

Чтобы решить эту проблему, я сделал следующее:

  • Создан макрос с именем «Отправить».

  • Создан файл запланированного задания .job, перейдя по адресу:

    Start > All Programs > Accessories > System Tools > Schedule Tasks

Scheduled Task Dialog Box

(Это привело к созданию файла .job в следующей папке: "C: \ WINDOWS \ Tasks \ Submit.job")

Как только это было создано, я поместил следующий синтаксис в текстовое поле Run:.

"C:\Program Files\Microsoft Office\Office11\MSACCESS.EXE"  "C:\MyDatabasePath\MyDatabaseName.mdb" /x "Submit"

После этого оставшаяся часть настройки завершается, как и должно быть в обычном расписании. Вы можете найти более подробную информацию о том, как вручную настроить эти задачи здесь или, если вы хотите выполнить настройку через командную строку, эта является особенно полезной ссылкой.

Примечание. Для корректной работы необходимо настроить как макрос, так и файл задания.

Что касается передового опыта, я обнаружил, что этот сайт содержит много полезной информации, а также когда и как следует использовать этот инструмент, дополняет Microsoft.

Один из способов сделать это программно - использовать API задания. Вот один такой пример, где это было выполнено с использованием VBA:

См. Ссылку здесь

Option Explicit
' Schedule api's
Declare Function NetScheduleJobAdd Lib "netapi32.dll" _
(ByVal Servername As String, Buffer As Any, Jobid As Long) As Long

' Schedule structure
Type AT_INFO
    JobTime     As Long
    DaysOfMonth As Long
    DaysOfWeek  As Byte
    Flags       As Byte
    dummy       As Integer
    Command     As String
End Type

' Schedule constants
Const JOB_RUN_PERIODICALLY = &H1
Const JOB_NONINTERACTIVE = &H10
Const NERR_Success = 0

Private Sub Command1_Click()
    Dim lngWin32apiResultCode As Long
    Dim strComputerName As String
    Dim lngJobID As Long
    Dim udtAtInfo As AT_INFO

    ' Convert the computer name to unicode
    strComputerName = StrConv(Text1.Text, vbUnicode)

    ' Setup the tasks parameters
    SetStructValue udtAtInfo

    ' Schedule the task
    lngWin32apiResultCode = NetScheduleJobAdd(strComputerName, udtAtInfo, lngJobID)

    ' Check if the task was scheduled
    If lngWin32apiResultCode = NERR_Success Then
        MsgBox "Task" & lngJobID & " has been scheduled."
    End If

End Sub
Private Sub SetStructValue(udtAtInfo As AT_INFO)
    Dim strTime As String
    Dim strDate() As String
    Dim vntWeek() As Variant
    Dim intCounter As Integer
    Dim intWeekCounter As Integer

    vntWeek = Array("M", "T", "W", "TH", "F", "S", "SU")

    With udtAtInfo

        ' Change the format of the time
        strTime = Format(Text2.Text, "hh:mm")

        ' Change the time to one used by the api
        .JobTime = (Hour(strTime) * 3600 + Minute(strTime) * 60) * 1000

        ' Set the Date parameters
        If Val(Text3.Text) > 0 Then

            ' Set the task to run on specific days of the month i.e. 9th & 22nd of the month
            strDate = Split(Text3.Text, ",")
            For intCounter = 0 To UBound(strDate)
                .DaysOfMonth = .DaysOfMonth + 2 ^ (strDate(intCounter) - 1)
            Next

        Else

            ' Set the task to run on sepecific days of the week i.e. Monday & Thursday
            strDate = Split(Text3.Text, ",")
            For intCounter = 0 To UBound(strDate)
                For intWeekCounter = 0 To UBound(vntWeek)
                    If UCase(strDate(intCounter)) = vntWeek(intWeekCounter) Then
                        .DaysOfWeek = .DaysOfWeek + 2 ^ intWeekCounter
                        Exit For
                    End If
                Next
            Next
        End If

        ' Set the interactive property
        If Check1.Value = vbUnchecked Then
            .Flags = .Flags Or JOB_NONINTERACTIVE
        End If

        ' Set to run periodically
        If Option2.Value = True Then
            .Flags = .Flags Or JOB_RUN_PERIODICALLY
        End If

        ' Set the command to run
        .Command = StrConv(Text4.Text, vbUnicode)
    End With
End Sub
1 голос
/ 18 июля 2012

Если задачи не выполняются должным образом, это может быть связано с обновлениями программного обеспечения и / или пакетов обновления. Проверьте файлы программы для Microsoft Office и Access. «Office11», как показано в строке выполнения, может потребоваться изменить на «Office 14» или «Office12» в зависимости от папок, отображаемых в программных файлах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...