Option Explicit
Private Function appendChild(xmldoc As Object, parentNode As Object, ByVal nodename As String, ByVal nodetext As String, ByVal settext As Boolean) As Object
Dim node As Object
Set node = xmldoc.createElement(nodename)
If settext Then node.text = nodetext
If Not parentNode Is Nothing Then parentNode.appendChild node
Set appendChild = node
End Function
Sub createXML()
Dim lastRow As Long, r As Long, c As Long, text As String, data(), sh As Worksheet, xmldoc As Object
Dim rootNode As Object, ktNode As Object, tcNode As Object, node As Object, parentNode As Object, childNode As Object
Set sh = ThisWorkbook.Worksheets("01-TNCN")
With sh
lastRow = .Range("C22:C10000").Find("*", .Range("C22"), xlFormulas, xlPart, xlByRows, xlPrevious).Row
If lastRow < 22 Then Exit Sub
data = .Range("A22:AJ" & lastRow).Value
End With
Set xmldoc = CreateObject("MSXML2.DOMDocument")
xmldoc.appendChild xmldoc.CreateProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8""")
Set rootNode = xmldoc.createElement("HSoThueDTu")
rootNode.setAttribute "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"
rootNode.setAttribute "xmlns", "http://kekhaithue.gdt.gov.vn/TKhaiThue"
xmldoc.appendChild rootNode
Set ktNode = appendChild(xmldoc, rootNode, "HSoKhaiThue", "", False)
Set tcNode = appendChild(xmldoc, ktNode, "TTinChung", "", False)
Set node = appendChild(xmldoc, tcNode, "TTinDVu", "", False)
appendChild xmldoc, node, "maDVu", "QTT", True
text = "C" & ChrW(244) & "ng c" & ChrW(7909) & " h" & ChrW(7895) & " tr" & ChrW(7907) & " k" & ChrW(234) & " khai QTT"
appendChild xmldoc, node, "tenDVu", text, True
appendChild xmldoc, node, "pbanDVu", "3.3.0", True
appendChild xmldoc, node, "ttinNhaCCapDVu", "", False
Set node = appendChild(xmldoc, tcNode, "TCtrathunhap", "", False)
appendChild xmldoc, node, "maTKhai", "999", True
text = "T" & ChrW(7900) & " KHAI " & ChrW(272) & ChrW(258) & "NG K" & ChrW(221) & _
" THU" & ChrW(7870) & " THU NH" & ChrW(7852) & "P C" & ChrW(193) & " NH" & ChrW(194) & "N"
appendChild xmldoc, node, "tenTKhai", text, True
appendChild xmldoc, node, "moTaBMau", "", False
appendChild xmldoc, node, "pbanTKhaiXML", "1.1.0", True
appendChild xmldoc, node, "mst", sh.Range("E8").Value, True
appendChild xmldoc, node, "ten", sh.Range("E10").Value, True
appendChild xmldoc, node, "maCQTQuanLy", "10100", True
text = "V" & ChrW(259) & "n ph" & ChrW(242) & "ng C" & ChrW(7909) & "c thu" & ChrW(7871) & " Th" & _
ChrW(224) & "nh Ph" & ChrW(7889) & " H" & ChrW(224) & " N" & ChrW(7897) & "i"
appendChild xmldoc, node, "tenCQTQuanLy", text, True
appendChild xmldoc, node, "sohieutep", sh.Range("E16").Value, True
appendChild xmldoc, node, "ngayTao", sh.Range("E18").Value, True
appendChild xmldoc, node, "soluong", sh.Range("L18").Value, True
Set node = appendChild(xmldoc, ktNode, "CTieuTKhaiChinh", "", False)
For r = 2 To UBound(data)
Set parentNode = appendChild(xmldoc, node, "DSachCNDangkyMST", "", False)
parentNode.setAttribute "id", """" & data(r, 1) & """"
For c = 2 To UBound(data, 2)
If c < 16 Or c > 31 Then
If c = 2 Or c = 14 Then
Set childNode = appendChild(xmldoc, parentNode, data(1, c), "", False)
childNode.setAttribute "xsi:nil", """true"""
Else
Set childNode = appendChild(xmldoc, parentNode, data(1, c), data(r, c), True)
End If
Else
If c = 16 Then
Set childNode = appendChild(xmldoc, parentNode, "DChokhau", "", False)
ElseIf c = 25 Then
Set childNode = appendChild(xmldoc, parentNode, "DCcutru", "", False)
End If
appendChild xmldoc, childNode, data(1, c), data(r, c), True
End If
Next c
Next r
xmldoc.Save ThisWorkbook.Path & "/file.xml"
Set xmldoc = Nothing
End Sub