Таблица Excel в XML - проблема с l oop и данными - PullRequest
0 голосов
/ 12 января 2020

Во-первых, это мой первый пост в этом сообществе, поэтому, пользуясь случаем, я бы хотел поздороваться :). Я хотел бы попросить о помощи, потому что я застрял с кодом VBA более недели, и у меня нет ни малейшего понятия, как его решить.

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

Сможете ли вы помочь?

Sub i()
Dim start As Worksheet
Dim cell1 As Range
Dim rng As Range
Dim reci As Worksheet
Dim blas As String
Set reci = Sheets("Input")
Set start = Sheets("start")
Set rng = reci.Range("A2:A" & reci.Cells(reci.Rows.Count, "A").End(xlUp).Row)
Open Application.ThisWorkbook.Path & "\" & Format(Now, "ddmmyy-hhmmss") & "_input.xml" For Output As #1

'Title
Print #1, "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>"
Print #1, "<dpiva version=""05"" xmlns=""http://www.at.gov.pt/schemas/dpiva"">"



Print #1, "<rosto>"
Print #1, "<apuramento>"
Print #1, "<btBensUELiquidadoDeclarante>" & cell1.Offset(0, 1).Value & "</btBensUELiquidadoDeclarante>"
Print #1, "<btBensUETotal>" & cell1.Offset(0, 2).Value & "</btBensUETotal>"
Print #1, "<btImportDeclarante>" & cell1.Offset(0, 3).Value & "</btImportDeclarante>"
Print #1, "<btOperacoesIsentasComDeducao>" & cell1.Offset(0, 4).Value & "</btOperacoesIsentasComDeducao>"
Print #1, "<btOperacoesIsentasSemDeducao>" & cell1.Offset(0, 5).Value & "</btOperacoesIsentasSemDeducao>"
Print #1, "<btServicosUE>" & cell1.Offset(0, 6).Value & "</btServicosUE>"
Print #1, "<btTaxaNormal>" & cell1.Offset(0, 7).Value & "</btTaxaNormal>"
Print #1, "<btTotal>" & cell1.Offset(0, 8).Value & "</btTotal>"
Print #1, "<btTransmissoesUEIsentas>" & cell1.Offset(0, 9).Value & "</btTransmissoesUEIsentas>"
Print #1, "<ivaARecuperar>" & cell1.Offset(0, 10).Value & "</ivaARecuperar>"
Print #1, "<ivaBensUELiquidadoDeclarante>" & cell1.Offset(0, 11).Value & "</ivaBensUELiquidadoDeclarante>"
Print #1, "<ivaBensUETotal>" & cell1.Offset(0, 12).Value & "</ivaBensUETotal>"
Print #1, "<ivaDedutivelExistenciasTaxaNormal>" & cell1.Offset(0, 13).Value & "</ivaDedutivelExistenciasTaxaNormal>"
Print #1, "<ivaDedutivelImobilizado>" & cell1.Offset(0, 14).Value & "</ivaDedutivelImobilizado>"
Print #1, "<ivaDedutivelOutros>" & cell1.Offset(0, 15).Value & "</ivaDedutivelOutros>"
Print #1, "<ivaDedutivelTotal>" & cell1.Offset(0, 16).Value & "</ivaDedutivelTotal>"
Print #1, "<ivaFavorEstadoTotal>" & cell1.Offset(0, 17).Value & "</ivaFavorEstadoTotal>"
Print #1, "<ivaFavorSujPassivoTotal>" & cell1.Offset(0, 18).Value & "</ivaFavorSujPassivoTotal>"
Print #1, "<ivaImportDeclarante>" & cell1.Offset(0, 19).Value & "</ivaImportDeclarante>"
Print #1, "<ivaServicosUE>" & cell1.Offset(0, 20).Value & "</ivaServicosUE>"
Print #1, "<ivaTaxaNormal>" & cell1.Offset(0, 21).Value & "</ivaTaxaNormal>"
Print #1, "<regularizacoesFavorEstado>" & cell1.Offset(0, 22).Value & "</regularizacoesFavorEstado>"
Print #1, "<regularizacoesFavorSujPassivoNaoComunicadasCobranca>" & cell1.Offset(0, 23).Value & "</regularizacoesFavorSujPassivoNaoComunicadasCobranca>"
Print #1, "<temOperacoesAdquirenteComLiqImposto>" & cell1.Offset(0, 24).Value & "</temOperacoesAdquirenteComLiqImposto>"
Print #1, "<temOperacoesComLiqImposto>" & cell1.Offset(0, 25).Value & "</temOperacoesComLiqImposto>"
Print #1, "<temOperacoesDedutiveis>" & cell1.Offset(0, 26).Value & "</temOperacoesDedutiveis>"
Print #1, "<temOperacoesSemLiqImposto>" & cell1.Offset(0, 27).Value & "</temOperacoesSemLiqImposto>"
Print #1, "</apuramento>"
Print #1, "<desenvolvimento>"
Print #1, "<operacoesPTFeitasPorContribuintesForaUE>" & cell1.Offset(0, 28).Value & "</operacoesPTFeitasPorContribuintesForaUE>"
Print #1, "<totalQuadro06A>" & cell1.Offset(0, 29).Value & "</totalQuadro06A>"
Print #1, "</desenvolvimento>"
Print #1, "<inicio>"
Print #1, "<anoDeclaracao>" & cell1.Offset(0, 30).Value & "</anoDeclaracao>"
Print #1, "<apresentouDeclRecapitulativa>" & cell1.Offset(0, 31).Value & "</apresentouDeclRecapitulativa>"
Print #1, "<localizacaoSede>" & cell1.Offset(0, 32).Value & "</localizacaoSede>"
Print #1, "<nif>" & cell1.Offset(0, 33).Value & "</nif>"
Print #1, "<nifCC>" & cell1.Offset(0, 34).Value & "</nifCC>"
Print #1, "<periodoDeclaracao>" & cell1.Offset(0, 35).Value & "</periodoDeclaracao>"
Print #1, "<prazo>" & cell1.Offset(0, 36).Value & "</prazo>"
Print #1, "<semOperacoes>" & cell1.Offset(0, 37).Value & "</semOperacoes>"
Print #1, "<temAnexoRAcores>" & cell1.Offset(0, 38).Value & "</temAnexoRAcores>"
Print #1, "<temAnexoRContinente>" & cell1.Offset(0, 39).Value & "</temAnexoRContinente>"
Print #1, "<temAnexoRMadeira>" & cell1.Offset(0, 40).Value & "</temAnexoRMadeira>"
Print #1, "</inicio>"
Print #1, "</rosto>"
Print #1, "<anexoCampo40R>"
Print #1, "<regularizacoes>"
Print #1, "<campo40Total>" & cell1.Offset(0, 41).Value & "</campo40Total>"
Print #1, "<certificacoesROC/>"
Print #1, "<lista78ANum2A/>"
Print #1, "<lista78ANum4/>"
Print #1, "<lista78BNum4/>"
Print #1, "<listaNum2E3E6>"
Print #1, "<listaNum2E3E6Item>"
Print #1, "<anoEmissao>" & cell1.Offset(0, 46).Value & "</anoEmissao>"
Print #1, "<artigo>" & cell1.Offset(0, 47).Value & "</artigo>"
Print #1, "<btRegularizacoes>" & cell1.Offset(0, 48).Value & "</btRegularizacoes>"
Print #1, "<ivaRegularizado>" & cell1.Offset(0, 49).Value & "</ivaRegularizado>"
Print #1, "<mesEmissao>" & cell1.Offset(0, 50).Value & "</mesEmissao>"
Print #1, "</listaNum2E3E6Item>"
Print #1, "</listaNum2E3E6>"
Print #1, "<listaNum7Antes2013/>"
Print #1, "<listaNum7Em2013EDepois/>"
Print #1, "<listaNum8BCDE/>"
Print #1, "</regularizacoes>"
Print #1, "</anexoCampo40R>"
Print #1, "<anexoCampo41R>"
Print #1, "<regularizacoes>"
Print #1, "<btOutrasRegularizacoes>" & cell1.Offset(0, 54).Value & "</btOutrasRegularizacoes>"
Print #1, "<campo41Total>" & cell1.Offset(0, 55).Value & "</campo41Total>"
Print #1, "<ivaOutrasRegularizacoes>" & cell1.Offset(0, 56).Value & "</ivaOutrasRegularizacoes>"
Print #1, "<lista78CNum1/>"
Print #1, "<lista78CNum3/>"
Print #1, "<listaNum12/>"
Print #1, "<listaNum3E4E6>"
Print #1, "<listaNum3E4E6Item>"
Print #1, "<artigo>" & cell1.Offset(0, 60).Value & "</artigo>"
Print #1, "<btRegularizacoes>" & cell1.Offset(0, 61).Value & "</btRegularizacoes>"
Print #1, "<ivaRegularizado>" & cell1.Offset(0, 62).Value & "</ivaRegularizado>"
Print #1, "<nif>" & cell1.Offset(0, 63).Value & "</nif>"
Print #1, "</listaNum3E4E6Item>"
Print #1, "<listaNum3E4E6Item>"
Print #1, "<listaNum7/>"
Print #1, "<listaNum8D/>"
Print #1, "</regularizacoes>"
Print #1, "</anexoCampo41R>"
Print #1, "<clientes id=""1907"">"
Print #1, "<relacao>"
Print #1, "<anoDeducao>" & cell1.Offset(0, 67).Value & "</anoDeducao>"
Print #1, "<exportacaoBens>"
Print #1, "<exportacaoBensItem>"
Print #1, "<numeroDeclaracaoExportacao>" & cell1.Offset(0, 68).Value & "</numeroDeclaracaoExportacao>"
Print #1, "<valorEuros>" & cell1.Offset(0, 69).Value & "</valorEuros>"
Print #1, "</exportacaoBens>"
Print #1, "</exportacaoBensItem>"
Print #1, "<operacoesClientesNacionais>"
Print #1, "<operacoesClientesNacionaisItem>"
Print #1, "<nifCliente>" & cell1.Offset(0, 70).Value & "</nifCliente>"
Print #1, "<valorEuros>" & cell1.Offset(0, 71).Value & "</valorEuros>"
Print #1, "</operacoesClientesNacionaisItem>"
Print #1, "</operacoesClientesNacionais>"
Print #1, "<operacoesNoEstrangeiro>" & cell1.Offset(0, 72).Value & "</operacoesNoEstrangeiro>"
Print #1, "<outrasOperacoesIsentasComDireitoDeducao>" & cell1.Offset(0, 73).Value & "</outrasOperacoesIsentasComDireitoDeducao>"
Print #1, "<periodoDeducao>" & cell1.Offset(0, 74).Value & "</periodoDeducao>"
Print #1, "<total>" & cell1.Offset(0, 75).Value & "</total>"
Next
Print #1, "</relacao>"
Print #1, "</clientes>"
Print #1, "</dpiva>"

 
Close #1

End Sub

1 Ответ

0 голосов
/ 13 января 2020

Вы можете попросить пользователя выбрать диапазон, используя тип ввода: = 8

Set rng = Application.InputBox("Select a range", "Obtain Range", Type:=8)

РЕДАКТИРОВАТЬ - в зависимости от вашего кода

Начать l oop перед тегом

Print #1, "<dpiva version=""05"" xmlns=""http://www.at.gov.pt/schemas/dpiva"">"
For Each cell1 In rng.Columns(1).Cells

Исправьте тег следующим образом

'Print #1, "<listaNum3E4E6Item>"
Print #1, "</listaNum3E4E6>"

Поменяйте местами эти 2 строки

'Print #1, "</exportacaoBens>"
'Print #1, "</exportacaoBensItem>"
Print #1, "</exportacaoBensItem>"
Print #1, "</exportacaoBens>"

Перейти к предыдущему тегу

'Next
Print #1, "</relacao>"
Print #1, "</clientes>"
Next
Print #1, "</dpiva>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...