以下は、属性を構築し、xmlファイルとして出力するコードです。私はそれを実行するたびに、添え字が範囲外であり、属性2を強調表示しています。列40〜41は、定義された範囲内になければなりません。Excel VBAでアレイを構築するときに下付き文字が範囲外ですか?
「ElseIf」は使用しないでください。私はそれを属性1と属性2だけとして実行すると、 '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 And c <= 41)' ...と尋ねるべきでしょうか? – Jeeped