Excel 2007 VBA макрос: ошибка 9 подстрела вне диапазона - PullRequest
1 голос
/ 14 сентября 2011

У меня есть код, написанный для меня @ 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 

<---- ???не уверен насчет важности строки выше, потому что я закомментировал и код все равно будет работать </p>

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 Ответ

3 голосов
/ 14 сентября 2011

Вы пытаетесь получить доступ к значению, которого нет в вашем массиве 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)

Посмотрите, какие значения вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...