2013-03-16 1 views
0

Я получаю сообщение об ошибке сказал при помощи VBA в Excel на следующий код:приложения или объект определенные ошибки в 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) 

Я знаю, что. Ранг должен быть в верхнем регистре, но он постоянно устанавливает его в нижний регистр автоматически, когда я его исправляю.

Этот код предназначен для создания XML-файла, а затем записывает данные из выбранного листа (на основе переменной ticketSize) в правильные поля XML. Следовательно, у меня есть таблица сопоставлений, из которой я пишу имена полей и атрибутов, а затем записываю информацию из правильного листа размера листа в текстовое свойство элемента.

+0

Вы не определили тип mapRangeA в своей функции, что помогло бы изолировать ошибку. Нам нужно знать, что вы используете для этой функции, поскольку ошибка будет генерироваться, если параметр диапазона недопустим. – grahamj42

+0

О, это помогло. В моем Sub, который создает и заполняет переменные mapRange (типа String), один из моих операторов If не присваивал значение mapRangeA или mapRangeB. Благодаря! – user2151763

ответ

2

Вы должны определить типы параметров вашей функции, в данном случае mapRangeA As String. Методы и свойства объектов Office часто не очень полезны для сообщений об ошибках, поэтому лучше иметь ошибку несоответствия типа, если у вас есть проблема с параметром.

Смежные вопросы