最近用到VB调用EXCEL创建图表,编写程序的过程中遇到一些问题,通过不断的总结终于解决问题。尤其是利用VB打开EXCEL后不能正常关闭有了一定的认识,现在和各位有需求的朋友分享一下自己小小的经验。
不能正常关闭EXCEL大致有两点,一是打开EXCEL文件后没有释放EXCEL所占用的资源;二是程序中调用EXCEL或读写EXCEL时程序有错;以上两点比较常见,其他的原因目前还没有遇见,也就不多发表意见了。
正常释放EXCEL资源的语句顺序见示例最后一段程序,我调试过可以正常退出EXCEL。
通常不能退出EXCEL的问题中,提示的错误信息大多为实时错误 "1004 " 对象'Sheets'的方法 '_global'
失败。
通常情况下,我们可以通过录制EXCEL宏来实现代码的翻译,但此时要相当小心,在将宏程序移植到自己的程序时一定要注意,那就是在录制的程序的语句前加上EXCEL的类声明,如ActiveChart.ChartType = xlColumnClustered为生成的语句,在调用时一定更新为xlApp.ActiveChart.ChartType = xlColumnClustered,这样可以保证每次成功退出EXCEL。
还有就是RANGE功能,使用不当也经常引起不能正常退出EXCEL,在利用其选取多个单元格时,其写法应足够小心。如 xlApp.ActiveChart.SetSourceData Source:=xlApp.Sheets("Sheet1").Range("A1:G1"), PlotBy:= _
xlRows,若不加xlApp,会导致第一次可以正常退出,第二次出现异常不能正常退出EXCEL。另外一种写法,如xlApp.Sheets("Sheet1").Range(cells(1,1),cells(20,20)),在这条语句运行后第一次正常,第二次就会引起异常,正确的写法应为xlApp.Sheets("Sheet1").Range(Sheets.cells(1,1),Sheets.cells(20,20)), 按照以上的说明基本上可以正常调用EXCEL文件。
Dim xlApp As Excel.Application '定义EXCEL类
Dim xlBook As Excel.Workbook '定义工件簿类
Dim xlsheet As Excel.Worksheet '定义工作表类
Private Sub Command1_Click()
Dim xlBook As Object
Dim xlsheet As Object
Dim i, j As Integer
Dim Filename As String
CommonDialog.Filter = "All Files|*.*|(*.exe)|*.exe|(*.xls)|*.xls|(*.txt)|*.txt"
CommonDialog.ShowSave
Filename = CommonDialog.Filename
Set xlApp = CreateObject("Excel.Application") '创建EXCEL应用类
Set xlBook = xlApp.Workbooks.Add
xlApp.Visible = True '设置EXCEL可见
Set xlsheet = xlBook.Sheets(1)
xlApp.Range("A1").Value = "11"
xlApp.Range("B1").Value = "22"
xlApp.Range("C1").Value = "33"
xlApp.Range("D1").Value = "33"
xlApp.Range("E1").Value = "44"
xlApp.Range("F1").Value = "55"
xlApp.Range("G1").Value = "44"
xlApp.Charts.Add
xlApp.ActiveChart.ChartType = xlColumnClustered
xlApp.ActiveChart.SetSourceData Source:=xlApp.Sheets("Sheet1").Range("A1:G1"), PlotBy:= _
xlRows
xlApp.ActiveChart.Location Where:=xlLocationAsNewSheet
With xlApp.ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "数据统计图表"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "时间间隔"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "同步次数"
End With
With xlApp.ActiveChart.Axes(xlCategory)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
With xlApp.ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
xlApp.ActiveChart.HasLegend = False
xlApp.ActiveWindow.Visible = True
xlApp.Charts.Add
xlApp.ActiveChart.ChartType = xlColumnClustered
xlApp.ActiveChart.SetSourceData Source:=xlApp.Sheets("Sheet1").Range("A1:J1"), PlotBy:= _
xlRows
xlApp.ActiveChart.Location Where:=xlLocationAsNewSheet
With xlApp.ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
xlApp.Charts.Add
xlApp.ActiveChart.ChartType = xlColumnClustered
xlApp.ActiveChart.SetSourceData Source:=xlApp.Sheets("Sheet1").Range("A1:K1"), PlotBy:= _
xlRows
xlApp.ActiveChart.Location Where:=xlLocationAsNewSheet
With xlApp.ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
xlApp.Charts.Add
xlApp.ActiveChart.ChartType = xlColumnClustered
xlApp.ActiveChart.SetSourceData Source:=xlApp.Sheets("Sheet1").Range("A1:M1"), PlotBy:= _
xlRows
xlApp.ActiveChart.Location Where:=xlLocationAsNewSheet
With xlApp.ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
xlBook.SaveAs Filename '保存工作薄 正确退出EXCEL
Set xlshee = Nothing
xlBook.Close '关闭EXCEL工作簿
Set xlBook = Nothing
xlApp.Quit '关闭EXCEL
Set xlApp = Nothing '释放EXCEL对象
End Sub
联系客服