OpenRecordset解析查询中的表单引用

时间:2017-10-27 15:40:39

标签: vba forms ms-access recordset

这个简单的问题让我在我的轨道上停了几天。

我的计划的一般解释:

  1. 我有一个交互式访问表单,按日期范围过滤查询(开始日期ex) 2017年8月1日至2017年8月31日结束日期)
  2. 然后我的查询返回一个 价值:ex)12345.23
  3. 运行VBA功能。
  4. 问题:我无法明确提供参数。以下行以红色突出显示。

    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
    

1 个答案:

答案 0 :(得分:1)

你仍然需要两个空格:

strSQL = strSQL & "AND [dbo_SO_SalesHistory].[InvoiceDate] Between #" _
& [Forms]![RUN]![textBeginOrderDate] & "# And #" _
& [Forms]![RUN]![textendorderdate] & "#"