Avatar billede hnteknik Novice
09. august 2012 - 14:07 Der er 1 kommentar og
1 løsning

metode til at gemme/Opdatere userform data i XML fil

Jeg har arvet en WORD template, som får en stor del af sit input via XML filer genereret andetsteds. Templaten skal nu leve sit eget liv og en del af data skal komme fra bl.a. en userform indtasting.
Disse useformdata har jeg skilt ud fra den store XML i en særskilt XML, som læses ind i variable, som ud over at føde templaten også læses ind i Userformens variable.

En del af userformens data skal genbruges og andre opdateres. Jeg vil gerne gemme /opdatere disse data til den oprindelige XML fil.

jeg søger et eksempel på, hvordan man skriver og opdaterer data i en XML fil baseret på word 2003 VBA.

PFT Henrik
Avatar billede hnteknik Novice
10. august 2012 - 13:20 #1
Nøgen kvinde lærer at spinde. Jeg har selv udarbejdet en løsnning.

Sub XMLUpdateTEST()

Dim XmlField As String, XMLFile As String, Updated As Boolean

Dim XMLDOC As MSXML2.DOMDocument
Set XMLDOC = New MSXML2.DOMDocument

XMLFile = ActiveDocument.AttachedTemplate.Path & "\XML\" & "RapportFrontDATA.xml"

If Not FileThere(XMLFile) Then
    MsgBox "XML Filen blev ikke fundet: " & vbCrLf & XMLFile
    Exit Sub
End If

If XMLDOC.Load(XMLFile) Then
        Updated = False
        UpdateNode XMLDOC.ChildNodes, "CreatedbyFullName", "The Great Pretender", Updated
        If Updated Then
            XMLDOC.Save (XMLFile)
        End If
Else
  ' The document failed to load.
    Dim strErrText As String
    Dim xPE As MSXML2.IXMLDOMParseError
    ' Obtain the ParseError object
    Set xPE = XMLDOC.parseError
    With xPE
        strErrText = "Your XML Document failed to load " & _
        "due the following error." & vbCrLf & _
        "Error #: " & .errorCode & ": " & xPE.reason & _
        "Line #: " & .Line & vbCrLf & _
        "Line Position: " & .linepos & vbCrLf & _
        "Position In File: " & .filepos & vbCrLf & _
        "Source Text: " & .srcText & vbCrLf & _
        "Document URL: " & .URL
    End With
    MsgBox strErrText, vbExclamation
End If
  'Destroy
 
  Set XMLDOC = Nothing

End Sub

Public Sub UpdateNode(ByRef Nodes As MSXML2.IXMLDOMNodeList, _
  ByVal txtNodename As String, ByVal txtNodeValue As String, Updated)

  Dim xNode As MSXML2.IXMLDOMNode
 

  For Each xNode In Nodes
      If xNode.NodeType = NODE_TEXT And xNode.ParentNode.nodeName = txtNodename Then
        xNode.NodeValue = txtNodeValue
        Updated = True
        Exit Sub
      End If

      If xNode.HasChildNodes Then
        UpdateNode xNode.ChildNodes, txtNodename, txtNodeValue, Updated
      End If
  Next xNode
End Sub

Det virker, men kan sikkert gøres mere effektivt.
Avatar billede hnteknik Novice
10. august 2012 - 15:48 #2
Hvis man ved at de enkelte XML tags eksisterer kan denne metode være huritgere:

If XMLDOC.Load(XMLFile) Then
        XMLDOC.getElementsByTagName("DeltagerFirma").Item(0).Text = "Andeby Posthus"
' for indekserede data ellers
XMLDOC.getElementsByTagName("navn").Text = "Anders"
        XMLDOC.Save (XMLFile)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Tag et kursus i Word og øg effektiviteten

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I går 23:37 Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows