VB打开一个文件夹下所有的excel并且对其进行读取操作

VB打开一个文件夹下所有的excel并且对其进行读取操作,自己实现了一部分代码,可是总是提示出错。自己通过监视发现,如果用dowhile语句,打开excel的时候其文件名... VB打开一个文件夹下所有的excel并且对其进行读取操作,自己实现了一部分代码,可是总是提示出错。自己通过监视发现,如果用do while 语句,打开excel的时候其文件名数组为空的了。如果用for循环的话,总是报 实时错误9 超出下标,通过监视也找不到问题所在。
代码如下,希望高手朋友帮忙看看,解答一下
窗体上有drivelistbox控件、dirlistbox控件、filelistbox控件、text控件和一个command空间
Private Sub command1_Click()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim i As Integer
Dim strfilenames As String

Text1.Text = ""
File1.Path = Dir1.List(Dir1.ListIndex) '指定一个文件夹
File1.Pattern = "*.xls" '指定文件类型

Call Co_CloseExcel '这是一个结束进程中的excel.exe的函数

Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象
ReDim str(File1.ListCount)
For i = 0 To File1.ListCount - 1
str(i) = File1.List(i)
Next i

Do
strfilenames = File1.Path & "\" & str(i) ’这里出错了
Set xlBook = xlApp.Workbooks.Open(strfilenames) '打开已经存在的EXCEL工件簿文件
xlApp.Visible = False '设置EXCEL对象不可见
Set xlSheet = xlBook.Worksheets("sheet1") '设置活动工作表
xlSheet.Activate '激活工作表

'这里是我准备对打开的excel操作的代码

Text1.Text = Text1.Text & str(i) & "操作成功" & Chr(13) + Chr(10)
xlBook.Close (True) '关闭工作簿
Loop While str(i) = ""
xlApp.Quit '结束EXCEL对象
Set xlApp = Nothing '释放xlApp对象
Call Co_CloseExcel
MsgBox "处理完毕"
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
展开
 我来答
嗯那就好
推荐于2016-03-10 · TA获得超过551个赞
知道小有建树答主
回答量:510
采纳率:81%
帮助的人:249万
展开全部
进入Do时的i值已到了File1.ListCount,这时的str(i)并没有被赋值,当然会在strfilenames = File1.Path & "\" & str(i) ’这里出错了!!!

解决如下:

Do 循环可以并入到前一个For循环中

For i = 0 To File1.ListCount - 1
' str(i) = File1.List(i)
'Do '这里不需要了
strfilenames = File1.Path & "\" & File1.List(i) ’这里不需要数组str()了
Set xlBook = xlApp.Workbooks.Open(strfilenames) '打开已经存在的EXCEL工件簿文件
xlApp.Visible = False '设置EXCEL对象不可见
Set xlSheet = xlBook.Worksheets("sheet1") '设置活动工作表
xlSheet.Activate '激活工作表

'这里是我准备对打开的excel操作的代码

Text1.Text = Text1.Text & File1.List(i) & "操作成功" & Chr(13) + Chr(10)
xlBook.Close (True) '关闭工作簿
'Loop While str(i) = "" '这个也不需要了

Next i
风花月阳
2010-05-10 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:108
采纳率:0%
帮助的人:88.5万
展开全部
在这里加一句
For i = 0 To File1.ListCount - 1
if i=file1.listcount-1 then exit for '在这里加一句
str(i) = File1.List(i)

strfilenames = File1.Path & "\" & str(i) ’这里出错了
Set xlBook = xlApp.Workbooks.Open(strfilenames)
'打开已经存在的EXCEL工件簿文件
xlApp.Visible = False '设置EXCEL对象不可见
Set xlSheet = xlBook.Worksheets("sheet1") '设置活动工作表
xlSheet.Activate '激活工作表

'这里是我准备对打开的excel操作的代码

Text1.Text = Text1.Text & str(i) & "操作成功" & Chr(13) + Chr(10)
xlBook.Close (True) '关闭工作簿
Next i

(别忘了采纳哟)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2010-05-09 · TA获得超过8613个赞
知道大有可为答主
回答量:3242
采纳率:66%
帮助的人:2862万
展开全部
do循环中没有对 i 赋值、增值
--------------------
Do
strfilenames = File1.Path & "\" & str(i) ’这里出错了
Set xlBook = xlApp.Workbooks.Open(strfilenames) '打开已经存在的EXCEL工件簿文件
xlApp.Visible = False '设置EXCEL对象不可见
Set xlSheet = xlBook.Worksheets("sheet1") '设置活动工作表
xlSheet.Activate '激活工作表

'这里是我准备对打开的excel操作的代码

Text1.Text = Text1.Text & str(i) & "操作成功" & Chr(13) + Chr(10)
xlBook.Close (True) '关闭工作簿
Loop While str(i) = ""
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ljl88900
2010-05-10 · TA获得超过2661个赞
知道大有可为答主
回答量:2197
采纳率:100%
帮助的人:2633万
展开全部
'错误原因:Str是VB关键字,你把它当成了数组名称

'修改如下:
Private Sub command1_Click()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim i As Integer
Dim strfilenames As String
Dim mStr() As String
Text1.Text = ""
File1.Path = Dir1.List(Dir1.ListIndex) '指定一个文件夹
File1.Pattern = "*.xls" '指定文件类型

Call Co_CloseExcel '这是一个结束进程中的excel.exe的函数

Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象
ReDim mStr(File1.ListCount)
For i = 0 To File1.ListCount - 1
mStr(i) = File1.List(i)
Next i

Do
strfilenames = File1.Path & "\" & mStr(i) '这里出错了
Set xlBook = xlApp.Workbooks.Open(strfilenames) '打开已经存在的EXCEL工件簿文件
xlApp.Visible = False '设置EXCEL对象不可见
Set xlSheet = xlBook.Worksheets("sheet1") '设置活动工作表
xlSheet.Activate '激活工作表

'这里是我准备对打开的excel操作的代码

Text1.Text = Text1.Text & mStr(i) & "操作成功" & Chr(13) + Chr(10)
xlBook.Close (True) '关闭工作簿
Loop While mStr(i) = ""
xlApp.Quit '结束EXCEL对象
Set xlApp = Nothing '释放xlApp对象
Call Co_CloseExcel
MsgBox "处理完毕"
End Sub

Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
府家焮73
2010-05-09
知道答主
回答量:27
采纳率:0%
帮助的人:0
展开全部
重装系统吧,我以前也是这个毛病。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式