Erreur d'exécution '13' Macro VBA Excel
J'ai créé cette macro et j'ai une erreur d'Exécution '13', à la ligne
Set objDomAttribute = objDomElement3.Attributes.setNamedItem(objDomDoc.createAttribute("Name4"))
Mon fichier Excel a 2727 lignes. Je l'ai testé pour moins de lignes, et il fonctionne parfaitement, mais pour 2727 il ne fonctionne pas. Que dois-je faire pour résoudre cela?
Option Explicit
Public Sub MakeXMLWithDom()
Dim Q As String
Q = Chr$(34)
Dim objDomDoc As New MSXML2.DOMDocument60
objDomDoc.LoadXML ("<?xml version=" & Q & "1.0" & Q & "encoding=" & Q & "utf-8" & Q & "?>")
Dim objDomElement As MSXML2.IXMLDOMElement
Dim objDomAttribute As MSXML2.IXMLDOMAttribute
Dim nodeSet As MSXML2.IXMLDOMNodeList
Set objDomElement = objDomDoc.createElement("Containers")
Set objDomElement = objDomDoc.appendChild(objDomElement)
'finding the amount of rows in the excel
Dim numofrows As Long
numofrows = Worksheets("EXAMPLE").Range("E1").Offset(Worksheets("EXAMPLE").Rows.Count - 1, 0).End(xlUp).Row
Dim iRow As Integer
Dim Value11 As Variant
Dim Value12 As Variant
Dim Value13 As Variant
Dim objDomElement1 As Variant
Dim objDomElement2 As Variant
Dim objDomElement3 As Variant
For iRow = 10 To (numofrows + 1)
If Worksheets("EXAMPLE").Cells(iRow - 1, 5) = Worksheets("EXAMPLE").Cells(iRow, 5) Then
Value11 = Worksheets("EXAMPLE").Cells(iRow - 1, 11).Value & ", " & Worksheets("EXAMPLE").Cells(iRow, 11).Value
Value12 = Worksheets("EXAMPLE").Cells(iRow - 1, 12).Value & ", " & Worksheets("EXAMPLE").Cells(iRow, 12).Value
Value13 = Worksheets("EXAMPLE").Cells(iRow - 1, 13).Value & ", " & Worksheets("EXAMPLE").Cells(iRow, 13).Value
Else
Value11 = Worksheets("EXAMPLE").Cells(iRow, 11).Value
Value12 = Worksheets("EXAMPLE").Cells(iRow, 12).Value
Value13 = Worksheets("EXAMPLE").Cells(iRow, 13).Value
End If
If Worksheets("EXAMPLE").Cells(iRow, 5) <> Worksheets("EXAMPLE").Cells(iRow + 1, 5) And Worksheets("EXAMPLE").Cells(iRow, 3) <> "" And Worksheets("EXAMPLE").Cells(iRow, 5) <> "" Then
Set objDomElement1 = objDomElement.appendChild(objDomDoc.createElement("Data"))
Set objDomAttribute = objDomElement1.Attributes.setNamedItem(objDomDoc.createAttribute("Relevant"))
objDomElement1.Attributes.getNamedItem("Relevant").Text = "True"
Set objDomElement2 = objDomElement1.appendChild(objDomDoc.createElement("Info"))
Set objDomElement3 = objDomElement2.appendChild(objDomDoc.createElement("Part"))
Set objDomAttribute = objDomElement3.Attributes.setNamedItem(objDomDoc.createAttribute("Name1"))
Set objDomAttribute = objDomElement3.Attributes.setNamedItem(objDomDoc.createAttribute("Name2"))
Set objDomAttribute = objDomElement3.Attributes.setNamedItem(objDomDoc.createAttribute("Name3"))
Set objDomAttribute = objDomElement3.Attributes.setNamedItem(objDomDoc.createAttribute("Name4"))
objDomElement3.Attributes.getNamedItem("Name1").Text = Trim$(Worksheets("EXAMPLE").Cells(iRow, 5).Value)
objDomElement3.Attributes.getNamedItem("Name2").Text = Value11
objDomElement3.Attributes.getNamedItem("Name3").Text = Value12
objDomElement3.Attributes.getNamedItem("Name4").Text = Value13
End If
Next iRow
objDomDoc.Save ("c:\Example.xml")
End Sub
- C'est une "erreur" incompatibilité de Type. Déclarer toutes tes variables à l'aide de
Dim
va vous aider à trouver la cause de cette erreur. Vous n'avez pas déclaréobjDomElement3
, par exemple. Vous devez vous forcer à le faire pour toutes les variables, toujours par écritOption Explicit
tout en haut de votre module. - M. Corbett, j'ai écouté vos conseils, j'ai ajouté l'Option Explicite, j'ai déclaré la objDomElements mais j'ai toujours la même erreur à la même ligne.
- Lorsque vous entrez votre code dans le mode de débogage, regardez la fenêtre variables locales. Quel est le type de toutes les variables impliquées dans cette ligne? Sont-ils comme prévu?
- Pour le Value13 il dit de la Valeur d'erreur: Erreur de 2015 et le Type: Variante/Erreur je ne sais pas si tu veux dire que parce que je suis nouveau dans le codage. 🙂
Vous devez vous connecter pour publier un commentaire.
Vous dire que
Value13
dans la fenêtre variables locales montre queValue: Error 2015
etType: Variant/Error
. Bon, d'accord, garder sur la recherche... d'OùValue13
viennent? Regardez dans votre feuille Excel sur cette ligne. Je parie que vous trouverez un#VALUE!
erreur là.C'est donc un problème dans vos données d'entrée, pas de votre code. Corrigé cela et que votre problème va disparaître.
Error
valeur dans uneString
type de variable. La conversion implicite deString
fonctionne pour certains types de données, mais pas pour tous les types de données et, en particulier, pas pourError
. Si vous le souhaitez, vous pouvez l'utilisateurCStr()
pour faire le casting explicitement, mais n'est-il pas préférable de tout simplement supprimer l'erreur à partir de votre entrée de données... P. S. Avez-vous vu mon dernier commentaire à votre question ci-dessus?