首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用QueryDef的VBA DoCmd.OutputTo

使用QueryDef的VBA DoCmd.OutputTo
EN

Stack Overflow用户
提问于 2012-07-13 23:01:26
回答 1查看 4.2K关注 0票数 0

我已经寻找了一段时间来寻找一种解决方案来导出一个带有开放参数的查询。我需要将查询导出为带格式的Excel电子表格,并且无法向正在使用的数据库创建其他表、查询、窗体或报表。与DoCmd.TransferSpreadsheet不同,我使用DoCmd.OutputTo导出格式化查询,但是我似乎不能导出带有已定义参数的查询。我需要包括参数,否则用户将被迫一件输入开始和结束日期三次,因为出于某种原因,数据库要求输入startDate和endDate两次,并且为了保持excel电子表格和随后的outlook部分的一致性,我将不得不要求用户再次输入他们之前的参数

代码语言:javascript
运行
复制
Sub Main()
On Error GoTo Main_Err


'Visually Display Process
DoCmd.Hourglass True

Dim fpath As String
Dim tname As String
Dim cname As String
Dim tType As AcOutputObjectType
Dim tempB As Boolean

fpath = CurrentProject.path & "\"
'tType = acOutputTable
'tname = "APPROVED SWPS FOR LOOK AHEAD & BAR CHART"
tType = acOutputQuery
tname = "ASFLA&BC Query"
cname = "Temp BPC Calendar"


Dim qdfQry As DAO.QueryDef
Dim strStart As String
Dim strEnd As String

Set qdfQry = CurrentDb().QueryDefs(tname)


'strStart = InputBox("Please enter Start date (mm/dd/yyyy)")
'strEnd = InputBox("Please enter Start date (mm/dd/yyyy)")


qdfQry.Parameters("ENTER START DATE") = FormatDateTime("6/30/12", vbShortDate)   'strEnd
qdfQry.Parameters("ENTER END DATE") = FormatDateTime("7/1/12", vbShortDate) 'strStart





tempB = Backup(fpath, qdfQry, tType)
If (Not tempB) Then
    MsgBox "Excel Conversion Ended Prematurely..."
    Exit Sub
End If

'    tempB = sendToOutlook(qdfQry, cname)
'    If (Not tempB) Then
'        MsgBox "Access Conversion Ended Prematurely..."
 '        Exit Sub
'    End If

MsgBox "Procedure Completed Successfully"

Main_Exit:
    DoCmd.Hourglass False
    Exit Sub

 Main_Err:
    DoCmd.Beep
    MsgBox Error$
    Resume Main_Exit
End Sub


'************************************************************************************
'*
'*                                      Excel PORTION
'*
'************************************************************************************



Public Function Backup(path As String, db As DAO.QueryDef, Optional outputType As     AcOutputObjectType) As Boolean
On Error GoTo Error_Handler
    Backup = False
    Dim outputFileName As String
Dim name As String
Dim tempB As Boolean

'Set Up All Name Variablesand
name = Format(Date, "MM-dd-yy") & ".xls"

'Cleans Directory of Any older files and places them in an archive
SearchDirectory path, "??-??-??.xls", name

'See If File Can Now Be Exported. If Already Exists ask to overwrite
outputFileName = path & name

tempB = OverWriteRequest(outputFileName)



If tempB Then
    'Formats The Table And Exports Into A Formatted SpreadSheet
    'Checks if an output type was added to the parameter if not defualt to table
    If Not IsMissing(outputType) Then
        DoCmd.OutputTo outputType, db.name, acFormatXLS, outputFileName, False
    Else
        DoCmd.OutputTo acOutputTable, db.name, acFormatXLS, outputFileName, False
    End If
Else
    Exit Function
End If



Backup = True

Error_Handler_Exit:
    Exit Function

Error_Handler:
    MsgBox "MS Access has generated the following error" & vbCrLf & vbCrLf & "Error Number: " & _
Err.number & vbCrLf & "Error Source: Main Excel Backup" & vbCrLf & "Error Description: " & _
Err.Description, vbCritical, "An Error has Occured!"

Resume Error_Handler_Exit
End Function

当前给出的SQL类似于下面,为了清楚起见,省略了字段

代码语言:javascript
运行
复制
PARAMETERS [ENTER START DATE] DateTime, [ENTER END DATE] DateTime;
SELECT [SWPS].STATION,
       [SWPS].START_DATE, 
       [SWPS].END_DATE, 
FROM [SWPS]
WHERE ((([SWPS].STATION) 
Like ("*")) 
AND (([SWPS].START_DATE)<=[ENTER END DATE]) 
AND (([SWPS].END_DATE)>=[ENTER START DATE]) 
AND (([SWPS].SWP_STATUS) In ("A","P","W","T","R")));
EN

Stack Overflow用户

回答已采纳

发布于 2012-07-13 23:05:41

我建议您更改查询的sql。

代码语言:javascript
运行
复制
Dim qdfQry As DAO.QueryDef
Dim strStart As String
Dim strEnd As String

''You could use a query specifically for this
Set qdfQry = CurrentDb.QueryDefs(tname)

sSQL=qdfQry.SQL

NewSQL = "SELECT [SWPS].STATION, [SWPS].START_DATE, [SWPS].END_DATE, " _
       & "FROM [SWPS] WHERE [SWPS].STATION Like '*' " _
       & "AND [SWPS].SWP_STATUS In ('A','P','W','T','R') " _
       & "AND [SWPS].START_DATE)<=#" & Format(DateStart, "yyyy/mm/dd") & "# " _
       & "AND [SWPS].END_DATE)>=#" & Format(DateEnd, "yyyy/mm/dd") & "#"

qdfQry.SQL = NewSQL

''Do the excel stuff

''Reset the query
qdfQry.SQL = sSQL
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11473088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档