[这个贴子最后由smileboy在 2006/09/09 10:45am 第 1 次编辑]
SetLabel(""," 正在删除表,请稍候...") And Eval("
RemoveGrid("""+Substitute([%A%],"|",""") And RemoveGrid(""")+""")") And SetLabel(""," 删除完毕!")
公式红色部分中“+”和引号,分解说明一下。
解答一:
要了解这种公式,可以先排除那些让你看着摸不着头的引号,这样理解起来就比较容易了。
如这个公式:"RemoveGrid("+Substitute("A|B","|",") And RemoveGrid(")+")"
我们可以把它分解成:字符"RemoveGrid("加公式执行后生成的字符,公式是用Substitute把"|"替换成新的字符,替换后的字符也就是“) And RemoveGrid(”然后再加上“")"”。
经过上面的处理后,生成的结果是:RemoveGrid(A) And RemoveGrid(B),很显然不是我们想要的结果,因为用RemoveGrid删除表,表名是要用引号,所以我们必须要把引号加上。
"RemoveGrid("""+Substitute("A|B","|",""") And RemoveGrid(""")+""")"
执行上述公式后,生成的表达式是:RemoveGrid("A") And RemoveGrid("B"),这样就需要用Eval对指定的表达式进行操作,以达到一次性完成上述表达式的执行操作。
解答二:
“写”Eval函数表达式可以暂且不管引号是否正确,但是“读”Eval函数表达式应当从引号入手。因为当你读别人写的一段表达式时,通常不知道结果,像上面这种猜得出来的简单表达式仅是特例。
Eval函数的特点是,括号中为一个字符串表达式(一般通过加号连接),而这个字符串表达式执行的结果又必须是一段完全符合语法规则的函数或命令组成的表达式。其中的难点主要是引号,即字符串要用引号括起来,而字符串中的引号又必须符合这样一个语法规则:引号中的引号用双引号,双引号中的引号用四引号,依此类推。如果表达式中有嵌套函数或变量,那么复杂程度更高了。因为嵌套函数或变量相关的引号或加号从整体上来说可能不是前面所述意义上表示字符串或连接字符串的一种符号,它们可能就是作为字符串中单纯的引号或加号字符。两种意义上的引号或加号识别,关键是找出配对引号,问题也就迎刃而解了。而找出配对引号的技巧是先找加号,加号往往是表达式分段标志。同时你还得非常熟悉单个函数语法,否则你就不清楚什么位置是字符型要有个引号,还有该函数到哪里才算结束。
说说容易做起来难,肯定有许多人看到这里还是稀里糊涂,这就是功力问题了。Eval、EvalFor及SendKeys都是在引号中写字符串表达式的,三个函数的高级应用堪称高手的三大法宝。
不过,我可以教你一个小窍门:把Eval()中的字符串表达式放到原文件当前表的适当单元格里作为单元格公式执行,多数情况下能得到你想知道的表达式。不信你在楼顶文件中试一下,结果是什么?
结果是:RemoveGrid("Q235B") And RemoveGrid("Q345B") And RemoveGrid("B") And ……
这样你心里有了底,再具体分析就容易多了。
[glow=255,red,2]注:由于论坛文字配色太麻烦,所以,把WORD文件发上来,大家可以下载看看。[/glow]