Eu usei o mesmo código e ele funciona, mas bloqueia a CPU por um longo tempo. O Excel ainda está funcionando, mas congela a interface do usuário, já que o VBA usa um único thread.
Eu o adaptei para despejar diretamente em um fluxo de arquivos, em vez de guardá-lo na memória e escrever tudo no final, tente substituir sua função MakeXML
por isso. Você também será capaz de monitorar o arquivo enquanto ele está sendo gravado para ver se ele realmente falha, e esperamos que ele seja executado mais rapidamente. Deixe-me saber se há algum problema e posso ajustar o código.
Sub MakeXML(iCaptionRow As Integer, iDataStartRow As Integer, sOutputFileName As String)
Dim Q As String
Dim NodeName As String
Dim AtributName As String
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile As Object
Set oFile = fso.CreateTextFile(sOutputFileName)
Application.ScreenUpdating = False
Q = Chr$(34)
oFile.Write "<?xml version=" & Q & "1.0" & Q & " encoding=" & Q & "UTF-8" & Q & "?>"
oFile.Write "<root>"
NodeName = "node"
AtributName = "test"
''--determine count of columns
Dim iColCount As Integer
iColCount = 1
While Trim$(Cells(iCaptionRow, iColCount)) > ""
iColCount = iColCount + 1
Wend
Dim iRow As Integer
iRow = iDataStartRow
While Cells(iRow, 1) > ""
oFile.Write "<" & NodeName & " type=" & Q & AtributName & Q & " id=" & Q & iRow & Q & ">"
For icol = 1 To iColCount - 1
oFile.Write "<" & Trim$(Cells(iCaptionRow, icol)) & ">"
oFile.Write Trim$(Cells(iRow, icol))
oFile.Write "</" & Trim$(Cells(iCaptionRow, icol)) & ">"
Next
oFile.Write "</" & NodeName & ">"
iRow = iRow + 1
Wend
oFile.Write "</root>"
oFile.Close
Application.ScreenUpdating = True
End Sub