VB绘制Excel时网格线异常的情况

ZeroEVA 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
...全文
619 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqsntws 2008-05-27
  • 打赏
  • 举报
回复
先清除,再划线应该就没问题了
xinbenzhu 2008-05-22
  • 打赏
  • 举报
回复
www.skyrising.com/soft/cwgllw.rar 财务管理论文+源码+ppt文稿 vb+access
www.skyrising.com/soft/rsgllw.rar 人事管理论文+源码+ppt文稿 vb+access
pen_sky 2008-05-22
  • 打赏
  • 举报
回复
这个问题可以考虑每次画线的时候先清除,再画就OK了.以前我也遇到过类似的问题,当你第二次设置的时候和上次的边框冲突造成的.
cl103832209 2008-05-13
  • 打赏
  • 举报
回复
一看就是不想给分的人,不想说
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
有点难度哦
ZeroEVA 2007-12-03
  • 打赏
  • 举报
回复
应该不是这个问题,因为我单步运行中可以看到Excel中具体的页面被选中了,而且该选定页上的Range也确实选中了,但线画不出来。
Tiger_Zhao 2007-12-03
  • 打赏
  • 举报
回复
比较一下填数据和画边框线时,当前Sheet是否同一个。
怀疑你画边框线操作的对象一直是第一次执行时的Sheet。
ZeroEVA 2007-11-30
  • 打赏
  • 举报
回复
ps:第二次执行的时候,如果有数据,可以正常填入第二个Excel表,区域也可以正确选中,绘制边框的那部分代码也可以通过,但就是边框线画不出来。
ZeroEVA 2007-11-30
  • 打赏
  • 举报
回复
刚才测试了一下,一种方式是首先Workbooks.Open()一个模板,执行绘制边框,运行正常,然后再次执行,再Workbooks.Open()之前设断点并将Workbooks.Open()的模板指向另一个,但这样运行出来的结果还是没有绘出边框;
另一种方式是使用Workbooks.Add(),第一次正常,第二次仍然没有绘出边框。
ZeroEVA 2007-11-30
  • 打赏
  • 举报
回复
第二次打开的时候我手动把开着的Excel关闭了,进程列表里也没有残留的Excel进程了。

关于WorkBooks.Open()的问题我倒没注意,我去测试一下看看。
Tiger_Zhao 2007-11-30
  • 打赏
  • 举报
回复
第二次执行时第一个Excel还打开着吧?

由于你用的是CreateObject方式,两次执行打开的是两个Excel实例;Workbooks.Open()是打开文件进行编辑,一个xlt文件是不能打开两次的的,所有第二次的Open估计已经失败了。
按模板新建文件应该用Workbooks.Add()。
ZeroEVA 2007-11-30
  • 打赏
  • 举报
回复
ps,原贴中所说的“网格线”是指某个区域内的边框线,并非指Excel默认就有的那些格子线。

2,503

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧