0

次のコードで Excel で VBA を使用すると、エラーが発生します。

Private Sub XMLGen(mapRangeA, mapRangeB, ticketSize, mapping)
    Dim fieldOneArr As Variant
    Dim fieldTwoArr As Variant
    Dim row As Long
    Dim column As Long
    Dim infoCol As Long
    Dim endInfo As Long
    Dim objDom As DOMDocument
    Dim objNode As IXMLDOMNode
    Dim objXMLRootelement As IXMLDOMElement
    Dim objXMLelement As IXMLDOMElement
    Dim objXMLattr As IXMLDOMAttribute
    Set ws = Worksheets("StockData")
    Dim wsName As String

    Set objDom = New DOMDocument

    If ticketSize = 8 Then
        wsName = "A7Tickets"
    ElseIf ticketSize = 16 Then
        wsName = "A8Tickets"
    Else
        wsName = "A5Tickets"
    End If

    Set ps = Worksheets(wsName)

   'create processing instruction
   Set objNode = objDom.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
   objDom.appendChild objNode

   'create root element
   Set objXMLRootelement = objDom.createElement("fields")
   objDom.appendChild objXMLRootelement

   'create Attribute to the Field Element and set value
   Set objXMLattr = objDom.createAttribute("xmlns:xfdf")
   objXMLattr.NodeValue = "http://ns.adobe.com/xfdf-transition/"
   objXMLRootelement.setAttributeNode objXMLattr

   infoCol = 1
   fieldOneArr = Worksheets(mapping).range(mapRangeA)
   fieldTwoArr = Worksheets(mapping).range(mapRangeB)
   For row = 1 To UBound(fieldOneArr, 1)
        For column = 1 To UBound(fieldOneArr, 2)
            'create Heading element
            Set objXMLelement = objDom.createElement(fieldOneArr(row, column))
            objXMLRootelement.appendChild objXMLelement

            'create Attribute to the Heading Element and set value
            Set objXMLattr = objDom.createAttribute("xfdf:original")
            objXMLattr.NodeValue = (fieldTwoArr(row, column))
            objXMLelement.setAttributeNode objXMLattr
            objXMLelement.Text = ps.Cells(row, infoCol)
            infoCol = infoCol + 1
            endInfo = endInfo + 1
            If endInfo = 4 Then
                infoCol = 1
            End If
        Next column
    Next row

    'save XML data to a file
    If ticketSize = 2 Then
        objDom.Save ("C:\ExportTestA5.xml")
        MsgBox "A5 XML created"
    ElseIf ticketSize = 8 Then
        objDom.Save ("C:\ExportTestA7.xml")
        MsgBox "A7 XML created"
    Else
        objDom.Save ("C:\ExportTestA8.xml")
        MsgBox "A8 XML created"
    End If

End Sub

デバッグを押すと、次の行がポイントされます。

fieldOneArr = Worksheets(mapping).range(mapRangeA)

.Range は大文字であるはずですが、修正するたびに自動的に小文字に設定され続けます。

このコードは、XML ファイルを作成し、(ticketSize 変数に基づいて) 選択したワークシートから詳細を正しい XML フィールドに書き込むことを目的としています。したがって、フィールド名と属性名を書き込むマッピング ワークシートがあり、正しいチケット サイズ ワークシートの情報を要素のテキスト プロパティに書き込みます。

4

1 に答える 1

2

この場合は、関数パラメーターの型を定義する必要がありますmapRangeA As String。Office オブジェクトのメソッドとプロパティは、エラー メッセージが表示されるとあまり役に立たないことが多いため、パラメーターに問題がある場合は、型の不一致エラーを表示することをお勧めします。

于 2013-03-16T13:51:21.390 に答える