Ниже приведен код, который создает атрибуты, а затем печатает их в виде XML-файла. Каждый раз, когда я запускаю его, он говорит, что индекс находится вне диапазона, выделяя атрибуты2. Столбцы 40-41 должны находиться в пределах определенного диапазона.Подкатегория вне диапазона при построении массивов в Excel VBA?
Я предполагаю, что проблема может быть в том, что я не должен использовать «ElseIf». Когда я запускаю его как атрибуты1 и attributes2, он отлично работает, когда я использую оператор «Else». Возможно, я неправильно определил свои массивы, так как я не могу найти ответ и нуждаюсь в свежих глазах.
Sub ILikeFruits()
Dim headers(), data(), attributes1(), attributes2(), attributes3(), _
attributes4(), attributes5(), attributes6(), attributes7(), attributes8(), attr$, r&, c&
' load the headers and data to an array '
headers = Cells(1, 1).Resize(1, 104).Value
data = Cells(2, 1).Resize(10, 104).Value
' set the size for the attributes '
ReDim attributes1(1 To 39)
ReDim attributes2(40 To 41)
ReDim attributes3(42 To 51)
ReDim attributes4(52 To 65)
ReDim attributes5(66 To 69)
ReDim attributes6(70 To 89)
ReDim attributes7(90 To 97)
ReDim attributes8(98 To 104)
' open file and print the header '
Open "C:\desktop\XML Update\Simulation\XML tests (Attributes)\DataTest.xml" For Output As #1
Print #1, "<Fruits>"
Print #1, " <Tasty_Fruits>"
' iterate each row '
For r = 2 To UBound(data)
' iterate each column '
For c = 1 To UBound(data, 2)
' build each attribute '
attr = headers(1, c) & "=""" & data(r, c) & """"
If c <= 39 Then
attributes1(c) = attr
ElseIf 40 <= c <= 41 Then 'Subscript out of range
attributes2(c) = attr
ElseIf 42 <= c <= 51 Then
attributes3(c) = attr
ElseIf 52 <= c <= 65 Then
attributes4(c) = attr
ElseIf 66 <= c <= 69 Then
attributes5(c) = attr
ElseIf 70 <= c <= 89 Then
attributes6(c) = attr
ElseIf 90 <= c <= 97 Then
attributes7(c) = attr
ElseIf 98 <= c <= 104 Then
attributes8(c) = attr
End If
Next
' print the row '
Print #1, " <Fruits_By_Color " & Join(attributes1, " ") & " >"
Print #1, " <Small_Red_Fruits>"
Print #1, " <Cranberry " & Join(attributes2, " ") & " />"
Print #1, " </Small_Red_Fruits>"
Print #1, " <Big_Red_Fruits>"
Print #1, " <Apple " & Join(attributes3, " ") & " />"
Print #1, " <Pomegranate " & Join(attributes4, " ") & " />"
Print #1, " <Tomato " & Join(attributes5, " ") & " />"
Print #1, " </Big_Red_Fruits>"
Print #1, " <Yellow_Fruits>"
Print #1, " <Small_Yellow_Fruits " & Join(attributes6, " ") & " >"
Print #1, " <Banana " & Join(attributes7, " ") & " />"
Print #1, " <Lemon " & Join(attributes8, " ") & " />"
Print #1, " </Small_Yellow_Fruits>"
Print #1, " </Yellow_Fruits>"
Print #1, " </Fruits_By_Color>"
Next
' print the footer and close '
Print #1, " </Tasty_Fruits>"
Print #1, "</Fruits>"
Close #1
End Sub
Вы запрашиваете 'ElseIf 40 <= CBool (c <= 41)'. Возможно, вы должны спросить 'ElseIf 40 <= c И c <= 41)' ...? – Jeeped