您的位置:程序门 -> vb -> vba



vb绘制excel时网格线异常的情况


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


vb绘制excel时网格线异常的情况
发表于:2007-11-30 11:15:37 楼主
该vb程序大致如下。
我绘制网格线的方法是,通过range.select选中一个区域,然后绘制这个区域的网格线。这段程序第一次运行是正常的,绘制的表格中,网格线都正确,但第二次及以后的运行中,却画不出网格,而且有时会报错误“1004,不能设置类border的linestyle属性”。我查了一下,1004的错误含义是在绘制选定区域内部的交叉线时,发现只有一行或一列,因此不存在交叉,但我这里选中的区域是"a5:d9",是多行多列。
为什么前后两次运行会有这种差异呢?

        '----------------------------------------------------------
        dim   xlappx   as   new   excel.application
        dim   xlbookx   as   new   excel.workbook
       
        set   xlappx   =   createobject("excel.application")
        set   xlbookx   =   xlappx.workbooks.open(app.path   &   "\systemparalist.xlt")
        set   xlbookx   =   xlappx.activeworkbook
        xlappx.application.visible   =   true
       
        dim   xlsheet   as   new   excel.worksheet
        set   xlsheet   =   xlbookx.sheets(2)
        xlsheet.select
       
                xlsheet.range("a5:d9").select
                        selection.borders(xldiagonaldown).linestyle   =   xlnone
                        selection.borders(xldiagonalup).linestyle   =   xlnone
                        with   selection.borders(xledgeleft)
                                .linestyle   =   xlcontinuous
                                .weight   =   xlthick
                                .colorindex   =   xlautomatic
                        end   with
                        with   selection.borders(xledgetop)
                                .linestyle   =   xlcontinuous
                                .weight   =   xlthick
                                .colorindex   =   xlautomatic
                        end   with
                        with   selection.borders(xledgebottom)
                                .linestyle   =   xlcontinuous
                                .weight   =   xlthick
                                .colorindex   =   xlautomatic
                        end   with
                        with   selection.borders(xledgeright)
                                .linestyle   =   xlcontinuous
                                .weight   =   xlthick
                                .colorindex   =   xlautomatic
                        end   with
                        with   selection.borders(xlinsidevertical)
                                .linestyle   =   xlcontinuous
                                .weight   =   xlthin
                                .colorindex   =   xlautomatic
                        end   with
                        with   selection.borders(xlinsidehorizontal)
                                .linestyle   =   xlcontinuous
                                .weight   =   xlthin
                                .colorindex   =   xlautomatic
                        end   with
                '--------- <
       
        set   xlsheet   =   nothing
       
        xlappx.application.visible   =   true
        set   xlbookx   =   nothing
        set   xlappx   =   nothing
发表于:2007-11-30 14:13:381楼 得分:0
ps,原贴中所说的“网格线”是指某个区域内的边框线,并非指excel默认就有的那些格子线。
发表于:2007-11-30 14:59:192楼 得分:0
第二次执行时第一个excel还打开着吧?

由于你用的是createobject方式,两次执行打开的是两个excel实例;workbooks.open()是打开文件进行编辑,一个xlt文件是不能打开两次的的,所有第二次的open估计已经失败了。
按模板新建文件应该用workbooks.add()。
发表于:2007-11-30 15:24:373楼 得分:0
第二次打开的时候我手动把开着的excel关闭了,进程列表里也没有残留的excel进程了。

关于workbooks.open()的问题我倒没注意,我去测试一下看看。
发表于:2007-11-30 15:34:184楼 得分:0
刚才测试了一下,一种方式是首先workbooks.open()一个模板,执行绘制边框,运行正常,然后再次执行,再workbooks.open()之前设断点并将workbooks.open()的模板指向另一个,但这样运行出来的结果还是没有绘出边框;
另一种方式是使用workbooks.add(),第一次正常,第二次仍然没有绘出边框。
发表于:2007-11-30 15:40:365楼 得分:0
ps:第二次执行的时候,如果有数据,可以正常填入第二个excel表,区域也可以正确选中,绘制边框的那部分代码也可以通过,但就是边框线画不出来。
发表于:2007-12-03 08:56:356楼 得分:0
比较一下填数据和画边框线时,当前sheet是否同一个。
怀疑你画边框线操作的对象一直是第一次执行时的sheet。
发表于:2007-12-03 11:06:427楼 得分:0
应该不是这个问题,因为我单步运行中可以看到excel中具体的页面被选中了,而且该选定页上的range也确实选中了,但线画不出来。


快速检索

最新资讯
热门点击