Ms access 将参数添加到现有代码以将Access查询导出到Excel
'下面是我拥有的当前代码,它将正确导出到excel工作簿和工作表中。唯一的问题是,我需要将导出的数据限制在月末日期范围(例如:2017年1月31日至2017年4月30日)和工厂编号(例如:“4101”)内 谢谢你的帮助,非常感谢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
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(数据类型)