Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 2007 vba宏:错误9下标超出范围_Vba_Excel - Fatal编程技术网

Excel 2007 vba宏:错误9下标超出范围

Excel 2007 vba宏:错误9下标超出范围,vba,excel,Vba,Excel,我有一个@Jon49为我编写的代码,我根据自己的目的进行了修改: 这段代码的问题是,它适用于我的一些文件,但在其他文件上产生的错误下标9超出范围。本质上,我有一个循环,打开文件夹中的每个文件,然后执行折叠代码。保存它,然后在打开另一个之前关闭它。所有文件的格式都相同。那么是什么导致了错误呢 当错误发生并且我调试它时,它倾向于在此处显示原因: sData(j, 7) = vData(1, j + 10) sData(j, 8) = vData(i, j + 10) sData(j, 9) = vD

我有一个@Jon49为我编写的代码,我根据自己的目的进行了修改: 这段代码的问题是,它适用于我的一些文件,但在其他文件上产生的错误下标9超出范围。本质上,我有一个循环,打开文件夹中的每个文件,然后执行折叠代码。保存它,然后在打开另一个之前关闭它。所有文件的格式都相同。那么是什么导致了错误呢

当错误发生并且我调试它时,它倾向于在此处显示原因:

sData(j, 7) = vData(1, j + 10)
sData(j, 8) = vData(i, j + 10)
sData(j, 9) = vData(3, j + 10)
sData(j, 10) = vData(2, j + 10)
滚动至底部,查看我认为是什么导致了错误

代码如下:

Range("k1").Select
Dim Parameters As String
Parameters = Range(ActiveCell.End(xlToRight).Offset(0, 0), ActiveCell).Count
Dim i As Long, j As Long, k As Long
Dim rData As Range
Dim sData() As String, sName As String
Dim wks As Worksheet
Dim vData As Variant
Application.EnableEvents = False     'Initialize worksheets
Set wks = ActiveSheet      'Get data
Set rData = wks.UsedRange
vData = rData
ReDim sData(1 To Parameters, 1 To rData.Columns.Count - 10)
rData.Offset(1).Clear
rData.Offset(11).Resize(1).Clear 

您正在尝试访问sData或vData数组中不存在的值。其中一个或两个的“行”或“列”比您想象的要少。尝试添加:

Msgbox "sData: #rows=" & ubound(sData,1) & "   #cols=" & _
        ubound(sData,2) & vbcrlf & 
       "vData #rows=" & ubound(vData,1) &  "   #cols=" & ubound(vData,2)
紧接着

ReDim sData(1 To Parameters, 1 To rData.Columns.Count - 10)

看看你得到了什么价值。

嘿,蒂姆。我把代码放在**********sData(j,7)=vData(1,j+10)sData(j,8)=vData(i,j+10)sData(j,9)=vData(3,j+10)sData(j,10)=vData(2,j+10)部分之后,当它出现错误时,我调试没有发生任何信号。你能告诉我应该把代码放在哪里吗?把它放在:ReDim sData(1到Parameters,1到rData.Columns.Count-10)之后。你应该在VB编辑器的即时窗格中看到输出(如果尚未打开,则按Ctrl+G显示)。或者改用messagebox(编辑我的答案)我得到了s数据行7列7 v数据ros 8763 col 17我不确定这对为什么我的代码不起作用意味着什么,但在另一个注释上。我解决了我的问题!当你指出那条红线的时候。我把-10改成了-参数,现在可以工作了。如果你还可以解释这些数字和列是如何告诉你它不起作用的,这在将来会非常有用!。感谢TimIf sData是一个二维数组(在本例中)有7行7列,那么在(例如)sData(j,8)处没有元素,这就是为什么会出现“下标超出范围”错误:8是“超出范围”,因为数组中只有7列。rData.Offset(1)。清除rData.Offset(11)。调整大小(1).Clear-->这些行只需清除旧数据,就可以得到一张干净的工作表。我曾想过创建一个新的工作表,删除旧的工作表,然后将新的工作表重命名为旧的工作表,但我认为只清除除页眉以外的所有内容会更快。如果您对代码的不同部分有任何其他问题,请告诉我。
Msgbox "sData: #rows=" & ubound(sData,1) & "   #cols=" & _
        ubound(sData,2) & vbcrlf & 
       "vData #rows=" & ubound(vData,1) &  "   #cols=" & ubound(vData,2)
ReDim sData(1 To Parameters, 1 To rData.Columns.Count - 10)