楼主 yjzstar |
已知有如下信息: 其中[A2:A5];[A6:B6];[A7:F7]是三个独立的合并单元格区域,先用以下代码完成搜索表中的所有合并单元格,并要求全部选中:
但实际得到的结果却是: 实际是把[A2:F7]全部选中了,而不是原来的三个区域单独选中,可见这并不是我们想要的结果! 那么产生这种情况的原因是什么呢? 首先我们来看rng的值,for语句用rng来遍历已用的单元格区域,即遍历[A1:F7],他的运动方式是自左向右,之上而下的,即一行一行的按照先后顺序读取数据。rng.MergeCells用来判断当前的单元格是否包含合并单元格,如果有包含合并单元格则用Union合并到rng1中。 所以随这个整个FOR循环的执行,rng1的地址变化如下: 最终rng1的地址为:[A2:A7];[B6:B7];[C7:F7],而不是我们想的[A2:A5];[A6:B6];[A7:F7]。 最后对rng1([A2:A7];[B6:B7];[C7:F7])进行select的过程用鼠标模仿选择效果如下: 综上所述是否让你看清了在某些情况下合并单元格、union、select这三个遇到一起时会发生的一切! 对以上代码改进如下,便可以轻轻松松的改变这一切的发生:
这段代码与第一段代码的唯一不同点是union中的项目,前者单纯用的是rng,而后再则用的是rng.MergeArea,即rng所在的合并单元格区域!这样微小的变化彻底的改变了union合并的过程,前者是以单元格为单元写入合并的,而后者则是以单元格所在的区域为单位写入合并的,进而导致了结果的完全不同! 第二段代码解析: 用FOR循环语句让rng指向当前工作表中每个已用的单元格; 用rng.MergeCells判断rng是否包含合并单元格,如果是则返回TRUE,并用union方法将这个rng所在的合并区域合并到rng1中; 最后当rng遍历所有已用单元格之后,如果存在合并单元格,这用select方法进行选中。 代码相对简单,但有时候往往一不留神就得不到我们所要的结果! 销售公司当月销售情况表111.zip |
2楼 bluexuemei |
学习,值得注意! |
3楼 xyf2210 |
不错 |
4楼 wqfzqgk |
查找格式,呵呵 |
5楼 wqfzqgk |
查找格式,呵呵 |