易表应用技巧集锦

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

易表应用技巧集锦


1、下面的公式第二个selectfill怎么也不执行,原来And之前有一个全角空格,希望能够引起大家的注意:
DelFor(GridName) And SelectFill("总表","业务负责人","业务负责人","日期","日期","订单_产品","产品","订单_单价","订单_单价") And SelectFill("总表","业务负责人","业务负责人","日期","日期","代销_产品","产品","代销_单价","代销_单价","2") And DelReptRows("ww","业务负责人","日期","产品","订单_单价","代销_单价")

2、问:如果在窗口中插入变量,需要一个一个来,我的表有200多列,用下拉菜单找到一个变量需要快2分钟,10个变量就是20分钟,效率很低,请问有什么办法解决吗?
答:随便插入一个字段,把字段里的内容改为变量名即可。

3、在局域网中应用易表,如果遇到存盘冲突问题,可能是有人非正常退出,此时你只需再启动一个易表,打开正在编辑的文件,然后关闭, 接着回到原来已经编辑好数据的易表,即可正常存盘。

4、问:菜单中的“上一条”及“下一条”按钮里设置的是move函数,进入表后,如不点击其他单元格,使用“上一条”及“下一条”按钮没有作用。移动到其他单元格后,这两个按钮就可用了。请问是什么原因?
答:当表打开的时候,若无相关的预处理公式,row=-1,row不等于rowsel,所以,可以有两个解决方法:
⑴使用rowsel变量,【上一条】公式为if(rowsel=1,true,move(rowsel-1,1)),【下一条】公式为if(rowsel=rows,true,move(rowsel+1,1))
⑵使用row变量,【上一条】公式为if(row=1,true,move(row-1,1)),【下一条】公式为if(row=rows,true,move(row+1,1)),还要在“表预处理公式”中添上move(1,1)。
总的来说,还是使用rowsel变量比较好。


5、你碰到过想让窗口停靠在主表的右侧或下面,却不能得心应手,调整了老半天而不能使窗口和主表合为一体吗?其实这里面有点小技巧:你如果想让窗口停靠在右侧,可以把窗口往右侧拖动直到出了表的边线,轻轻往回一带就可以了。


6、由win98操作系统自身的问题,在有冻结列的表中,拖动横向滚动条时,易表容易死机(数据量不多时,可能不会出现)。 告诉大家一个解决的办法:
(1) 冻结列里不要包含隐藏行。(2) 重新进入易表后,先调整冻结列中其中一列的列宽,保存。然后再试试,就不会死机了。如果是多用户使用,请禁止其他用户的“列宽设置”权限。


7、对于逻辑列的锁定,必须选择“锁定全部内容”才行,因为逻辑列就两个值,0和-1,无所谓空与非空。


8、问:易表允许相同名称的表存在于一个文件中,请问这会不会产生混乱?
答:不会,如果需要调用数据,位

置靠前的优先,当然最好给同名的表取个不同的名字。

9、问:设置字号后,新增(添加)行的字号又变小了,怎样才能使添加的行的字号与上一行一致?
答: 先显示所有列和行,然后选定整个表,设置一下字体即可(在其它地方随便做些修改才能保存)。

10、易表安装目录下有一个symbol.txt的文件:这是易表的符号库,易表菜单中的插入符号命令,用的就是这些符号,你可以修改这个文件,删除不需要的符号,增加你常用的符号。

11、问:如何备份我的收藏夹?
答:很简单,备份安装目录下的favorite.fvt文件即可。

12、表名和列名命名要注意:最好前后和中间不要有空格,否则看着公式似没错,就是得不到正确的数据,也难以发现错误。

13、有时当输入的公式相同但每列或每个单元格都要重复输入,是不是很累人呢?其实只要把要输入公式的列或单元格全部选中,然后一次输入就OK了!

14、如何在录入窗口中显示¥100,000.00格式?
答:将表中的字段设为字符型,并在所选列中用列刷新公式Format([字段名],"Currency")

15、怎样直接取得“星期X”?
答:format([日期],"aaa")

16、把表设计成框架模式并打印时,总在第一行第一列显示“框架模式”,此时可以用SetCellText把它清除或覆盖。例如:
Explorer("乡","小班号,面积","4,2",0) And SetCellText("造林小班",1,1,"") And SetCellText("造林小班",1,"乡","全县合计") And PrintReport("县级所有造林小班一览表") And ClearSubtotal()
另请注意:前面用Explorer把表设成了框架模式,后面就要用ClearSubtotal()退出框架模式,这是编程的良好习惯,可以避免函数间相互影响。

17、禁止行菜单中的“行高设置”命令,将同时禁止用户通过鼠标调整行高,列宽同理。

18、输入百分比样式的数值时,不要直接输入xx%(如20%),而要输入0.2,然后用按工具栏中百分比样式"%"键使其显示为20%,否则引用该数据进行计算时容易出错,而且还不易找出问题所在。


19、问:在录入窗口中用变量调用万年历,为什么有时行,有时不行?
答:不能调用时,可能光标处在锁定行上。

20、问:我在文章套打中用aggregate函数设置好了公式,而且确定公式没有错,但为什么会与表中统计的总计结果不符?
答:因为你的表设置了汇总或框架模式。


21、问:我原先设计好的按钮正常,现在怎么不行了?
答:可能你更改了列名称或表名(或调整了表位置)而公式没作相应改正。设计好的表最好不要随意更改列名称或表名(或调整了表位置),设计前应想好,不然平添许多麻烦。

22、函数中的可选参数,并非可有可无。如可选参数后没有条件参

数,则可选参数可省略,如可选参数后还有条件参数,此时可选参数成了必选参数,必须设置,如以下两公式,一对一错:
正确:SubtotalFill("汇总表","姓名","工资,奖金","2,2",0,"日期","=",[%日期%])
错误:SubtotalFill("汇总表","姓名","工资,奖金","2,2","日期","=",[%日期%])

23、问:易表的帮助文件中有关“流水帐”的内容有一段说:
“不要轻易地在刷新公式中同时使用Cell函数和Row变量,否则会将刷新公式看作流水账计算公式,修改当前行的数据,那么当前行之后的所有行都会重新计算,大大降低了程序的运行效率。”
但当我们需要对同列中本行与其他行的数据进行比较时,我们将不得不使用Cell函数和Row变量,这时如何避免“当前行之后的所有行都重新计算”呢?
答:录入函数cell(row,col)时,对录入格式作一点小修改:在左括号的右边加两个空格,就没有问题了。

24、问:如何用公式选定整个表?
答:select(1,1,rows,cols)

25、msgbox函数中如果提示语太长,显示的效果不好看,可以在提示语中加入char(10)或char(13)换行。例如:(1)分行显示提示语
msgbox("1、是"+char(13)+"2、否"+char(13)+"3、不确定",2)
(2)第二行提示语前自动空格
msgbox("小平同志说的好:不管是黑猫还是白猫"+char(13)+char(9)+"抓到老鼠就是好猫",2)
char(9) TAB
char(10) 换行
char(13) 回车

26、问:如何在图片列批量插入图片?
答:先把图片按行号顺序编辑好,如模板区的“重温2002韩日世界杯”里的“分组”表的“全家福”列,把图片编为CJF1、CJF2、CJF3...CJF32,然后设置刷新公式:"Pic\CJF" + text(row) + ".jpg",就可批量插入图片。

27、公式IF([日期]="",公式1,公式2)应为:If(IsBlank("日期"),公式1,公式2)。因""为字符,字段类型不同是不能相互比较的。
注:IsBlank除了对逻辑列不起作用外,其余的列类型都可用它来判断是否为空。


28、判断字符列是否为空可写成:If([某列] > "","A","D"),无需写成If([某列] <> "","A","D")

29、用Instr或Search简化公式:
如一系统有a、b、c、d、e五个用户,每个用户使用不同的视图,可设表预处理公式为:OpenView(Instr(username,"Zabcde"))或OpenView(Search("ZabcdeX"))。
这里仅说明Instr或Search简化公式所起的作用,以上问题最简洁的答案是:openview(usertype),用户的分组号设置为视图编号即可。

30、问:如何求在一个日期后或前几天的日期?
答:日期和数值直接加减即可。如$"2003-8-16" - 6=$"2003-8-10"

31、问:日期和日期能直接加减吗?
答:不能直接加减,通过NUMBER转换一下即可直接加减,如Number([结束日期]) - Number([开始日期])得到两个日期相隔的天数。

32、问:如何

找出距指定日期最近或最远的日期?
答:Abs(Number([日期]) - Number([%指定日期%])),得数最小的距指定日期最近,最大的距指定日期最远。Number([日期]) - Number([%指定日期%])为正,则此日期在指定日期之后;为负,则此日期在指定日期之前。

33、问:怎样求出一个月有几个星期天?
答:设置公式If(Month([日期]) = 1,Week(EOMonth([日期],0))-1,Week(EOMonth([日期],0)) - Week(EOMonth(EOMonth([日期],0) ,- 1)))


34、问:在公式生成器输入公式,有没有办法点击面板上<,>,=等变成带引号如:"<",">","="等?
答:勾选公式生成器上的"引号"后,再点击面板上的<,>,=,就会变成带引号的"<",">","="(需1231以上版本)

35、问:执行Select(1,1,Rows,Cols) And Do(420,1) (锁定所有行)后,全表一片蓝,有点难看,请问有何办法解决?
答:改成Select(1,1,Rows,Cols) And Do(420,1) And Move(1,1)就行了。

36、问:怎样将数字向上舍入为最接近的整数?
答:设置公式:-int(-[本列])

37、opengrid(grid-1) 返回到上一表,opengrid(grid+1) 前进到下一表,opengrid(1)后退到第一个表,opengrid(grids) 前进到最后的表。

38、问:从易表中导出数据到execl中,数字有时为科学记数法如(3.111111E+14),怎么办?
答:在execl中全选数据,右击选取设制单元格格式,转为数字类型即可。

39、问:如何删除表中的空记录?
答:在最后增加一列,公式设为:Aggregate(4,Row,1,Row,Cols - 1),按钮公式设为:RecalcCol(Grid,Cols) And DelFor(Grid,Cols,"=",0)(注:本法适用于没有逻辑列的表)
对于带逻辑列的,A列公式设为:Aggregate(4,Row,1,Row,Cols - 1)-n(n为逻辑列数)

40、问:为保证所有资料已经录入(即记录中的所有列都非空),如何进行验证?
答:在最后增加一列,公式设为:If(Aggregate(4,Row,1,Row,Cols-1)=Cols-1, - 1,0),按钮公式设为:ShowAllRows() And RecalcCol(Grid,Cols) And FilterFor("记录是否完整", "=" ,0)

41、在Win98环境下如果用表达式给变量或标签赋值,常常出现非法操作的提示。解决办法是:将SetLabel、SetVariable的第二个参数用变量代替。如模板文件“常用统计函数演示”中按钮公式Setvariable("%PD01%",Sumfor(Gridname,"数量","产品","=","PD01")),将Sumfor(Gridname,"数量","产品","=","PD01")改成[%变量%](表达式变量)后,Win98就运行正常了。

42、有时几个公式组合起来达到某一目的,光标会失去焦点,进不了其他表或引起一些非法操作,加上Move就可以了。

43、我自从安装了1246版本以后,出现了这样一个问题:直接在windows2000 professional中单击某个易表文件,可以打开易表,但是出现错误提示:“错误号52,错误的文件和数。”,解决办法是: 在windows资源管理器中,“工具“菜

单中的“文件夹选项”中,有一栏叫做"文件类型",找到egd文件,点击"高级"按钮,比较和其他程序的不同,发现缺少了2个操作选项:“print"和"print to",于是手工添加了这两个选项,并在“用于执行的操作程序”栏目内,填写:"X:\program files\egrip.exe" /p %1,其中,x为易表的安装盘盘符。

44、问:用DelFor()删除上万行的记录比较慢,可有更快速的办法?
答:设置公式filterfor("第一列","=",[%A%]) and addrow(1,"第一列",[%A%]) and select(1,1,rows-1,1) and do(102,1) and showallrows() and If(Cell(Rows,1) = [%A%],delrow(grid,rows), True)

45、问:如何做个一个按钮,将本目录下的易表文件和它下一级目录的若干个照片,输出到软盘?
答:先制作一个批处理文件,如:BF.bat,其内容设为:Xcopy d:\abc a: /s/q/y/e(假定你的易表文件及文件夹所在目录为D:\abc),保存并将BF.bat文件放在d:abc下;在按钮公式中设置公式为:Run(docdir + "BF.bat"),以后要想把当前目录中的所有文件(包括子目录)输出到软盘,只需点一次按钮就可实现。
(本办法在XP下调试通过,不足之处:会出现命令窗口,一闪而过。)

46、问:怎样让系统中的录入窗口,在不同分辩率下打开时始终居中?
答:可利用系统变量screenwidth、screenheight的返回值及窗口的大小值计算确定,设置表预处理公式或按钮公式:OpenWindow(1,(screenwidth - 400) / 2,(screenheight - 300) / 2)(假设窗口大小为400*300)。

47、问:如果我的信息管理系统有多个文件组成,每次修改某个文件的菜单或工具栏,为了保持整个系统的一致,就得对每个文件的菜单方案进行修改,很麻烦,请问有没有办法让每个文件的自定义菜单、工具栏都统一?
答:有办法的,最新版本的易表增加了OpenMenufromFile函数。用户可以将菜单文件保存为菜单模板,然后为每个文件的第一个表设定预处理公式:OpenMenufromFile(docdir + "模板.mnu");需要注意的是,在这种情况下最好利用filename变量来判断文件名,如果不符合,结合OpenFile文件来定义菜单函数,如果符合,则可直接用OpenGrid函数!
(注意:最好将所有易表数据库文件放在一个目录下,使用Open系列函数的时候注意用docdir来定义路径)

48、问:如果在宿主机上打开易表文件做过存盘操作,那么在其他电脑上肯定打不开宿主机上存过盘的文件,出现提示:"Invalid file format", 请问有没有解决方法?
答:只要不要把文件放在c:盘(系统文件所在盘?)上就行。

49、问:在公式生成器中怎样快速找到要找的函数?
答:点击公式生成器函数列表框中的任一函数,用键盘连续不断地快速敲击要找的函数,直至该函数出现。或者敲击该函数

的前两个字母,看看你要找的函数出现了吗?如果还没有出现,在滚动条下方单击鼠标一次或几次,你要找的函数便出来了。

50、快速输入日期:1949年10月28日,输入491028即可。如果是1930年以前(不含)或2030年(含)以后,则必须输入完整数字,如1919年10月28日,要输入19191028;2030年10月28日,要输入20301028。

51、默认的易表列类型是字符型,通常设计表的时候要先输入列名称,再调整列类型。经常遇到这样的情况,要设计的表格列数比较多,而类型大部分是数值型,输完列名称后再一个一个地将字符型改为数值型,感到很麻烦。解决的办法是:先将第二列以后的各列删掉,再将第一列改为数值型,然后按向下的方向键添加列,这样新增加的列便都是数值型了,个别不是数值型的列单独调整,这样就省力多了。

52、问:有时公式左看右看都是正确的,在公式生成器中“执行计算”也有结果,但实际却得不到想要的结果!是什么原因?
答:可能你在记事本编辑公式时无意中加入了一些特殊字符,如硬回车,如split("1/2/3/4/5/6/7/8/9/10","/",row)中"1/2/3/4/5/6/7/8/9/10"有硬回车粘贴到公式生成器中和没硬回车没什么不同,但粘贴到word里就一清二楚了,因此,有时公式没结果可粘贴到word里看看有无问题。


关于可选参数不可选
作者:贺辉 来源:精明软件
易表中很多函数中带有可选参数,但是可选不是绝对的.

下面以SumFor为例,讲述一下使用可选参数需要注意的事项,先看一下SumFor的语法:
Sumfor(Grid,Col,CompareCol,CompareMode,CompareValue......,StartRow,EndRow,Option)

其中最后三个参数StartRow、EndRow、Option是可选参数,但是可选不是绝对的,如果公式中设置了某个可选参数,那么该可选参数之前的可选参数,也必须同时设置。例如对于SumFor函数,如果设置了Option参数,那么StartRow和EndRow必须同时设置。

所以,如果想统计订单表中CS01客户订购产品的数量,而且不包括隐藏行,下面的公式是错误的:
Sumfor("订单","数量","客户","=","CS01",1)
正确的是:
Sumfor("订单","数量","客户","=","CS01",0,0,1)



根据本列内容生成无重复列表项目
作者:贺辉 来源:精明软件
 假定某个表有一个品名列,希望每次输入品名的时候,如果是一个新增品名,就自动将该品名加入到品名列的列表项目中.

 其实这个问题可以用ListFor函数解决,但是在大数据量的时候,ListFor的效率比较低,现在介绍一种较为高效的方法。首先我们先学习一个函数:

GetComboList

返回指定表中指定列的列表项目。

语法:
GetComboList(Grid,Col)
Grid 指定表,可以用表名称,也可

以用表位置表示。
Col 指定列,可以用列名称,也可以用列位置表示。

例子:
GetComboList("订单","客户")
返回订单表中客户列的列表项目。

实际的例子

假定某个表有一个品名列,希望每次输入品名的时候,如果是一个新增品名,就自动将该品名加入到品名列的列表项目中;为达此目的,只需将品名列的操作公式设为:

If(Instr([品名],GetComboList(GridName,"品名"))<0, SetComboList(GridName,"品名",GetComboList(GridName,"品名")+"|"+[品名]),True)

该公式的含义是,首先利用GetComboList函数取得品名列的列表项目,然后利用Instr函数判断新输入的品名是否包括在列表项目中,如果不包括,就利用SetComboList函数将新输入的品名加入到列表项目中。




26号后自动转换为下一月记帐月份
作者:ylm 来源:精明在线
财务记帐时需要是把从上月26日至本月25日之间的日期返回成本月月份,如:日期在1月26日-2月25日之间,系统返回月份为2月,日期在2月26日-3月25日之间的,系统返回月份为3月...而当12月份时,记帐日期又是到12月底。其实这个用易表实现起来非常简单:

我们知道,用Month([日期])可以返回月份,但利用这个函数系统会将每月第一日至最后一日之间的日期返回成月份,与我们想要结果有点差距,那么,就用IF区分一下吧:

if(MONTH([日期])=12 Orday([日期]) <= 25,MONTH([日期]),Month([日期])+1)

把这个公式放入月份列刷新公式中,就能实现我们目的了。

公式意思是:当用Month([日期])可以返回月份是12月或Orday([日期])返回日小于等于25日时,按Month([日期])返回的月份,否则Month([日期])返回的月份加1。



手把手教你使用SendKeys函数
作者:好心情 来源:易表论坛
看到很多网友的提问,其中部分用SendKeys函数解决问题会很方便。可能是帮助文件中的这段话让很多人望而怯步吧:“普通用户可以忽略本函数”。呵呵,其实没有这么复杂,掌握它后会感到非常方便且便于理解。
Sendkeys:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。

语法:
SendKeys (string)
string 指定要发送的按键消息。

SendKeys函数常与易表的内部命令结合使用,下面我就结合实例来讲解一下SendKeys的具体用法。

实例:“重命名表名”

实现过程:大家知道易表重命名表名的内部函数是DO(53),要做到自动重命名就要结合SendKeys函数了。

1、设置2个字符型变量:


%a%:ListGrids() 目的:取得现有表名

%b% 目的:定义新表名

2、设计录入窗口:

插入变量%a%和%b%和自定义按钮,自定义按钮公式为:

if(Instr([%b%],[%a%]) < 0,OpenGrid([%a%]) And S

endKeys([%b%]) And SendKeys("{tab 1}~") And Do(53) And OpenGrid(1),MsgBox([%b%]+"表已经存在,请改正!",0))

要点

1、SendKeys发送键盘命令必须在DO命令之前。
2、要弄清SendKeys具体发送步骤:

首先选取原表名,从列表项目%a%取得,命令是SendKeys([%b%]);现表名手工输入。

关键一步,取得tab键和回车键次数。大家可以先实验一下,点菜单“表”-“重命名”,需要按一次tab键、一次回车键才行,命令是:SendKeys("{tab 1}~")。

这样,完成了自动重命名表名。

其他的与此大同小异,大家可以动手练习一下,希望本教程能给初学者带来帮助。



(感谢YBIL斑竹提醒,修改了一下)

YBIL版主提供2个公式,大家可以试一下:

1、if([%a%]<>[%b%],OpenGrid([%a%]) And SendKeys([%b%]+"{tab 1}~") And Do(53) And OpenGrid(1),MsgBox([%b%]+"表已经存在,请改正!",0))
2、if(Instr("|"+[%b%]+"|","|"+ListGrids() + "|")<0,OpenGrid([%a%]) And SendKeys([%b%]+"{tab 1}~") And Do(53) And OpenGrid(1),MsgBox([%b%]+"表已经存在,请改正!",0))



易表不显示0值三招
作者:ylm 来源:精明在线
 利用易表进行计算时,当计算结果为零时,表格中会显示0,但有时候我们常常不想见到期0,其实用易表实现起来相当简单:
 第一招:暂时清零(以后重新计算时还会出现0)

选择想清除0的单元格或列,打开编辑菜单中-选择清零.

 第二招:永久清零

光标移到想清除0列,打开列菜单-编辑设置,打开选项窗口,在禁止显零复选框中打勾,确定后按F6重算一下.

 第三招,公式清零

光标移到想清除0列,打开列菜单-刷新公式,在公式编辑器上原来公式上加上:

if(原来公式=0,"",原来公式)

例如,在学生成绩管理表中,我们有语文列,数学列,合计列原来公式是:[语文]+[数学]
修改后公式是:if([语文]+[数学]=0,"",[语文]+[数学])

修改完成后,重算一下这一列,搞定!



通用软件在线升级程序

文章来源:易表论坛 作者: wxm163



一些易友问在线升级是不是易表的在线升级,在线升级能做什么,没有网站怎么办,怎么使用等。
在线升级程序是通用升级程序,老六也可把它放在易表里,那样大家都不用卸易表、下载、安装了,对用易表写的易文件也同样。
有时把编好的易文件交给用户使用后,用户会提出一些更改要求和你对易文件进行修改,添加等,这些你都不用到客户处去完成,可通过在线升级方法达到目的。
想在线升级可没有网站,没问题,你可到一些网站上申请免费空间,一般都是20兆空间也有50、100兆的。

 使用说明

 把在线升级.exe、senjinb.ini文件和你编写的易文件放在同一目录。
首先用制作列表程序制作两份列表,一份放在网站里(senjinb-fw.ini

升级列表文件 未加密)、一份和在线升级.exe,易文件放在一起(senjinb.ini 已加密),需要升级的文件放在网站上并和senjinb.ini同一目录。

 制作列表

 如:编好的易文件名称是<<有线电视收费管理系统>>,升级的版本号是:3.5,要升级的文件:1.gif、2.gif、3.gif,都放在易文件wsx目录下;登陆.egd、数据1.egd、数据2.egd放在和有线电视收费管理系统.egd同一目录,升级时要关闭有线电视收费管理系统,升级完后要运行它。这些升级的文件和列表senjinb.ini都放在网站/ghj目录内。

 制作好的网站列表如下:

 有线电视收费管理系统升级程序
升级服务器1=/ghj
服务器名称1=北京服务器 (此名称=右边可随意写)
升级服务器2=/ghj
服务器名称2=上诲服务器 (同上)
升级完成后运行=有线电视收费管理系统.egd
指令:
升级时关闭=egridxp.exe
所有版本:
版本号1=3.5
* * * * * * * * * * *
相应版本的文件数量与文件名称,支持子目录
1_[0]
wsx\1.gif
wsx\2.gif
wsx\3.gif
登陆.egd
数据1.egd
数据2.egd

 和易文件在一起的列表(senjinb.ini)可以这样制作

 有线电视收费管理系统升级程序
升级服务器1=/ghj
服务器名称1=北京服务器 (此名称=右边可随意写)
升级服务器2=/ghj
服务器名称2=上诲服务器 (同上)
升级完成后运行=有线电视收费管理系统.egd
指令:
升级时关闭=egridxp.exe
所有版本:
版本号1=3.4
* * * * * * * * * * *
相应版本的文件数量与文件名称,支持子目录
1_[0]

版本号都是3.5说明客户的版本是最新版

注:如果没有wsx目录系统会创造,下载的文件不完整系统会删除.

 需要在线升级程序的朋友们请直接到下面地址下载,也可以通过QQ和我联系,( QQ:199235421 )目前在线升级版本还不太完善,半个月后将根据论坛中的调查更新,到时再下载更新版.一切费用免单,希望各位多提建议.



多条件筛选设置浅释
作者:ylm 来源:精明在线
我们用易表设置查询窗口,常常变量结合FilterFor在当前表中筛选符合条件的行。虽说可以设置多个比较条 件,每三个参数组成一个比较条件。但筛选出来结果是同时满足多个条件行,而我们常常会一下找多个相互 不相干条件同时查找,有时也常常会查找一个范围.例如:在表中有列编号: A00001 A00002 A00003 A00004 A00005 A..... A99999 上面编号是我们通常单据编号式样(英文字母加数字编号). 比如,我们在做查找时要求同时找到:A00002,A00005,A10003,... 或者记不清详细编号只好找:02,05,305,888,... 有时有几个记起有几个忘了:A00008,305,888,03,... 更有甚者只记得

在几个范围内:A00001-A00010,A10012-A10030,... 这个,用易表也可以解决(有多个方法可以办到),由于新版易表增加了循环执行指定的命令函数---LOOP,解决 起来就变得方便多了,下面我就简单的介绍一下用LOOP解决方法:

我们先做一个表,其中第一列(字符型)写入编号如图1:



完成后在表中增加二列:S(数值型),A(逻辑型)。 【其实列名字你可以小猫小狗随便取,只是要记得在公式中一一对应,不要到时列名自己取,公式按我的粘贴,公式生成器会出现不可设别变量提示哦。这个也同样适合变量取名,到时你别问我为什么变量取名X之类的话。也许你会问:我不会增加列。嘿嘿,别问我,你也别急着看下去了,先去吸几口易表帮助文件奶水再来吧。】 好了正式开始设置公式了,为了让你了解的清楚些,我们一步一步来设置吧。

第一步:先做个单个筛选公式。【灵感之源】

1,设置一个自定义变量。打开文件菜单→文件设置→变量设置,设置一个%N%(字符型)

2,设置查询窗口。 打开窗口菜单→设计录入窗台→建立新窗口。在设计录入窗口工具栏第一行左边第三个方框点点出选项中选中刚才加入变量%N%,在方框右边按扭设置工具上点击插入一个定义按扭并改名为查找,再插入一个自定义扭改名为全部。 双击自定义按扭全部,在跳出公式生成器中写入:ShowAllrows()意思是显示所有行。 同样方法在查找按扭里写入:Replacefor(GridName,"A",-1,"第一列", "Instr" ,[%N%])And FilterFor("A", "=" ,-1) 意思是把当前表中A列替换为-1,条件是第一列值包含有变量%N%,替换好后筛选A列为-1行。

我们去试试看,保存录入窗口并保存文件后,【为什么要保存文件呢,因为有时如果公式设置错了,一试说不定文件出错会自动关闭,这时你如不保存的话就会前功尽弃,记得下次公式修改后保存哦,重大修改的话修改前最好先另存一个备份以防不测】,在窗口菜单中打开刚才设置好录入窗口,在方框中输入A00002点查找。找到了吗? 找到的话,再输入5,先点全部再点查找,是不是找到了包含5的所有数据了呢?【什么,没变化,按上面介绍的方法重新检查一遍看看吧!】

3,试了二次,你会发现,查完后再查找必须先点一下全部按扭,很是不方便,没关系公式改一改吧: ShowAllrows() And Replacefor(GridName,"A",-1,"第一列", "Instr" ,[%N%])And FilterFor("A", "=" ,-1)意思是先显示所有行,再把当前表中A列替换为-1,条件是第一列值包含有变量%N%,替换好后筛选A列为-1行。 单个单个筛选到此已完成任务,【如果你只是做单个筛选,不用这么复杂设置公式,只要FilterFor("第一列", "Instr" ,[%N%])就OK了】

,完成了这一步,接下来我们可以做多个筛选了。

第二步:分解录入的多个条件。【关键一步】

我们要达到的目的是多个条件查找,第一步只是单个条件查找,为了达到多个条件,必须对用户输入多个条件一一分解开了。

 1,增加自定义变量,按上面我讲方法增加自定义变量:%B%(字符型)

 2,在录入窗口设计中把自定义查找按扭公式修改成: ShowAllrows() AndSetVariable("%N%",Split([%B%],",",1))And Replacefor(GridName,"A",-1,"第一列", "Instr" ,[%N%])And FilterFor("A", "=" ,-1)

从上面公式中我们发现多了一条:SetVariable("%N%",Split([%B%],",",1))
这一条意思是:将变量%N%的值设为变量%B%中用“,”分开的第一段。 也就是说,当我们在变量%B%中输入:A00001,A00027,A00105,时,变量%N%变成了第一个豆号点断前面的值:A00001,很显然,只要我们把公式中1改成2,得到的是A00027,改成3得到是A00105...如果我们不停的修改不同的数字会得到用户输入的每一段的值了. 因此,我们只要把SetVariable("%N%",Split([%B%],",",1))
中数字1改成一个变量:[%X%]【按前面第一步方法再加一个数值型变量吧】变成:SetVariable("%N%",Split([%B%],",",[%X%]))
不停的从1,2,3,4修改[%X%]变量,就会把用户输入的每一段的值了一次一次分开了.至此,数据分解完成任务,该我们的主角出场了!有请----



第三步:LOOP出场【成败在此一步】

尽管我们做好前面二步,只要不停改变%X%值,就会得到不同结果,但是要电脑不停改变%X%值,必须得我们的大明星:LOOP出场才能搞定啦.而明星演出停与不停,还要导演说了算---

1,加入变量%O%(数值型),他作用是导演,指挥LOOP工作还是停止.

2,查找按扭公式改为: ShowAllrows() AndReplacefor(GridName,"A",0)And SetVariable("%X%","1")And SetVariable("%O%",Len([%B%])/2) And
Loop("[%O%] > 0","SetVariable(""%N%"",Split([%B%],"","",[%X%])) And IF(Len([%N%])=6,Replacefor(GridName,""A"",-1,""第一列"", ""= "" ,[%N%]), IF([%N%]="""",True,Replacefor(GridName,""A"",-1,""第一列"", ""Instr"" ,[%N%])))And SetVariable(""%O%"",[%O%]-1)And SetVariable(""%X%"",[%X%]+1)")And
FilterFor("A", "=" ,-1)

看了上面公式,看第一眼:晕头转向,我也是。

其实分解一下公式意思,其中大部分第二步已说过了,公式大至意思是: ShowAllrows() AndReplacefor(GridName,""A"",0)And 意思是显示所有行接着当前表中A列替换为0,接着...,And这里是连接上下二个公式的,这里可以理解为:接着(下面意思相同); 这段作用是清除上次可能筛选隐藏行与隐藏行标记. SetVariable("%X%","1") 写入变量X为1, SetVariable("%O%",Len([%B%])/2) 写入变量%O%值为%B%变量字符个数除以2,为什么要这样做呢,变量%O%前面我

们说过了是指挥LOOP工作还是停止的导演,这段公式让变量%O%分析我们输入要查询字符个数,考虑到输入查询字符最少为一个加一个豆号也就是二个字符,因此将(用户输入)%B%变量字符个数除以2作为LOOP最多工作次数。 Loop("[%O%] > 0","SetVariable(""%N%"",Split([%B%],"","",[%X%]))And 当%O%] > 0,
循环执行:写入变量%N%为变量%B%用“,”分开的第一部分值(因为此时%X%值在公式开头时已设为1,当然是第1部分) IF(Len([%N%])=6,Replacefor(GridName,""A"",-1,""第一列"", ""= "" ,[%N%]), 当%N%(也就是我们分解出来的用户输入的用豆号分隔第一个值)字符数等于6时,也就是第一个分解值是完整一个编号(如:A00001 是六个字符吧), 意思连起来是:当%N%是完整一个编号时,把当前表中A列替换为-1,替换条件是第一列值等于变量%N%。 IF([%N%]="""",True,Replacefor(GridName,""A"",-1,""第一列"", ""Instr"" ,[%N%])))And 当%N%为空时,不变,否则把当前表中A列替换为-1,条件是第一列值包含有变量%N%,接着... SetVariable(""%O%"",[%O%]-1)And 写入%O%变量为当前%O%值减1, 这段作用是告诉我们的"导演":LOOP已工作过一次了.接着... SetVariable(""%X%"",[%X%]+1)")And 这一公式就是我在第二步中说的[%X%]变量自动从1改为2改为3...,LOOP每工作一次,加1,以便把用户输 于入的每一段的值了一次一次分开了.Split([%B%],"","",[%X%])返回值也就变成了第一段,第二段,第三 段...... 如此不停循环,每循环一次,找出一个条件并把A 列替换为-1,直到全部条件找出并把A 列替换为-1,同时, 每循环一次,[%O%]减少1,直到减到小于零为止,接着... FilterFor("A", "=" ,-1) 筛选A列为-1行.

说了半天,不知你是否会了,还不会!没关系自己多试试吧.至与范围查找,原理同上面说的一样的,你先试 试,如不行,下次再说吧.





相关文档
最新文档