09. august 2012 - 14:07Der 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.
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
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)
Synes godt om
Ny brugerNybegynder
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.