Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cleberson Gabardo

Tenho esse codigo que gera um txt, preciso gera um xls dele.

Recommended Posts

Olá pessoalTenho esse código que gera um arquivo txt e faz uma consulta no access e grava os dados no arquivo.Acontece que os dados veem desorganizados e mesmo mudando no codigo de txt para xls ele não vem da maneira que gostaria.Private Sub TESTE()Dim sArquivoLog As StringDim Rec As Recordset sArquivoLog = App.Path & "TESTE" & Format(Now, "ddMMyyyy hhmmss") & ".txt" Open sArquivoLog For Append As 1 Set connAccess = CreateObject("ADODB.Connection") connAccess.ConnectionString = "driver={Microsoft Access Driver (*.mdb)};dbq=C:\web\PD 15804\teste oracle\bonif para teste.mdb" & ";PWD=manager" connAccess.Open Set Rec = connAccess.Execute(" SELECT DtRev01_Carteira_Data_Revenue.CNPJCliente, DtRev01_Carteira_Data_Revenue.CNPJ_RAIZ, " _ & " DtRev01_Carteira_Data_Revenue.NomeCliente,DtRev01_Carteira_Data_Revenue.NomeGrupCliente , " _ & " DtRev01_Carteira_Data_Revenue.CidadeFuncionario, DtRev01_Carteira_Data_Revenue.RegiaoFuncionario, " _ & " DtRev01_Carteira_Data_Revenue.DescricaoBU, DtRev01_Carteira_Data_Revenue.MercadoFuncionario, " _ & " DtRev01_Carteira_Data_Revenue.Grupo_Segmento, DtRev01_Carteira_Data_Revenue.Segmento, " _ & " DtRev01_Carteira_Data_Revenue.NomeFuncionario, DtRev01_Carteira_Data_Revenue.MatriculaFuncionário, " _ & " Tab_MesBase.MesBase " _ & " From DtRev01_Carteira_Data_Revenue " _ & " INNER JOIN Tab_MesBase " _ & " ON DtRev01_Carteira_Data_Revenue.MesBaseCliente = Tab_MesBase.CodigoMesBase ") Print #1, "CNPJ Cliente" & Chr(9) & "CNPJ_RAIZ" & Chr(9) & "Razão Social" & Chr(9) & "Nome Grupo Cliente" & Chr(9) & Chr(9) & Chr(9) & "Cidade" & Chr(9) & Chr(9) & "Região" & Chr(9) & "BU Resultado" & Chr(9) & "Mercado" & Chr(9) & "Grupo_Segmento" & Chr(9) & "Segmento" & Chr(9) & "Nome" & Chr(9) & "Matrícula" & Chr(9) & "Mês Base" Do While Not Rec.EOF Set RecII = connAccess.Execute("SELECT Tab_Localidade.Cidade FROM Tab_Localidade where CodigoLocalidade = " & Rec.Fields![CidadeFuncionario]) If Not RecII.EOF Then Cidade = RecII.Fields![Cidade] End If Set RecII = connAccess.Execute("SELECT Tab_Regiao.DescricaoRegiao FROM Tab_Regiao where CodigoRegiao = " & Rec.Fields![RegiaoFuncionario]) If Not RecII.EOF Then Regiao = RecII.Fields![DescricaoRegiao] End If Set RecII = connAccess.Execute("SELECT Tab_BU.DescricaoBU FROM Tab_BU where CodigoBU = " & Rec.Fields![DescricaoBU]) If Not RecII.EOF Then BU = RecII.Fields![DescricaoBU] End If Set RecII = connAccess.Execute("SELECT Tab_Mercado.DescricaoMercado FROM Tab_Mercado where CodigoMercado = " & Rec.Fields![MercadoFuncionario]) If Not RecII.EOF Then Mercado = RecII.Fields![DescricaoMercado] End If Print #1, Format(Rec.Fields![CNPJCliente], "00000000000000") & Chr(9) & Rec.Fields![CNPJ_RAIZ] & Chr(9) & Rec.Fields![NomeCliente] & Chr(9) & Rec.Fields![NomeGrupoCliente] & Chr(9) & Cidade & Chr(9) & Regiao & Chr(9) & BU & Chr(9) & Mercado & Chr(9) & Rec.Fields![Grupo_Segmento] & Chr(9) & Rec.Fields![segmento] & Chr(9) & Rec.Fields![NomeFuncionario] & Chr(9) & Rec.Fields![MatriculaFuncionário] & Chr(9) & Rec.Fields![MesBase] Rec.MoveNext Loop Close #1 End SubEntão o ele puxa os dados que preciso so quero colocar em uma formação correta devido ao tamanho dos dados serem diferentes no txt ele vem dessa formaRazão Social Nome Grupo Cliente Cidade Região BU Resultado MercadoBANCO DO BRASIL BANCO DO BRASIL BRASILIA CENTRO-OESTE CORPORATE CANAIS-CWBANCO DO BRASIL BANCO DO BRASIL BRASILIA CENTRO-OESTE CORPORATE CANAIS-CWANDRE PUCCINELLI ANDRE PUCCINELLI CAMPO GRANDE CENTRO-OESTE CORPORATE MIDDLE-CWsendo que o que preciso é desta forma aqui, mas no excelRazão Social Nome Grupo Cliente Cidade Região BU Resultado MercadoBANCO DO BRASIL BANCO DO BRASIL BRASILIA CENTRO-OESTE CORPORATE CANAIS-CWBANCO DO BRASIL BANCO DO BRASIL BRASILIA CENTRO-OESTE CORPORATE CANAIS-CWANDRE PUCCINELLI ANDRE PUCCINELLI CAMPO GRANDE CENTRO-OESTE CORPORATE MIDDLE-CWSe alguem quiser posso mandar o arquivo no excel de como tem que ser e a maneira que ele ta gerando.Se alguem puder me ajudar fico muito grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Cleberson.

 

Para enviar para um arquivo xls é um pouco diferente de como envia para um arquivo txt mesmo, primeiro a biblioteca que você deve fazer referência é na microsoft excel 11.0 object library.

 

Agora vamos ao código para passar:

Dim xl As New Excel.ApplicationDim xlw As Excel.WorkbookSet xlw = xl.Workbooks.Open("\\it03\o.s\O.S.xls")xlw.Application.Visible = TrueRange("coluna" & célula).FormulaR1C1Local = TEXTO_A_PASSAR
Por exemplo:

range("a" & 1).FORMULAR1C1LOCAL = Format(Rec.Fields![CNPJCliente], "00000000000000")

 

Ai o que você pode fazer para não precisar ficar especificando a linha, já que provavelmente não saiba quantas linhas vai precisar:

for i = 0 to rec.recordcount step 1   range("a" & i).FORMULAR1C1LOCAL = Format(Rec.Fields![CNPJCliente], "00000000000000")   rec.movenextnext
Somente para a coluna ai acredito que não tenha jeito, isso você precisa especificar mesmo, mas acho que é de menos né, as colunas terão quantidade exata sempre.

 

Bom, se era isso mesmo que estava precisando espero ter ajudado, caso não era, avisa ai que no quer possível a gente ajuda.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá ClaudioSou iniciante em vb e me deram esse projeto para fazer, estou me virando como posso, graças ao forum ja tenho mais noção.Eu entendi oq seu codigo faz so não sei bem como usar ele,se possivel poderia comentar o codigo para eu entender oq cada parte faz?Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá ClaudioSou iniciante em vb e me deram esse projeto para fazer, estou me virando como posso, graças ao forum ja tenho mais noção.Eu entendi oq seu codigo faz so não sei bem como usar ele,se possivel poderia comentar o codigo para eu entender oq cada parte faz?Muito obrigado

Opa, com certeza...Dim xl As New Excel.ApplicationDim xlw As Excel.WorkbookSet xlw = xl.Workbooks.Open("caminho\arquivo.xls") 'aqui você abrirá o arquivo que quer passar os valores (tentei descobrir como faço para criar um novo arquivo, mas não consegui. Mas de alguma forma deve dar, já que para txt dá.xlw.Application.Visible = True 'para abrir o aplicativoRange("coluna" & célula).FormulaR1C1Local = TEXTO_A_PASSAR 'seleciona a coluna e a célula para passar as informaçõesIsso aqui você somente substituirá pela parte que passou os valores para o notepad. A parte de conexão com o banco continuará igual, então ficará assim:
Private Sub TESTE()Dim Rec As RecordsetDim xl As New Excel.ApplicationDim xlw As Excel.WorkbookSet connAccess = CreateObject("ADODB.Connection")connAccess.ConnectionString = "driver={Microsoft Access Driver (*.mdb)};dbq=C:\web\PD 15804\teste oracle\bonif para teste.mdb" & ";PWD=manager"connAccess.OpenSet Rec = connAccess.Execute(" SELECT DtRev01_Carteira_Data_Revenue.CNPJCliente, DtRev01_Carteira_Data_Revenue.CNPJ_RAIZ, " _& " DtRev01_Carteira_Data_Revenue.NomeCliente,DtRev01_Carteira_Data_Revenue.NomeGrupCliente , " _& " DtRev01_Carteira_Data_Revenue.CidadeFuncionario, DtRev01_Carteira_Data_Revenue.RegiaoFuncionario, " _& " DtRev01_Carteira_Data_Revenue.DescricaoBU, DtRev01_Carteira_Data_Revenue.MercadoFuncionario, " _& " DtRev01_Carteira_Data_Revenue.Grupo_Segmento, DtRev01_Carteira_Data_Revenue.Segmento, " _& " DtRev01_Carteira_Data_Revenue.NomeFuncionario, DtRev01_Carteira_Data_Revenue.MatriculaFuncionário, " _& " Tab_MesBase.MesBase " _& " From DtRev01_Carteira_Data_Revenue " _& " INNER JOIN Tab_MesBase " _& " ON DtRev01_Carteira_Data_Revenue.MesBaseCliente = Tab_MesBase.CodigoMesBase")Set xlw = xl.Workbooks.Open("caminho\arquivo.xls")xlw.Application.Visible = TrueRange("a" & 1).FormulaR1C1Local = "CNPJ Cliente"Range("b" & 1).FormulaR1C1Local = "CNPJ_Raiz"Range("c" & 1).FormulaR1C1Local = "Razao Social"Range("d" & 1).FormulaR1C1Local = "Nome Grupo Cliente"Range("e" & 1).FormulaR1C1Local = "Cidade"Range("f" & 1).FormulaR1C1Local = "Região"Range("g" & 1).FormulaR1C1Local = "BU Resultado"Range("h" & 1).FormulaR1C1Local = "Mercado"Range("i" & 1).FormulaR1C1Local = "Grupo_Segmento"Range("j" & 1).FormulaR1C1Local = "Segmento"Range("k" & 1).FormulaR1C1Local = "Nome"Range("l" & 1).FormulaR1C1Local = "Matrícula"Range("m" & 1).FormulaR1C1Local = "Mês Base"Do While Not Rec.EOFSet RecII = connAccess.Execute("SELECT Tab_Localidade.Cidade FROM Tab_Localidade where CodigoLocalidade = " & Rec.Fields![CidadeFuncionario])If Not RecII.EOF ThenCidade = RecII.Fields![Cidade]End IfSet RecII = connAccess.Execute("SELECT Tab_Regiao.DescricaoRegiao FROM Tab_Regiao where CodigoRegiao = " & Rec.Fields![RegiaoFuncionario])If Not RecII.EOF ThenRegiao = RecII.Fields![DescricaoRegiao]End IfSet RecII = connAccess.Execute("SELECT Tab_BU.DescricaoBU FROM Tab_BU where CodigoBU = " & Rec.Fields![DescricaoBU])If Not RecII.EOF ThenBU = RecII.Fields![DescricaoBU]End IfSet RecII = connAccess.Execute("SELECT Tab_Mercado.DescricaoMercado FROM Tab_Mercado where CodigoMercado = " & Rec.Fields![MercadoFuncionario])If Not RecII.EOF ThenMercado = RecII.Fields![DescricaoMercado]End Ifconn.cursorlocation = aduserclientdim ii = rec.absoluteposition Range("a" & i).FormulaR1C1Local = Format(Rec.Fields![CNPJCliente], "00000000000000") Range("b" & i).FormulaR1C1Local = Rec.Fields![CNPJ_RAIZ] Range("c" & i).FormulaR1C1Local = "Razao Scial" Range("d" & i).FormulaR1C1Local = Rec.Fields![NomeGrupoCliente] Range("e" & i).FormulaR1C1Local = Cidade Range("f" & i).FormulaR1C1Local = Região Range("g" & i).FormulaR1C1Local = BU Range("h" & i).FormulaR1C1Local = Mercado Range("i" & i).FormulaR1C1Local = Rec.Fields![Grupo_Segmento] Range("j" & i).FormulaR1C1Local = Rec.Fields![Segmento] Range("k" & i).FormulaR1C1Local = Rec.Fields![NomeFuncionario] Range("l" & i).FormulaR1C1Local = Rec.Fields![MatriculaFuncionário] Range("m" & i).FormulaR1C1Local = Rec.Fields![MesBase]Rec.MoveNextconn.cursonlocation = aduseserverLoopEnd Sub
Tente fazer dessa forma, se der algum erro me dê um toque, não entendi muito seu código na parte das conexões, então talvez eu tenha feito alguma coisa errada, caso sim me avise que tento corrigir.Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.