OpenRecordset 解析查询中的表单引用
OpenRecordset to resolve the form reference in a query
这个简单的问题让我停了好几天。
我的程序的一般说明:
- 我有一个交互式访问表单可以按日期范围(开始日期 ex)过滤查询
8/1/2017 和结束日期)前 8/31/2017)
- 那我查询returns单
值:例如)12345.23
- 运行 VBA 函数。
问题:我无法明确提供参数。以下行以红色突出显示。
strSQL = strSQL & "AND [dbo_SO_SalesHistory].[InvoiceDate] Between #"_
&[Forms]![RUN]![textBeginOrderDate] & "#And#"_
&[Forms]![RUN]![textendorderdate]&"#"
我的SQL代码:
SELECT Sum(dbo_SO_SalesHistory.DollarsSold) AS SumOfDollarsSold
FROM dbo_SO_SalesHistory
While (((dbo_SO_SalesHistory.InvoiceDate) Between [Forms]![RUN]![textBeginOrderDate] And [Forms]![RUN]![textendorderdate]));
完整代码:
Option Compare Database
Option Explicit
Public Function TRANS2()
Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
Dim xlWS As Excel.Worksheet
Dim acRng As Variant
Dim xlRow As Integer
Dim qry As QueryDef
Dim rst As Recordset
Dim prm As DAO.Parameter
Dim strSQL As String
Set xlApp = New Excel.Application
Set xlWB = xlApp.Workbooks.Open("C:\Users\April.CAROBAPLASTICS\Desktop\August 2017.xlsx")
Set xlWS = xlWB.Worksheets("Totals")
xlRow = (xlWS.Columns("K").End(xlDown).Row)
Set qry = CurrentDb.QueryDefs("2_Total")
strSQL = strSQL & "AND [dbo_SO_SalesHistory].[InvoiceDate] Between #"_
& [Forms]![RUN]![textBeginOrderDate] & "# And #"_
& [Forms]![RUN]![textendorderdate] & "#"
qry.SQL = strSQL
Set rst = CurrentDb.OpenRecordset("2_Total", dbOpenDynaset)
Dim c As Integer
c = 11 'C is the one that stores column number, in which c=1 means column A, 11 is for column K, 12 for Column L
xlRow = xlRow + 11
Do Until rst.EOF
For Each acRng In rst.Fields
xlWS.Cells(xlRow, c).Formula = acRng
c = c + 1
Next acRng
xlRow = xlRow + 1
c = 1
rst.MoveNext
If xlRow > 25 Then GoTo rq_Exit
Loop
rq_Exit:
rst.Close
Set rst = Nothing
Set xlWS = Nothing
xlWB.Close acSaveYes
Set xlWB = Nothing
xlApp.Quit
Set xlApp = Nothing
Exit Function
End Function
你还需要两个空格:
strSQL = strSQL & "AND [dbo_SO_SalesHistory].[InvoiceDate] Between #" _
& [Forms]![RUN]![textBeginOrderDate] & "# And #" _
& [Forms]![RUN]![textendorderdate] & "#"
这个简单的问题让我停了好几天。
我的程序的一般说明:
- 我有一个交互式访问表单可以按日期范围(开始日期 ex)过滤查询 8/1/2017 和结束日期)前 8/31/2017)
- 那我查询returns单 值:例如)12345.23
- 运行 VBA 函数。
问题:我无法明确提供参数。以下行以红色突出显示。
strSQL = strSQL & "AND [dbo_SO_SalesHistory].[InvoiceDate] Between #"_
&[Forms]![RUN]![textBeginOrderDate] & "#And#"_
&[Forms]![RUN]![textendorderdate]&"#"
我的SQL代码:
SELECT Sum(dbo_SO_SalesHistory.DollarsSold) AS SumOfDollarsSold
FROM dbo_SO_SalesHistory
While (((dbo_SO_SalesHistory.InvoiceDate) Between [Forms]![RUN]![textBeginOrderDate] And [Forms]![RUN]![textendorderdate]));
完整代码:
Option Compare Database
Option Explicit
Public Function TRANS2()
Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
Dim xlWS As Excel.Worksheet
Dim acRng As Variant
Dim xlRow As Integer
Dim qry As QueryDef
Dim rst As Recordset
Dim prm As DAO.Parameter
Dim strSQL As String
Set xlApp = New Excel.Application
Set xlWB = xlApp.Workbooks.Open("C:\Users\April.CAROBAPLASTICS\Desktop\August 2017.xlsx")
Set xlWS = xlWB.Worksheets("Totals")
xlRow = (xlWS.Columns("K").End(xlDown).Row)
Set qry = CurrentDb.QueryDefs("2_Total")
strSQL = strSQL & "AND [dbo_SO_SalesHistory].[InvoiceDate] Between #"_
& [Forms]![RUN]![textBeginOrderDate] & "# And #"_
& [Forms]![RUN]![textendorderdate] & "#"
qry.SQL = strSQL
Set rst = CurrentDb.OpenRecordset("2_Total", dbOpenDynaset)
Dim c As Integer
c = 11 'C is the one that stores column number, in which c=1 means column A, 11 is for column K, 12 for Column L
xlRow = xlRow + 11
Do Until rst.EOF
For Each acRng In rst.Fields
xlWS.Cells(xlRow, c).Formula = acRng
c = c + 1
Next acRng
xlRow = xlRow + 1
c = 1
rst.MoveNext
If xlRow > 25 Then GoTo rq_Exit
Loop
rq_Exit:
rst.Close
Set rst = Nothing
Set xlWS = Nothing
xlWB.Close acSaveYes
Set xlWB = Nothing
xlApp.Quit
Set xlApp = Nothing
Exit Function
End Function
你还需要两个空格:
strSQL = strSQL & "AND [dbo_SO_SalesHistory].[InvoiceDate] Between #" _
& [Forms]![RUN]![textBeginOrderDate] & "# And #" _
& [Forms]![RUN]![textendorderdate] & "#"