EXCEL VBA 宏 下标越界问题

Private Sub CommandButton1_Click()
On Error GoTo Err_Handle
ThisWorkbook.Activate
If (Trim(ActiveSheet.Cells(3, 12).Value) = "") Then
MsgBox "【编号】不能为空!"
ActiveSheet.Cells(3, 12).Interior.ColorIndex = 3
Exit Sub
End If
ActiveSheet.Cells(3, 12).Interior.ColorIndex = xlNone

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Dim path As String
path = ActiveWorkbook.path

Set xlApp = New Excel.Application
xlApp.Visible = False

For j = 1 To Workbooks.Count
If Trim(Workbooks(j).Name) = Trim("质量信息汇总表(台账).xlsx") Then
MsgBox "请先关闭【质量信息汇总表(台账).xlsx】,再执行汇总!"
xlApp.Quit
Set xlApp = Nothing
Exit Sub
End If
Next

Set xlBook = xlApp.Workbooks.Open(path & "\质量信息汇总表(台账).xlsx")

If xlBook Is Nothing Then
MsgBox "当前目录下没有【质量信息汇总表(台账)】表,请将汇总表拷贝至当前目录!"
xlBook.Close SaveChanges:=False
xlApp.Quit
Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing
Exit Sub
End If
'更新反馈表中信息
writeLocalInfo

Set xlSheet = xlBook.Sheets(1)
'更新汇总表信息
flag = writeInfo(xlSheet)

'xlApp.DisplayAlerts = False
'xlBook.Save
'xlBook.Close
xlBook.Close SaveChanges:=True

xlApp.Quit
Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing

If flag Then
MsgBox "汇总完成!"
End If
Exit Sub

Err_Handle:
xlApp.Quit
Set xlApp = Nothing
Set xlSheet = Nothing
Set xlBook = Nothing
MsgBox Err.Description
End Sub

一般来说,在引用Workbook或Worksheet时候,直接引用名称比较牢靠,况且有时必须激活Workbook或Worksheet后,才可使用某些属性或方法(并非全部)!否则容易出现如题的错误。追问

那具体怎么改呢 请把代码给出吧 名称的话你先假定一个即可

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-13
一般来讲下标越界是没有找到你要找的东东,如文件名,如该表的表名,某个数组的行列已超标,等等

你也没讲问题出在那句所以也不好讲

习惯查找问题的方式就是利用断点,找到那句出错,查看那里的所有变量名字,或你想要的名字是否实际存在

Set xlApp = New Excel.Application
我没用过,如果它会产生一个新的进程的话,那么你会出现很多麻烦追问

这个表有一个“汇总键”按下它后就会把此张表的数据汇总到“质量信息汇总表(台账)”这张表上 问题是现在一按汇总键 就会提示下标越界

追答

你要在VBE中看那句出错了,
一般的做法时是:ALT+F11>>工具>>选项>>通用>>错误捕捉>>产生错误时中断
设置好后重新运行产生错误的过程
会在出错的那一句上显示黄色(默认时)
再用立即窗口查询各个变量,就可知道越界的是什么地方了

之后再酌情处理相关的问题

本回答被提问者采纳
第2个回答  2011-05-14
最好把表格内容发出来,要不看的有点晕
我认为“Set xlApp = New Excel.Application
xlApp.Visible = False“
在excel宏里面用不着这样增加工作簿。直接Mybook = workbooks.add就行了
第3个回答  2011-05-13
读了好几遍,程序没什么大问题,有个小问题,不知道是否是这个:
----
Dim path As String
path = ActiveWorkbook.path
-----
path 是 系统的关键字,定义变量时,尽量避免使用这些关键字的名字

另外代码中,使用了另一个程序 writeLocalInfo 和 一个自定义函数 writeInfo
-----
'更新反馈表中信息
writeLocalInfo
Set xlSheet = xlBook.Sheets(1)
'更新汇总表信息
flag = writeInfo(xlSheet)
----
有可能是在 writeLocalInfo程序 和 writeInfo自定义函数 中的错误

vba在excel中的应用中,下标越界怎么回事
下标越界错误大概有以下的原因和解决方法:1.引用了不存在的数组元素。2.下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查数组的声明以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。

为什么在excel中用vba时会出现下标越界的提示?
简单的理解:下标越界就是引用超出了所在的范围。当我们在excel的VBA中输入下面代码,运行,就会出现“运行时错误9下标越界”的提示。代码如下:Sub a()Dim arr() As String arr(1) = "你好"End Sub 其实上面的“运行时错误9下标越界”是因为定义的动态数组没有确定维数和尺寸。定义成固定维数和尺寸...

Excel VBA下标越界的原因分析与解决方法
下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查数组的声明以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。声明数组时没有指定元素的数目。引用了不存在的集合成员。 试着使用 For...

Excel 下标越界了,什么原因
当在Excel中尝试使用宏处理按钮时,遇到了下标越界问题。起初,用户在SHEET表中设置了按钮,期望它指向预设的宏操作。然而,当在VBA编辑器中编写代码,试图遍历区域并隐藏空格所在的整列时,程序运行时出现了错误提示,原因在于代码中引用的工作表标签名"Sheet1"与实际的标签"图表"不符。具体来说,代码试...

如何让VBA代码在excel工作表下标越界?
1、在SHEET表内设置好按钮,并指定到宏。2、在VBA编辑器内输入如下的代码。(此代码的含义为遍布区域内的单元格,如果为空格,则隐藏空格所在的整列。3、在运行过程中出现了问题,下标越界,无法运行。4、在代码中的“SHEET1”工作表根本没有,因为SHEET表的标签名称为“图表”,因此代码运行时找不到...

excel的宏vba编程把工作薄作为新工作表文件重新保存,老是提示我下标越界...
Excel提示下标越界是VBA程序运行的一个错误提示,原因有以下几个:1、引用了不存在的数组元素:下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。2、声明数组时没有指定元素的数目:引用了不存在的集合成员。3、使用速写形式的下标,结果指定了错误的元素。4、引用或操作的工作薄、...

Excel 下标越界求助
Excel提示下标越界是VBA程序运行的一个错误提示,原因有以下几个:1、引用了不存在的数组元素:下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。2、声明数组时没有指定元素的数目:引用了不存在的集合成员。3、使用速写形式的下标,结果指定了错误的元素。4、引用或操作的工作薄、...

EXCEL VBA 宏 下标越界问题
一般来说,在引用Workbook或Worksheet时候,直接引用名称比较牢靠,况且有时必须激活Workbook或Worksheet后,才可使用某些属性或方法(并非全部)!否则容易出现如题的错误。

excel VBA 下标越界了 怎么改呢
亲,这是我第三遍回答这个问题了。您到底是要“随机”,还是要罗列全部的“组合”?这是两个不同的要求。下面是罗列全部组合的代码。Sub test()Dim ar(), br(), cr()Dim i, j, k As Longar = Array("Shell", "Case", "Cover", "Backcover", "Back Cover", "housing", "Skin", "...

EXCEL VBA 下标越界如何解决?
下标越界主要是括号里面的东西不存在,例如:wb.Worksheets(Worksheets1).Range("C2").Copy 这个语句会导致下标越界,因为Worksheets1变量没有正确赋值,正确的写法是:wb.Worksheets(1).Range("C2").Copy 表示第一个工作表的C2复制,或者这样写:wb.Worksheets("sheet1").Range("C2").Copy 表示名字...

相似回答