VB中调用了Excel,此时如果用户打开一个Excel文件,出问题

时间:2022-09-29 13:47:12
VB程序中调用了Excel(并不显示出来的),进行数据读取和写入操作,

如果此时用户任一打开一个Excel文件,VB程序调用的Excel会从后台跳出来,

然后用户如果此时关闭Excel,则程序就报错了,因为程序中调用的Excel也被关闭了。


各位高手如何解决啊?

我在VBA发的帖子没人理

http://topic.csdn.net/u/20110304/18/c1d744b3-329e-4048-b445-b4c0213f68b9.html

11 个解决方案

#1


声明的时候加New关键字

#2


Dim xlsApp As New Excel.Application
Dim xlsWorkbooks As New Workbook
Dim xlsWorksheets As New Worksheet
Set xlsWorkbooks = xlsApp.Workbooks.Open(fileName)
Set xlsWorksheets = xlsWorkbooks.Worksheets(1)
xlsApp.DisplayAlerts = False
Screen.MousePointer = vbHourglass

这样不行啊,程序中打开了fileName(excel文件),此时用户打开另一个excel文件,结果这俩都会在屏幕上显示出来了,然后一关闭Excel这俩就都关闭了,使得程序出错

#3


这个和xlsApp.DisplayAlerts = False
有关,它只是不显示,而不是不运行的,所以在你操作时时会出现这个问题的
而且,还会出现一个问题,就是在你关闭这个程序后,双击这个程序调用的excel时也是打不开的
至少我的是这样的。

#4


设置excel为每个文件启动一个excel进程,除此以外没有别的办法。

#5


visible = true;
不要一打开excel就让它显示,也就是说,不要让用户看到你的数据操作。
等全部写完以后,再让它显示出来。
就不会出现你说的问题了

#6


这是excel api的先天不足导致的 不支持对单个文档的隐藏或显示 不论你有多少个隐藏的进程 只要是通过双击文件方式打开xsl都会强制隐藏的文档现身 除非是用户先手动启动excel程序再打开文档

#7


解决的办法也不是没有,给你两个我曾经用过的方案:
1. 隐藏的xls文档不常驻内存 用后关闭 需要时再打开,适用于操作比较少的情况
2. 如果需要不断读写隐藏文档的话 可以试试这样的代码:
Private WithEvents xlApp As Excel.Application
Private xldoc As Excel.Workbook
Private Sub Command1_Click()
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
Set xldoc = xlApp.Workbooks.Open("C:\templog.csv")
End Sub
Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook)
If xldoc Is Nothing Then Exit Sub
xlApp.Workbooks(xldoc.Name).Save
xlApp.Workbooks(xldoc.Name).Close
Set xlApp = Nothing
Set xldoc = Nothing
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
Set xl = xlApp.Workbooks.Open("C:\templog.csv")
End Sub

#8


学习下. 话说 打开的xls 是无法被程序调用的哦. 

#9


最好是从上游控制了,让用户不要有其他操作。

#10


写入操作手册,并且在界面醒目位置进行提示“ 正从Excel导入/导出数据,请勿操作Excel!

#11


该回复于2011-03-09 10:07:40被版主删除

#1


声明的时候加New关键字

#2


Dim xlsApp As New Excel.Application
Dim xlsWorkbooks As New Workbook
Dim xlsWorksheets As New Worksheet
Set xlsWorkbooks = xlsApp.Workbooks.Open(fileName)
Set xlsWorksheets = xlsWorkbooks.Worksheets(1)
xlsApp.DisplayAlerts = False
Screen.MousePointer = vbHourglass

这样不行啊,程序中打开了fileName(excel文件),此时用户打开另一个excel文件,结果这俩都会在屏幕上显示出来了,然后一关闭Excel这俩就都关闭了,使得程序出错

#3


这个和xlsApp.DisplayAlerts = False
有关,它只是不显示,而不是不运行的,所以在你操作时时会出现这个问题的
而且,还会出现一个问题,就是在你关闭这个程序后,双击这个程序调用的excel时也是打不开的
至少我的是这样的。

#4


设置excel为每个文件启动一个excel进程,除此以外没有别的办法。

#5


visible = true;
不要一打开excel就让它显示,也就是说,不要让用户看到你的数据操作。
等全部写完以后,再让它显示出来。
就不会出现你说的问题了

#6


这是excel api的先天不足导致的 不支持对单个文档的隐藏或显示 不论你有多少个隐藏的进程 只要是通过双击文件方式打开xsl都会强制隐藏的文档现身 除非是用户先手动启动excel程序再打开文档

#7


解决的办法也不是没有,给你两个我曾经用过的方案:
1. 隐藏的xls文档不常驻内存 用后关闭 需要时再打开,适用于操作比较少的情况
2. 如果需要不断读写隐藏文档的话 可以试试这样的代码:
Private WithEvents xlApp As Excel.Application
Private xldoc As Excel.Workbook
Private Sub Command1_Click()
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
Set xldoc = xlApp.Workbooks.Open("C:\templog.csv")
End Sub
Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook)
If xldoc Is Nothing Then Exit Sub
xlApp.Workbooks(xldoc.Name).Save
xlApp.Workbooks(xldoc.Name).Close
Set xlApp = Nothing
Set xldoc = Nothing
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
Set xl = xlApp.Workbooks.Open("C:\templog.csv")
End Sub

#8


学习下. 话说 打开的xls 是无法被程序调用的哦. 

#9


最好是从上游控制了,让用户不要有其他操作。

#10


写入操作手册,并且在界面醒目位置进行提示“ 正从Excel导入/导出数据,请勿操作Excel!

#11


该回复于2011-03-09 10:07:40被版主删除