Ms access 将参数添加到现有代码以将Access查询导出到Excel

Ms access 将参数添加到现有代码以将Access查询导出到Excel,ms-access,vba,Ms Access,Vba,'下面是我拥有的当前代码,它将正确导出到excel工作簿和工作表中。唯一的问题是,我需要将导出的数据限制在月末日期范围(例如:2017年1月31日至2017年4月30日)和工厂编号(例如:“4101”)内 谢谢你的帮助,非常感谢 Public Function InventoryXport_4100() Dim appXL As Object Dim wb As Object Dim wks As Object Dim xlf As String Dim rs As DAO.Recordset

'下面是我拥有的当前代码,它将正确导出到excel工作簿和工作表中。唯一的问题是,我需要将导出的数据限制在月末日期范围(例如:2017年1月31日至2017年4月30日)和工厂编号(例如:“4101”)内 谢谢你的帮助,非常感谢

Public Function InventoryXport_4100()

Dim appXL As Object
Dim wb As Object
Dim wks As Object
Dim xlf As String
Dim rs As DAO.Recordset
Dim fld As Field
Dim intColCount As Integer

xlf = "Z:\COST ACCOUNTING INFO\Inventory Reports\MyFile.xlsx"

Set rs = CurrentDb.OpenRecordset("(QS)_Inventory") 
Set appXL = CreateObject("Excel.Application")
Set wb = appXL.Workbooks.Open(xlf)
Set wks = wb.Sheets("Inventory Xport") 'Sheet name

If rs.EOF = True Then
  MsgBox "No data", vbOKOnly
Exit Function
End If

With appXL
  .Application.worksheets("Inventory Xport").SELECT
  .Application.columns("A:AQ").SELECT
  .Application.columns.Clear
End With

intColCount = 1

For Each fld In rs.Fields
  wks.Cells(1, intColCount).Value = fld.Name
  intColCount = intColCount + 1
Next fld

appXL.displayalerts = False

wks.Range("A2").CopyFromRecordset rs

appXL.Visible = True

With appXL
  .Application.worksheets("Inventory Xport").SELECT
  .Application.columns("A:AQ").SELECT
  .Application.columns.AutoFit
  .Application.Range("A2").SELECT
  .Application.ActiveWindow.FreezePanes = True
End With

wb.Save
wb.Close
appXL.Quit

Set wb = Nothing
 rs.Close
Set rs = Nothing

End Function

您需要将筛选条件放入查询的where子句中:

Set rs = CurrentDb.OpenRecordset("SELECT * FROM [(QS)_Inventory] WHERE ...")
如果您需要where子句语法方面的帮助,则需要发布查询的结构(即,至少提供要筛选的列的名称和数据类型)。此外,如果要将这些参数传递到函数中,则需要在函数声明中使用合适的参数名称包含这些参数,并用合适的数据类型替换每个
??

Public Function InventoryXport_4100(prm1 As ????, prm2 As ????, prm3 As ????)
顺便问一下,为什么这是一个函数,而不是一个过程-没有返回值,甚至没有返回数据类型集

反复编辑以下评论:

所以试试类似的方法

Set rs = CurrentDb.OpenRecordset("SELECT * FROM [(QS)_Inventory] " & _
        "WHERE [Plant] = '4101' " & _
        "AND [Per] Between #01/31/2017# And #04/30/2017#")

我是一个初学者,这是我第一次尝试,所以我可能犯了很多错误。不确定Func和Proc之间的区别。这是我的access querySELECT[(CT)\u Inventory\Compile]。Plant,[(CT)\u Inventory\Compile]。Per,[(CT)\u Inventory\Compile]。Material,[(CT)\u Inventory\Compile]。Mkey,[(QS)\u Plant\Material\GLacc]。GLAcct,MB5\u Total,CMC\u Total,CMC\u North,CMC\u South,Branch\u Total,Deliver,从[(CT)\U Inventory\Compile]开始,在([(CT)\U Inventory\Compile].Material=[(QS)\U Plant\Material\GLacc].Material)和([(CT)\U Inventory\Compile].Plant=[(QS)\U Plant\Material\GLacc].Plant]上左连接[(QS)\U Plant\Material\GLacc];函数和Proc之间的差异:Proc做一些工作(例如,将一些数据导出到Excel);函数返回一个值并可选地执行一些工作(例如,导出一些数据并返回布尔值true/false以指示导出是否成功,或返回整数以指示导出了多少条记录)。您说您想限制按日期范围和工厂编号导出的数据。保存此信息的字段的字段名和数据类型是什么,它们是否包含在查询输出中?Fileld Name 1[Plant]=Text(数据类型)