Как заставить VBA добавить новую строку в тело XML? - PullRequest
0 голосов
/ 06 августа 2020

Мне нужна помощь. В настоящее время я занимаюсь созданием файла XML через VBA. Я дохожу до того, что мне нужно добавить несколько записей, но дело в том, что каждая запись имеет другое имя. Для меня нет смысла создавать его в Excel столбец за столбцом, потому что это может быть сто записей или ни одной. У меня тоже нет API для этого.

Как заставить в VBA создать дополнительную строку, как указано в примере ниже?

Я скачал XML прямо с веб-сайта, и это вот как это выглядит:

enter image description here

My code looks like this:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<dpiva version="05" xmlns="http://www.at.gov.pt/schemas/dpiva">
    <rosto>
        <apuramento>
            <btBensUELiquidadoDeclarante></btBensUELiquidadoDeclarante>
            <btBensUETotal></btBensUETotal>
            <btImportDeclarante></btImportDeclarante>
            <btOperacoesIsentasComDeducao></btOperacoesIsentasComDeducao>
            <btOperacoesIsentasSemDeducao></btOperacoesIsentasSemDeducao>
            <btServicosUE></btServicosUE>
            <btTaxaNormal></btTaxaNormal>
            <btTotal></btTotal>
            <btTransmissoesUEIsentas></btTransmissoesUEIsentas>
            <ivaARecuperar></ivaARecuperar>
            <ivaBensUELiquidadoDeclarante></ivaBensUELiquidadoDeclarante>
            <ivaBensUETotal></ivaBensUETotal>
            <ivaDedutivelExistenciasTaxaNormal></ivaDedutivelExistenciasTaxaNormal>
            <ivaDedutivelImobilizado></ivaDedutivelImobilizado>
            <ivaDedutivelOutros></ivaDedutivelOutros>
            <ivaDedutivelTotal></ivaDedutivelTotal>
            <ivaFavorEstadoTotal></ivaFavorEstadoTotal>
            <ivaFavorSujPassivoTotal></ivaFavorSujPassivoTotal>
            <ivaImportDeclarante></ivaImportDeclarante>
            <ivaServicosUE></ivaServicosUE>
            <ivaTaxaNormal></ivaTaxaNormal>
            <regularizacoesFavorEstado></regularizacoesFavorEstado>
            <regularizacoesFavorSujPassivoNaoComunicadasCobranca></regularizacoesFavorSujPassivoNaoComunicadasCobranca>
            <temOperacoesAdquirenteComLiqImposto></temOperacoesAdquirenteComLiqImposto>
            <temOperacoesComLiqImposto></temOperacoesComLiqImposto>
            <temOperacoesDedutiveis></temOperacoesDedutiveis>
            <temOperacoesSemLiqImposto></temOperacoesSemLiqImposto>
        </apuramento>
    </rosto>
    <anexoCampo40R>
        <regularizacoes>
            <campo40Total></campo40Total>
            <listaNum2E3E6>
            </listaNum2E3E6>
        </regularizacoes>
    </anexoCampo40R>
</dpiva>

1 Ответ

0 голосов
/ 06 августа 2020

Используя подход «на основе строк», вы можете достичь этого, просто построив строку с желаемой структурой xml:

Public Sub Create_listaNum2E3E6()

    Dim i As Integer
    Dim artigoValue As String
    Dim s As String

    artigoValue = "01" 
    
    s = "<listaNum2E3E6>" & vbNewLine
    For i = 1 To 10
        s = s & "   <listaNum2E3E6Item row=" & Chr(34) & i & Chr(34) & ">" & vbNewLine
        s = s & "       <artigo>" & artigoValue & CStr(i) & "</artigo>" & vbNewLine
        s = s & "   </listaNum2E3E6Item>" & vbNewLine
    Next i
    s = s & "<listaNum2E3E6>"

    Debug.Print s

End Sub

Вы можете реплицировать код, чтобы получить тег <listaNum7Antes2013> также.

Переменная i будет увеличивать атрибут строки, вам также нужно позаботиться о данных (значения тегов <artigo>, в коде задано фиктивное значение). Вы можете передать их в тело процедуры / функции в массиве и использовать LBound и UBound в качестве итератора (вместо i).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...