VB新手求助VB操作EXCEL的问题

muyi 2018-10-25 05:07:17
系统配置win10_64系统,VS2017,EXCEL2016
实现简单的excel打开和读取数据的功能:窗口创建两个按钮:一个打开,一个关闭。一个combobox。按打开按钮就打开data.xls这个文件,读取excel文件第二列数据导入combobox1显示,代码如下:

Imports Excel = Microsoft.Office.Interop.Excel

Public Class Form1
Dim xlApp As Excel.Application '定义EXCEL类
Dim xlBook As Excel.Workbook '定义工件簿类
Dim xlsheet As Excel.Worksheet '定义工作表类

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If Dir("D:\DoExcel\data.bz") = "" Then '判断EXCEL是否打开
xlApp = CreateObject("Excel.Application") '创建EXCEL应用类
xlApp.Visible = True '设置EXCEL可见
xlBook = xlApp.Workbooks.Open("d:\DoExcel\data.xls") '打开EXCEL工作簿
xlsheet = xlBook.Worksheets(1) '打开EXCEL工作表
xlsheet.Activate() '激活工作表
xlBook.RunAutoMacros(Excel.XlRunAutoMacro.xlAutoOpen) '运行EXCEL中的启动宏

Dim n As Integer = 1
Dim comboboxstring() As String

Do While CStr(xlsheet.Cells(n + 1, 3).value) <> ""
ReDim Preserve comboboxstring(n - 1)
comboboxstring(n - 1) = xlsheet.Cells(n + 1, 2).value
n = n + 1
Loop
Me.ComboBox1.Items.Clear()
Me.ComboBox1.Items.AddRange(comboboxstring)
Else
Me.ComboBox1.Items.Clear()
MsgBox("EXCEL已打开")
End If

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If Dir("D:\DoExcel\data.bz") <> "" Then '由VB关闭EXCEL
xlBook.RunAutoMacros(Excel.XlRunAutoMacro.xlAutoClose) '执行EXCEL关闭宏
xlBook.Close(True) '关闭EXCEL工作簿
xlApp.Quit() '关闭EXCEL

End If
xlApp = Nothing '释放EXCEL对象
Me.ComboBox1.Items.Clear()
End Sub
End Class


excel里的宏程序:

Sub auto_open()
Open "D:\DoExcel\data.bz" For Output As #1 '写标志文件
Close #1
End Sub
Sub auto_close()
Kill "D:\DoExcel\data.bz" '删除标志文件
End Sub


代码大部分是从网上抄来的。但是运行后不能生成excel.bz的临时文件,所以按关闭按钮也关不了excel文件,出现问题。
网上抄代码时候有一点没做到一致,就是说要加载“Microsoft.office.Interop.Excel 14.0.0.0”的扩展程序集,但是VS2017的项目-添加引用里找不到这个,没有这个调试出错。于是在C盘搜索,在C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c这个文件夹下找到一个dll文件,加载后调试通过,但是点打开按钮时是wps打开的excel文件。
是不是wps打开的造成excel宏没有运行呢?那个Microsoft.office.Interop.Excel 扩展集是否加载的不正确?或者是哪里出了问题?
...全文
326 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
muyi 2018-10-25
  • 打赏
  • 举报
回复
引用 1 楼 舉杯邀明月的回复:
显然,你的系统中先安装MS的Office,然后又安装了金山的WPS Office……


你安装WPS的时候,它也会把“Excel.Application”绑定到它的COM接口上的,
 此时你的系统中在创建“Excel.Application”对象时,实际上会加载WPS的et进程。
而WPS对 VBA的支持不太好,有一些“宏功能”它根本没有实现,因此可能会造成一些不兼容的问题。

并且,WPS“个人版”是不支持宏的,只有它的“专业增强版”才支持。
记得以前安装WPS2013个人版后,即使“卸载”了,它的那些COM组件注册信息都没清理的,
 就比如“Excel.Application对象”,就算卸载WPS了,
 在创建时,它还会去加载它的et.exe,然后当然是“失败”…… 

所以,建议你先卸载WPS,然后用工具清理一下注册表信息,然后再重新安装一下MS Office ……
然后,再来试试你的代码…………
原来如此。但是工作中要用wps啊。有什么办法能解决?
舉杯邀明月 2018-10-25
  • 打赏
  • 举报
回复
显然,你的系统中先安装MS的Office,然后又安装了金山的WPS Office……


你安装WPS的时候,它也会把“Excel.Application”绑定到它的COM接口上的,
 此时你的系统中在创建“Excel.Application”对象时,实际上会加载WPS的et进程。
而WPS对 VBA的支持不太好,有一些“宏功能”它根本没有实现,因此可能会造成一些不兼容的问题。

并且,WPS“个人版”是不支持宏的,只有它的“专业增强版”才支持。
记得以前安装WPS2013个人版后,即使“卸载”了,它的那些COM组件注册信息都没清理的,
 就比如“Excel.Application对象”,就算卸载WPS了,
 在创建时,它还会去加载它的et.exe,然后当然是“失败”…… 

所以,建议你先卸载WPS,然后用工具清理一下注册表信息,然后再重新安装一下MS Office ……
然后,再来试试你的代码…………

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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