用vb操作excel生成指定表格数据并且加线框,第一次有线框,第二次就没了呢

DQYDXT 2018-01-22 10:45:46
小弟初学vb,用来出计算书,通过vb打开excel,并且在excel中生成数据表格,并且给表格加内边框和外边框,为什么首次运行都可以成功,但是第二次再运行(不退出程序,回到上一界面,再点击生成excel的command按钮),就没有边框了,但是把程序整个都退出,再重新运行,就能出现边框了,到底是什么原因呢,求助各位大神!
Private Sub Command1_Click()
' 建立对象并打开 Excel
On Error Resume Next
Set MyExcel = GetObject("Excel.Application")
Set MyExcel = CreateObject("Excel.Application")
Set MyBook = MyExcel.Workbooks.Add
Set MySheet = MyBook.Worksheets("sheet1")
MySheet.Name = "走台角度统计表"
MyExcel.Visible = True
'写入excel文件
MySheet.Activate
Dim i As Integer

For i = 0 To slj - 1
MySheet.Cells(i + 4, 2) = CS1(i) & "#"
MySheet.Cells(i + 4, 2).HorizontalAlignment = xlCenter
MySheet.Cells(i + 4, 3).HorizontalAlignment = xlCenter
MySheet.Cells(i + 4, 3) = CS2(i)
If CS2(i) <> 0 Then
MySheet.Cells(i + 4, 3).Interior.ColorIndex = 20
End If
MySheet.Cells(i + 4, 4) = Format(CS3L(i), "0.00")
MySheet.Cells(i + 4, 5) = Format(CS3R(i), "0.00")
MySheet.Cells(i + 4, 6) = Format(CS4L(i), "0.00")
MySheet.Cells(i + 4, 7) = Format(CS4R(i), "0.00")
MySheet.Cells(i + 4, 8) = Format(CS5L(i), "0.00")
MySheet.Cells(i + 4, 9) = Format(CS5R(i), "0.00")
MySheet.Cells(i + 4, 10) = Format(CS6L(i), "0.00")
MySheet.Cells(i + 4, 11) = Format(CS6R(i), "0.00")
MySheet.Cells(i + 4, 12) = Format(CS7L(i), "0.00")
MySheet.Cells(i + 4, 13) = Format(CS7R(i), "0.00")
Next i
MySheet.Cells(2, 2) = "支架号"
MySheet.Cells(2, 2).Font.Bold = True
MySheet.Cells(2, 3) = "支架倾角"
MySheet.Cells(2, 3).Font.Bold = True
MySheet.Cells(2, 4) = "绳倾角"
MySheet.Cells(2, 4).Font.Bold = True
MySheet.Cells(3, 4) = "左"
MySheet.Cells(3, 5) = "右"
MySheet.Cells(2, 6) = "走台角度"
MySheet.Cells(2, 6).Font.Bold = True
MySheet.Cells(3, 6) = "前"
MySheet.Cells(3, 7) = "后"
MySheet.Cells(2, 8) = "走台梁角度"
MySheet.Cells(2, 8).Font.Bold = True
MySheet.Cells(3, 8) = "前"
MySheet.Cells(3, 9) = "后"
MySheet.Cells(2, 10) = "踏板角度"
MySheet.Cells(2, 10).Font.Bold = True
MySheet.Cells(3, 10) = "前"
MySheet.Cells(3, 11) = "后"
MySheet.Cells(2, 12) = "走台栏杆角度"
MySheet.Cells(2, 12).Font.Bold = True
MySheet.Cells(3, 12) = "前"
MySheet.Cells(3, 13) = "后"
MySheet.Range("B2:B3").Merge
MySheet.Range("C2:C3").Merge
MySheet.Range("D2:E2").Merge
MySheet.Range("F2:G2").Merge
MySheet.Range("H2:I2").Merge
MySheet.Range("J2:K2").Merge
MySheet.Range("L2:M2").Merge
MySheet.Range("B2:M2").HorizontalAlignment = xlCenter
MySheet.Range("B3:M3").HorizontalAlignment = xlCenter
MyExcel.ActiveWindow.Zoom = True
MyExcel.ActiveWindow.Zoom = 130
With MySheet.Range(Cells(2, 2), Cells(slj + 3, 13)).Borders
.LineStyle = 1
.Weight = 2
End With
'加粗外框线
MySheet.Range(Cells(2, 2), Cells(slj + 3, 13)).Borders(xlEdgeBottom).Weight = xlMedium
MySheet.Range(Cells(2, 2), Cells(slj + 3, 13)).Borders(xlEdgeLeft).Weight = xlMedium
MySheet.Range(Cells(2, 2), Cells(slj + 3, 13)).Borders(xlEdgeRight).Weight = xlMedium
MySheet.Range(Cells(2, 2), Cells(slj + 3, 13)).Borders(xlEdgeTop).Weight = xlMedium

MySheet.Cells(1, 2) = "支架走台角度统计表 " & riqi
With MySheet.Range("B1").Characters(Start:=1, Length:=9).Font
.Name = "隶书"
.Size = 16
End With
With MySheet.Range("B1").Characters(Start:=InStr(Cells(1, 2).Text, "2"), Length:=Len(Cells(1, 2).Text)).Font
.Name = "隶书"
.Size = 11
End With
MySheet.Range("B1:M1").Merge
MySheet.Range("B1:M1").HorizontalAlignment = xlCenter
End Sub

首次运行excel图:
再次点击生成excel按钮图:
求助各位大神!
积分不多,谢谢大家!
...全文
1286 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-01-23
  • 打赏
  • 举报
回复
注释掉所有On Error Resume Next语句,在VB IDE中运行, 出错后点击调试,光标会停在出错的那条语句处, 或者 事先在怀疑可能有逻辑错误的语句处设置断点,运行经过断点时中断, 此时可以在立即窗口中使用 ?变量名 或 ?函数名(函数参数) 或 过程名(参数) 辅助调试。
  • 打赏
  • 举报
回复
引用 11 楼 DQYDXT 的回复:
[quote=引用 8 楼 Chen8013 的回复:] 刚才发现你的“表格线”问题的根本原因了: 你主贴代码中,从“第68行”开始的,所有写成“Cells(xx , xxx)”的有很多处,   要全部在前面添加 MySheet. 更正成“MySheet.Cells(xx , xxx)”这种形式!   注意,要全部更正!!! 然后,主贴代码的第3行、第4行,这两行直接删除就行了,不需要它了……
成功了!!!!太谢谢您了,哈哈,那这到底是什么原因呢,感谢大神![/quote] 手头没有vb不能调试,因此给你推测的原因,首先是你的 On Error Resume Next 这一句,这句语句使得vb即使运行错误也继续运行,因此会出现对象、方法等发生错误的时候并没有截获错误,导致一些语句出现错误后并没有作用到结果但是继续执行之后的语句。 然后应该是你的划线部分语句出现错误,具体的错误原因按照你修改的结果来看是你没有加上对象名直接使用子对象导致的找不到对象。(推测,未验证,自己验证
舉杯邀明月 2018-01-22
  • 打赏
  • 举报
回复
给你说了“根源”,还不知道原因? 就是“要明确指定被操作对象”啊!!! 在程序代码中使用“默认”,包括默认引用关系(当然,“唯一、确定”的引用除外)、默认属性等,我认为这是“不良习惯”! 尤其是对水平不高的人,就会是这样的后果: 连“怎么死的”都不知道…………
DQYDXT 2018-01-22
  • 打赏
  • 举报
回复
引用 8 楼 Chen8013 的回复:
刚才发现你的“表格线”问题的根本原因了: 你主贴代码中,从“第68行”开始的,所有写成“Cells(xx , xxx)”的有很多处,   要全部在前面添加 MySheet. 更正成“MySheet.Cells(xx , xxx)”这种形式!   注意,要全部更正!!! 然后,主贴代码的第3行、第4行,这两行直接删除就行了,不需要它了……
成功了!!!!太谢谢您了,哈哈,那这到底是什么原因呢,感谢大神!
舉杯邀明月 2018-01-22
  • 打赏
  • 举报
回复
引用 9 楼 DQYDXT 的回复:
[quote=引用 6 楼 Chen8013 的回复:] 试试这样改吧:
' 建立对象并打开 Excel
On Error Resume Next
Set MyExcel = GetObject(, "Excel.Application")
If (MyExcel Is Nothing) Then
   Set MyExcel = CreateObject("Excel.Application")
End If
Set MyBook = MyExcel.Workbooks.Add
'  . . . . . .
'  后面其它代码不变…………
谢谢您的回答,按您的方法试了试,可以运行,但是一开始excel表格就没有内外边框了,无论怎样也出现不了[/quote] 8楼说的才是问题根源,你更正了吗! 并且,我这儿按6楼的方法,点了几次“Command1”,全部有表格线的。
DQYDXT 2018-01-22
  • 打赏
  • 举报
回复
引用 6 楼 Chen8013 的回复:
试试这样改吧:
' 建立对象并打开 Excel
On Error Resume Next
Set MyExcel = GetObject(, "Excel.Application")
If (MyExcel Is Nothing) Then
   Set MyExcel = CreateObject("Excel.Application")
End If
Set MyBook = MyExcel.Workbooks.Add
'  . . . . . .
'  后面其它代码不变…………
谢谢您的回答,按您的方法试了试,可以运行,但是一开始excel表格就没有内外边框了,无论怎样也出现不了
舉杯邀明月 2018-01-22
  • 打赏
  • 举报
回复
刚才发现你的“表格线”问题的根本原因了: 你主贴代码中,从“第68行”开始的,所有写成“Cells(xx , xxx)”的有很多处,   要全部在前面添加 MySheet. 更正成“MySheet.Cells(xx , xxx)”这种形式!   注意,要全部更正!!! 然后,主贴代码的第3行、第4行,这两行直接删除就行了,不需要它了……
舉杯邀明月 2018-01-22
  • 打赏
  • 举报
回复
楼主注意:你之前的代码, GetObject( ) 语句的参数是写错了的! 这个函数,第二个参数才是“类名”。
舉杯邀明月 2018-01-22
  • 打赏
  • 举报
回复
试试这样改吧:
' 建立对象并打开 Excel
On Error Resume Next
Set MyExcel = GetObject(, "Excel.Application")
If (MyExcel Is Nothing) Then
   Set MyExcel = CreateObject("Excel.Application")
End If
Set MyBook = MyExcel.Workbooks.Add
'  . . . . . .
'  后面其它代码不变…………
DQYDXT 2018-01-22
  • 打赏
  • 举报
回复
引用 3 楼 xomix 的回复:
[quote=引用 2 楼 DQYDXT 的回复:]
[quote=引用 1 楼 xomix 的回复:]
On Error Resume Next

调试中请关闭自动下一句代码,看看问题究竟出在哪里。

谢谢您的回复,照您说的试了试
为什么我把On Error Resume Next删掉后会出现实时错误 '-214702470 (8007007e)':自动化错误呢?[/quote]
调试模式错误在哪里了?能截图一下错误的出现位置吗?[/quote]
错误位置:
  • 打赏
  • 举报
回复
Set MyExcel = GetObject("Excel.Application") Set MyExcel = CreateObject("Excel.Application") Set MyBook = MyExcel.Workbooks.Add Set MySheet = MyBook.Worksheets("sheet1") 这一段代码可以移动出方法吗?这是定义excel对象的,如果移动出去不方便,可以将这些 对象 的定义代码写在这之前吗?
  • 打赏
  • 举报
回复
引用 2 楼 DQYDXT 的回复:
[quote=引用 1 楼 xomix 的回复:] On Error Resume Next 调试中请关闭自动下一句代码,看看问题究竟出在哪里。
谢谢您的回复,照您说的试了试 为什么我把On Error Resume Next删掉后会出现实时错误 '-214702470 (8007007e)':自动化错误呢?[/quote] 调试模式错误在哪里了?能截图一下错误的出现位置吗?
DQYDXT 2018-01-22
  • 打赏
  • 举报
回复
引用 1 楼 xomix 的回复:
On Error Resume Next 调试中请关闭自动下一句代码,看看问题究竟出在哪里。
谢谢您的回复,照您说的试了试 为什么我把On Error Resume Next删掉后会出现实时错误 '-214702470 (8007007e)':自动化错误呢?
  • 打赏
  • 举报
回复
On Error Resume Next 调试中请关闭自动下一句代码,看看问题究竟出在哪里。
舉杯邀明月 2018-01-22
  • 打赏
  • 举报
回复
引用 14 楼 DQYDXT 的回复:
[quote=引用 13 楼 Chen8013 的回复:] 给你说了“根源”,还不知道原因? 就是“要明确指定被操作对象”啊!!! 在程序代码中使用“默认”,包括默认引用关系(当然,“唯一、确定”的引用除外)、默认属性等,我认为这是“不良习惯”! 尤其是对水平不高的人,就会是这样的后果: 连“怎么死的”都不知道…………
哈哈,您说的对,我的专业并非软件专业,我是学土木的,自学的vb,为了工作中做一些案例计算,出计算书,在学习的过程中,确实发现不是专业学习软件开发或者计算机专业的人,没有经过系统性的基础学习,确实很多地方容易概念不清,犯一些很基础的错误,谢谢您[/quote] 其实我不是“软件专业”的啊,是学机械的。  我的VB/VBA也完全是靠“自学”的、并且当时还无法与别人讨论、资料也少得可怜呢………… 刚才想到一个问题,你在9楼说“一开始excel表格就没有内外边框了”,   估计你的代码,GetObject( )那一句,你并没有按我写的进行更正,只是添加了If语句那一层吧。
DQYDXT 2018-01-22
  • 打赏
  • 举报
回复
引用 13 楼 Chen8013 的回复:
给你说了“根源”,还不知道原因? 就是“要明确指定被操作对象”啊!!! 在程序代码中使用“默认”,包括默认引用关系(当然,“唯一、确定”的引用除外)、默认属性等,我认为这是“不良习惯”! 尤其是对水平不高的人,就会是这样的后果: 连“怎么死的”都不知道…………
哈哈,您说的对,我的专业并非软件专业,我是学土木的,自学的vb,为了工作中做一些案例计算,出计算书,在学习的过程中,确实发现不是专业学习软件开发或者计算机专业的人,没有经过系统性的基础学习,确实很多地方容易概念不清,犯一些很基础的错误,谢谢您

2,462

社区成员

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

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