在Microsoft Access中自动导出报告

时间:2019-05-15 15:58:23

标签: vba ms-access

大家好,我是系统管理员,只是试图使我每天早上必须运行的一些报告自动化。我首先找到了很多报告,然后我必须打开它才能从昨天开始输入日期,除非是星期一,然后我必须使用最后一个工作日(通常是星期五)的日期。现在,我可以使用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  

所以我认为我走在正确的轨道上,但是我有两件事可以弄清楚;

一个:如何获取星期五日期/昨天日期,然后将vars设置为该日期。
第二:如何为不同的forman运行代码,以便每个人都能在该日期之前导出文件。

我是编码的新手,但是我正在快速学习,这里的任何方向都很棒。

谢谢

2 个答案:

答案 0 :(得分:0)

回应:

  

一个:如何获取星期五日期/昨天日期,然后将var设置为该日期。

要计算上一个工作日的日期(不计算银行假期),可以使用以下函数:

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 

答案 1 :(得分:0)

可以找到这样的最后一个工作日(假设代码仅在周一至周五运行,而不在周末运行):

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'"

这可能需要重新设计要导出的报告。

此外,您的日期应为实际日期,因此请用#而不是单引号引起来。