Автоэкспорт отчетов в Microsoft Access - PullRequest
0 голосов
/ 15 мая 2019

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

Но я могу понять, как передать ему несколько параметров

Так что я думаю, что это нужно сделать, это что-товот так.

Dim reportName As String  
Dim fileName As String  
Dim para As String  

reportName = "dailyReports"  
fileName = "C:\reports\report.pdf"  
formanName = ""  
BEGdateVaule = ""  
ENDdateVaule = ""  
para = "Forman = 'formanName' AND BEGdate = 'BEGdateVaule' AND ENDdate = 'ENDdateVaule'"

## if it is Monday then figure out Fridays date

if (weekday(Now()= 2)[  
set date to Fridays  
    for %%x in (  
        formanName = "Tom"  
        formanName = "Dick"  
        formanName = "Harry"   
        )do(  
run Sub  
)  
## if it is tues then figure out mondays date
ect . . 

Sub   
DoCmd.openReport reportName, acViewPreview, para ,acHidden
DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, fileName
Docmd.Close acReport, reportName, acSaveno  
end sub  

Так что я думаю, что я на правильном пути, но есть две вещи, которые я могу выяснить:

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

Я новичок в кодировании, но яБыстро изучить любое направление здесь было бы здорово.

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Последний рабочий день можно найти следующим образом (при условии, что код будет работать только с понедельника по пятницу, а не по выходным):

LastWorkDay=DateAdd("d",IIF(Weekday(Date)=vbMonday,-3,-1),Date())

Чтобы выполнить экспорт для двух или более различных наборов параметров, которые выесть две опции:

  1. Различные файлы экспорта: DoCmd.openReport reportName, acViewPreview, para_1 ,acHidden DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, filename_1 Docmd.Close acReport, reportName, acSaveno DoCmd.openReport reportName, acViewPreview, para_2 ,acHidden DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, filename_2 Docmd.Close acReport, reportName, acSaveno

  2. Создать отчет таким образом, чтобы каждый набор параметров был разделомкоторый начинается на новой странице, затем настройте параметры, чтобы включить все наборы, которые вы хотите экспортировать.Например:

para = "Forman IN ('Tom',Dick','Harry') AND BEGdate = 'BEGdateVaule' AND ENDdate = 'ENDdateVaule'"

Это может потребовать изменения дизайна экспортируемых отчетов.

Кроме того, вашдаты должны быть действительными датами и поэтому заключены в #, а не в одинарные кавычки.

0 голосов
/ 15 мая 2019

В ответ на:

Один: как получить дату пятницы / вчерашнюю дату и затем установить переменные на это.

Чтобы вычислить дату предыдущегорабочий день (не считая банковских выходных), вы можете использовать такую ​​функцию, как:

Function LastWorkingDay() As Date
    Dim i As Integer: i = Weekday(Date, vbSaturday)
    If i > 3 Then i = 1
    LastWorkingDay = DateAdd("d", -i, Date)
End Function

Если вышеприведенное вычислено в субботу, воскресенье или понедельник, будет возвращена дата предыдущегоПятница, иначе в любой другой день будет возвращен предыдущий день недели.

например, если работать сегодня (Wednesday 2019-05-15):

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