本节将在宏查询的SQL语句加入筛选条件,下面我们就来聊聊关于wps版excel怎么设置下拉筛选?接下来我们就一起去了解一下吧!
wps版excel怎么设置下拉筛选
本节将在宏查询的SQL语句加入筛选条件。
在上一节中使用常量定义了whereStr,在本节中,将这个语句设定成从报表上面标黄的查询条件中动态获取。
修改查询按钮代码如下:
//查询按钮的单击事件
function CommandButton1_Click()
{
//使用变量ReportSh 引用工作表对象:报表
let ReportSh = Application.Worksheets.Item("报表")
//使用变量ReportQuery 引用报表工作表内的查询对象
let ReportQuery = ReportSh.QueryTables.Item(1)
//DictSh 引用工作表对象:字典
let DictSh = Application.Worksheets.Item("字典")
//先定义一个 where 语句来测试 sql 语句
//const whereStr = 'where (left([单位],6)="101006") and ([计划月份] between "01" and "05")'
/******* 注释掉上面的语句,使用getWhereStr函数动态替换 ***/
/*
* 将字典工作表D1单元格存储的sql语句取出
* 并使用 getWhereStr函数的返回值替换语句中的 ?
*/
let sqlstr = DictSh.Range("D1").Value2.replace(/\?/g, getWhereStr(ReportSh))
// Console.log(sqlstr)
//将sqlstr 赋值给查询对象,并刷新查询
ReportQuery.CommandText = sqlstr
ReportQuery.Refresh()
}
切换到lib模块,将 getWhereStr()这个函数完善。代码如下:
/* 函数名:getWhereStr 获取报表工作表上设定的条件
* 参 数:传入一个参数Sh 为工作表的引用
* 返回值:sql语句
*/
function getWhereStr(Sh)
{
//定义where语句, true后面方便加语句,即便不加语句,也不会出错
let WhereStr = " where true"
//定义单位名称 使用Text属性,适应单元格为空的情况
//单元格为空时,属性Value2是undefined,不能使用substr
//非要使用Value2,则可以:if (Sh.Range('f1').Value2){ alert("可用")} else {alert("不可用")}
let UnitName = Sh.Range('f1').Text.substr(0,7)
//加入条件字符串 如果单位选择全部或者没选择单位 则去掉单位筛选
if (UnitName == '' || UnitName =='0-全部'){}
else {
WhereStr = " and (left([单位],7) = '" UnitName "')"
}
/* 三元表达式可精简上面if语句,但影响可读性:
WhereStr = UnitName == '' || UnitName =='0-全部' ? "" :
" and (left([单位],7) = '" UnitName "')"
*/
//定义设置月份 也就是结束的月份
let EndMonth = Sh.Range('c1').Text.substr(0,2)
//定义月份期间 也就是开始的月份
let BeginMonth = Sh.Range('c2').Text
//没有设置月份的时候,不进行筛选,即提取所有月份的数据
if (EndMonth !=''){
/* 定义开始月份 并定义默认值为'01' 即年初
变量(赋值符号)(条件) ? (表达式1):(表达式2)
三元表达式,条件为真时,返回表达式1,否则返回表达式2
可以在表达式1和2中嵌套三元表达式使用 */
BeginMonth = BeginMonth == '当月' ? EndMonth : '01'
//加入条件字符串 如果开始月份与结束月份一致,则使用=,否则使用between and
WhereStr = BeginMonth == EndMonth ?
" and ([计划月份] = '" EndMonth "')" :
" and ([计划月份] between '" BeginMonth "' and '" EndMonth "')"
}
//返回sql语句
return WhereStr
}
在【报表】工作表中,点击【查询】按钮,可以看到数据被刷新了。
修改【报表】工作表上面的条件,可以看到不同的报表数据。
本节到此结束,下一节,将完善查询明细的按钮代码。
,