【发布时间】:2019-04-26 18:45:09
【问题描述】:
所以,直到几个月前,我才刚接触并且只在 Excel 中使用 VBA,有很多命令我对如何使用/正确编写语法一无所知。
问题:我有一个已保存的查询 (qry_ExcelExport),目前只是:
SELECT '*' FROM tbl_Contacts
我想做的是使用 VBA 根据用户表单控件添加/更改 WHERE 子句。
类似:
If me.txt_Flag = "DP Delegate" then 'WHERE [DP-DEL] = True' (or = -1)
Elseif me.txt_Flag = "DP Sponsor" then 'WHERE [DP-SPON] = True' (or = -1)
等等。 (我知道上面的语法是 100% 不正确的,这正是我希望实现的)
借助互联网的力量,我设法找到了这段代码:
‘To change the Where clause in a saved query
Dim qdf as QueryDef
Dim db as Database
Set db = CurrentDB
Set qdf = db.QueryDefs("YourQueryName")
qdf.SQL = ReplaceWhereClause(qdf.SQL, strYourNewWhereClause)
set qdf = Nothing
set db = Nothing
Public Function ReplaceWhereClause(strSQL As Variant, strNewWHERE As Variant)
On Error GoTo Error_Handler
‘This subroutine accepts a valid SQL string and Where clause, and
‘returns the same SQL statement with the original Where clause (if any)
‘replaced by the passed in Where clause.
‘
‘INPUT:
‘ strSQL valid SQL string to change
‘OUTPUT:
‘ strNewWHERE New WHERE clause to insert into SQL statement
‘
Dim strSELECT As String, strWhere As String
Dim strOrderBy As String, strGROUPBY As String, strHAVING As String
Call ParseSQL(strSQL, strSELECT, strWhere, strOrderBy, _
strGROUPBY, strHAVING)
ReplaceWhereClause = strSELECT &""& strNewWHERE &""_
& strGROUPBY &""& strHAVING &""& strOrderBy
Exit_Procedure:
Exit Function
Error_Handler:
MsgBox (Err.Number & ": " & Err.Description)
Resume Exit_Procedure
End Function
第一行...第一行“更改已保存查询中的 Where 子句”表明这正是我所需要的。
但是,对于理解此代码、语法或更重要的是如何将其与表单控件联系起来,没有演练或循序渐进的初学者指南,而且我从未使用过或听过它以前的。
编辑:保存的查询 qry_ExcelExport 用于导出数据的函数
Call exportTable("qry_ExportExcel")
我在哪里打电话
Public Sub exportTable(tName As String)
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, tName, saveFileAs, True
End Sub
我需要修改 where 的能力,以便在导出时包含该子句,因为目前没有 WHERE 子句,因此导出只需获取所有数据。
【问题讨论】:
-
如果您只需要使用 VBA 更改 WHERE 部分,我认为您不需要这么复杂的代码。将控件的值保存到字符串变量中,然后使用该新字符串执行 SQL 查询。像
MySQL="SELECT * FROM tbl_Contacts WHERE " & myWherePart这样的东西应该可以工作。另外Call ParseSQL是什么意思? -
该代码构建了一条 SQL 语句,但没有执行任何操作。你真正想要完成什么?如果您只想过滤报告或表单,请查看allenbrowne.com/ser-62.html
-
我刚刚在 Microsoft 文档网站之一上发现了这一点(您知道那些有很多技术信息并不能真正帮助解释用法的网站)我希望它可以让我更改“WHERE field1 = true" 到 "WHERE field2 = True" 编辑:我需要更改已保存查询中的 WHERE 子句,因为我使用该查询调用 excel 导出