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

时间:2011-09-14 17:34:10

标签: excel vba excel-vba

我有一个代码,由@ 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)

滚动到BOTTOM我认为导致错误

以下是代码:

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 

< ---- ???不确定上面这一行的重要性,因为我注释掉了,代码仍然有用

For i = 1 To UBound(vData)
  For j = 1 To UBound(sData)
    For k = 1 To 6
      sData(j, k) = vData(i, k)
    Next k
    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)
  Next j         'Print transposed data
  wks.Range("A" & Application.Rows.Count).End(xlUp) _
  .Offset(1).Resize(UBound(sData), UBound(sData, 2)) = sData
Next i
Application.EnableEvents = True

Range("K1").Select
Range(ActiveCell.End(xlToRight).Offset(0, 0), ActiveCell).Delete
Rows("2:" & Parameters + 1).Delete

enter image description here enter image description here enter image description here

我注意到的一件事是错误似乎产生的文件 有几个参数(两个文件我已经注意到它错误到目前为止有9 [将调试到sData(j,10)= vData(2,j + 10)]和7 [sData(j,8)= vData(i,j + 10)]参数每个)其他人可以使用到目前为止每个参数都超过10个。参数为CH4,NO,NO2等

1 个答案:

答案 0 :(得分:3)

您尝试访问sData或vData数组中不存在的值。他们中的一个或两个都有更少的行#34;或"列"比你想象的还要多尝试添加:

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)

查看您获得的值。