OpenRecordset 解析查询中的表单引用

OpenRecordset to resolve the form reference in a query

这个简单的问题让我停了好几天。

我的程序的一般说明:

  1. 我有一个交互式访问表单可以按日期范围(开始日期 ex)过滤查询 8/1/2017 和结束日期)前 8/31/2017)
  2. 那我查询returns单 值:例如)12345.23
  3. 运行 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] & "#"