@cimerio, por acaso vc não estaria deixando o arquivo aberto (com a instrução Open), esquecendo-se de fechar no final (usando o Close)? Não vi vc usando Close em seu trecho de código (veja que o colega @jvalq usou em sua primeira resposta).
Isso pode facilmente corromper o(s) arquivo(s), semelhante a remover um pendrive quando ainda está sendo acessado.
Até mesmo quando está depurando seu código, executando linha-a-linha, sempre execute a linha onde está a instrução Close (ou digite Close na Janela Imediata e dê Enter).
O ideal mesmo, em minha opinião, seria lançar todas as linhas primeiro numa String e só então abrir o arquivo, "printar" a String agora totalmente preenchida e fechar logo em seguida, ficando o menor tempo possível com o arquivo aberto.
Outro detalhe: evite usar os tipos de dados LongPtr e também LongLong para variáveis que não estejam relacionadas a ponteiros e identificadores. Eles foram concebidos apenas para compatibilizar códigos entre as versões 32 e 64 bits e não para uso em variáveis ordinárias (internamente o LongPtr é convertido para Long, portanto não há vantagem em seu uso):
"Note
LongPtr is not a true data type because it transforms to a Long in 32-bit environments, or a LongLong in 64-bit environments. Using LongPtr enables writing portable code that can run in both 32-bit and 64-bit environments. Use LongPtr for pointers and handles."
Fonte: Microsoft Docs - LongPtr Data Type
Então nesse quesito e também pelo fato de vc trabalhar sempre só com um arquivo por vez, sugiro nem usar FreeFile e sim usar o algarismo #1 direto, pois assim acusaria erro caso vc tentasse abrir um arquivo já aberto com o mesmo número (abrir sem fechar).
Sua macro ficaria mais ou menos assim:
Sub geraXml()
Dim strXml As String, i As Long, y As Long
strXml = ""
strXml = strXml & ""
strXml = strXml & "" & Date & ""
strXml = strXml & "1"
strXml = strXml & "" & Year(Date) & ""
strXml = strXml & ""
strXml = strXml & ""
strXml = strXml & ""
strXml = strXml & ""
strXml = strXml & "" & Format(Date, "yyyy-mm-dd") & ""
strXml = strXml & ""
strXml = strXml & "f1"
strXml = strXml & ""
i = 1
For y = 13 To 17
If Worksheets("espelho").Cells(y, 5).Value <> 0 Then
strXml = strXml & ""
strXml = strXml & "" & i & ""
strXml = strXml & "" & Replace(Replace(Worksheets("espelho").Cells(y, 5), ".", ""), ",", ".") & ""
strXml = strXml & ""
i = i + 1
End If
Next
strXml = strXml & ""
'strXml = strXml & ...
'strXml = strXml & ...
Open "C:\macro\Testes.xml" For Output As #1
Print #1, strXml
Close #1
End Sub
Postado : 17/09/2020 11:13 am