如果此时用户任一打开一个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这俩就都关闭了,使得程序出错
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时也是打不开的
至少我的是这样的。
有关,它只是不显示,而不是不运行的,所以在你操作时时会出现这个问题的
而且,还会出现一个问题,就是在你关闭这个程序后,双击这个程序调用的excel时也是打不开的
至少我的是这样的。
#4
设置excel为每个文件启动一个excel进程,除此以外没有别的办法。
#5
visible = true;
不要一打开excel就让它显示,也就是说,不要让用户看到你的数据操作。
等全部写完以后,再让它显示出来。
就不会出现你说的问题了
不要一打开excel就让它显示,也就是说,不要让用户看到你的数据操作。
等全部写完以后,再让它显示出来。
就不会出现你说的问题了
#6
这是excel api的先天不足导致的 不支持对单个文档的隐藏或显示 不论你有多少个隐藏的进程 只要是通过双击文件方式打开xsl都会强制隐藏的文档现身 除非是用户先手动启动excel程序再打开文档
#7
解决的办法也不是没有,给你两个我曾经用过的方案:
1. 隐藏的xls文档不常驻内存 用后关闭 需要时再打开,适用于操作比较少的情况
2. 如果需要不断读写隐藏文档的话 可以试试这样的代码:
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
#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这俩就都关闭了,使得程序出错
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时也是打不开的
至少我的是这样的。
有关,它只是不显示,而不是不运行的,所以在你操作时时会出现这个问题的
而且,还会出现一个问题,就是在你关闭这个程序后,双击这个程序调用的excel时也是打不开的
至少我的是这样的。
#4
设置excel为每个文件启动一个excel进程,除此以外没有别的办法。
#5
visible = true;
不要一打开excel就让它显示,也就是说,不要让用户看到你的数据操作。
等全部写完以后,再让它显示出来。
就不会出现你说的问题了
不要一打开excel就让它显示,也就是说,不要让用户看到你的数据操作。
等全部写完以后,再让它显示出来。
就不会出现你说的问题了
#6
这是excel api的先天不足导致的 不支持对单个文档的隐藏或显示 不论你有多少个隐藏的进程 只要是通过双击文件方式打开xsl都会强制隐藏的文档现身 除非是用户先手动启动excel程序再打开文档
#7
解决的办法也不是没有,给你两个我曾经用过的方案:
1. 隐藏的xls文档不常驻内存 用后关闭 需要时再打开,适用于操作比较少的情况
2. 如果需要不断读写隐藏文档的话 可以试试这样的代码:
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!”