首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel 2007 vba宏:错误9下标超出范围

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

Stack Overflow用户
提问于 2011-09-14 17:34:10
回答 1查看 12.3K关注 0票数 1

我有一个代码,由@Jon49为我编写,适合我的目的:这个代码的问题是,它对我的一些文件有效,但是在其他文件上产生了一个错误9,超出了范围。本质上,我有一个循环,它打开文件夹中的每个文件,然后执行折叠代码。保存它,然后关闭它,然后再打开另一个。所有文件的格式是相同的。那么是什么产生了错误呢?

当错误发生时,我对其进行调试,它往往会在这里显示原因:

代码语言:javascript
复制
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)

滚动到底部,以查找我认为导致错误的

以下是代码:

代码语言:javascript
复制
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 

<?不确定上面这一行的重要性,因为我注释掉了,代码仍然可以工作。

代码语言:javascript
复制
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

代码语言:javascript
复制
Range("K1").Select
Range(ActiveCell.End(xlToRight).Offset(0, 0), ActiveCell).Delete
Rows("2:" & Parameters + 1).Delete

我注意到的一件事是,错误似乎产生的文件没有多少参数(我注意到的两个文件到目前为止有9个将调试为sData(j,10) = vData(2,j+ 10)和7 sData(j,8) = vData(i,j+ 10 )参数)。参数为CH4、NO、NO2等

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-14 17:56:04

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

代码语言:javascript
复制
Msgbox "sData: #rows=" & ubound(sData,1) & "   #cols=" & _
        ubound(sData,2) & vbcrlf & 
       "vData #rows=" & ubound(vData,1) &  "   #cols=" & ubound(vData,2)

紧接其后

代码语言:javascript
复制
ReDim sData(1 To Parameters, 1 To rData.Columns.Count - 10)

看看你得到了什么价值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7420510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档