vba - Excel 2007 vba 宏 : error 9 subscript out of range

标签 vba excel

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

<---- ???不确定上面这行的重要性,因为我注释掉了,代码仍然可以工作
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 等

最佳答案

您正在尝试访问 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)

看看你得到了什么值。

关于vba - Excel 2007 vba 宏 : error 9 subscript out of range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7420510/

相关文章:

excel - 从 excel 导入时在 SAS 中保留换行符(换行符)

java - 如何使用 Apache Calcite 将数据插入 Excel 表?

vba - 使用条件计算可见行数

regex - 将三个函数合并为一个函数,以删除特定字符和数字周围的所有可能的空格

ms-access - MS Access 2010 中子表单的相对大小

用于按升序对 Excel 列进行排序并扩展选择的 VBA 代码?

java - Java 中 XIRR 函数的公式计算器

arrays - 不使用循环求和矩阵

使用 Excel VBA 在 Chrome 中注入(inject) Javascript

arrays - 如何在 Excel 中搜索最相似的序列?