一个接一个地打印阵列

时间:2015-04-21 18:02:16

标签: arrays excel vba xml-parsing

我很难弄清楚如何打印一组 - 比如说三个 - 一个接一个地排列。

Node A
    Element 1
    Element 2
    Element 3
Node B
    Element 1
    Element 2
    Element 3
    Element 4
Node C
    Element 1
    Element 2
    Element 3

每个节点都有不同的属性,因此我的代码设置为使用该特定属性转到每个节点并填充数组。但是当我去打印时,每个语句都与下一个语句重叠。我不知道如何打印阵列而不仅仅是移动起始单元。

例如,

Range("A" & j + 3).Value = WorksheetFunction.Transpose(myArray1)
Range("B" & j + 3).Value = WorksheetFunction.Transpose(myArray2)

我想开始在A3打印并按j递增,但所有这一切都是将打印推送到A5(如果j = 2)。我知道我必须增加,我只是不知道如何。

编辑:这是我的主要代码块:

For i = 0 To (count - 1)
ReDim Preserve NodeIDArray(0 To count)
ReDim Preserve NodeVersionArray(0 To count)
ReDim Preserve NodeIDArray_v13(0 To count)
ReDim Preserve NodeIDArray_v14(0 To count)
ReDim Preserve NodeID_Version13(0 To count)
ReDim Preserve NodeID_Version14(0 To count)
ReDim Preserve NodeIDNameArray(0 To count)
ReDim Preserve CellIDArray(0 To count)

If NodeVersionArray(i) = "13" Then
    NodeID_Version13 = NodeIDArray(i)
    NodeIDArray_v13(i) = NodeID_Version13
    Node_Version13 = NodeVersionArray(i)
    NodeID_Version13(i) = Node_Version13


    Set version13_loc = XMLFile.SelectNodes("/home/Equipment[@id='" & NodeID_Version13 & "' and @version='" & Node_Version13 & "']/room/cell")
    Set version_13_count = XMLFile.SelectNodes("/home/Equipment[@version='13']")
    For j = 0 To (version13_loc.Length - 1)
        ReDim Preserve CellIDArray(0 To j)
        ReDim Preserve NodeIDNameArray(0 To j)
        ReDim Preserve CellIDNameArray13(0 To j)
        ReDim Preserve NodeIDNameArray13(0 To j)

        CellID = version13_loc(j).getAttribute("id")
        NodeIDName = version13_loc(j).ParentNode.ParentNode.getAttribute("id")
        CellIDArray(j) = CellID
        NodeIDNameArray(j) = NodeIDName

        v13Count = version_13_count.Length

        Range("A" & j + 3).Value = WorksheetFunction.Transpose(NodeIDNameArray)
        Range("B" & j + 3).Value = WorksheetFunction.Transpose(CellIDArray)
     Next
     Call PrintDatav13(NodeIDNameArray, CellIDArray, j, v13Count)
ElseIf NodeVersionArray(i) = "14" Then
    NodeID_Version14 = NodeIDArray(i)
    NodeIDArray_v14(i) = NodeID_Version14
    Node_Version14 = NodeVersionArray(i)
    NodeID_Version14(i) = Node_Version14

    Set version14_loc = XMLFile.SelectNodes("/home/Equipment[@id='" & NodeID_Version14 & "' and @version='" & Node_Version14 & "']/room/cell/location")
    For k = 0 To (version14_loc.Length - 1)
        ReDim Preserve CellIDArray(0 To k)
        ReDim Preserve NodeIDNameArray(0 To k)
        ReDim Preserve CellIDNameArray14(0 To k)
        ReDim Preserve NodeIDNameArray14(0 To k)
        ReDim Preserve PurposeNameArray(0 To k)

        PurposeName = version14_loc(k).Text
        CellID = version14_loc(k).ParentNode.ParentNode.ParentNode.ParentNode.getAttribute("id")
        NodeIDName = version14_loc(k).ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.getAttribute("id")

        If PurposeName = "Red" Or PurposeName = "Orange" Or PurposeName = "Blue" Then

            CellIDArray(h) = CellID
            NodeIDNameArray(h) = NodeIDName
            PurposeNameArray(h) = PurposeName

            h = h + 1
        End If
    Next
    Call PrintDatav14(CellIDArray, NodeIDNameArray, PurposeNameArray, h)
Else
    MsgBox ("Wrong Version")
End If


Next

Sub PrintDatav14(NodeIDNameArray, CellIDArray, PurposeNameArray, h)
Range("A3").Resize(h, 1).Value = WorksheetFunction.Transpose(NodeIDNameArray)
Range("B3").Resize(h, 1).Value = WorksheetFunction.Transpose(CellIDArray)
Range("C3").Resize(h, 1).Value = WorksheetFunction.Transpose(PurposeNameArray)
End Sub

因此对于版本13(在第一个IF之后)我尝试在声明之后打印。对于版本14,我创建了一个打印的子(仅用于实验目的)。然而,它们重叠。

1 个答案:

答案 0 :(得分:0)

我刚刚意识到我的错误..而且由于变量名称混淆了。

这里的教训是没有可怕的和类似的变量名称。