还记得咱们在VBA基础知识的几篇文章里,提到的删除操作(Delete)吧。如果你把这个东东也和Add一样使用的话,可能出现的结果不是你想要的。
比如:若想将一个工作表中的第1行至第10行全部删除,应该怎么做?
首先想到的代码可能是:
1 | Sub 删除行() |
可是运行之后,你会发现结果不是自己想要的,因为有些行删除成功了,有些行却没能删除,还在哪里。WHY?
这应该是VBA基础阶段为数不多的“坑”之一,要想完美第避开它,只需牢记一条:删除行,需从下向上删除。原因也相当简单,因为每删一行,下面的行就会上移一行,如果从上向下删除,就会漏掉行。
所以,删除整行的正确打开姿势应该是这样的:
1 | Sub 删除行update() |
怎样?看出来区别了吧。总之,牢记一条:删除行,需从下向上删除。
类似地,进行工作表删除操作的时候也不能野蛮操作,否则程序就会报错。比如:如果要从EXCEL工作簿文件中删除表。
错误代码是:
1 | Sub 删除表格() |
正确的代码是:
1 | Sub 删除表格() |
上面的两段代码,很明显,可以看到,后者和前者的区别就是,后者在代码中多了一个If的判断语句。这是什么意思呢?
原因说出来,大家都知道,就是一个EXCEL文件中至少有一个工作表,不可能把所有的工作表删除,如果你硬要删,那就只能报错了。
前面在VBA学习(EXCEL文件打开之解析篇2)中提到了编程语言中,占据了很重要位置的FOR循环,编程中还有一个东西的作用和for循环不相上下,就是上面代码中提到的If判断语句。
如果说for循环反复无脑地做同一件事情,那么IF语句则稍微智能一些。因为它可以用来判断时候应该做,什么时候不用做,所以IF语句还有个学名:分支。
这样看来,for循环和IF分支可以说是天作之和,完美的一对,互补型伉俪,不遗余力地为编程事业贡献着自己的力量。