EXPORTAR DADOS PARA OUTRA PASTA DE TRABALHO
Olá pessoal,
Preciso exportar dados para outro arquivos de nomes especÃficos alimentando campos também especÃficos utilizando um botão de comando VBA. Estou deixando em anexo arquivos modelo e um link de um vÃdeo onde mostro com mais detalhe o que não estou conseguindo fazer.
Desde já agradeço.
vÃdeo explicativo: https://drive.google.com/file/d/0BznW01GdKw27S29WbXd6eVZ4VG8/view?usp=sharing
Preciso exportar dados para outro arquivos de nomes especÃficos alimentando campos também especÃficos utilizando um botão de comando VBA. Estou deixando em anexo arquivos modelo e um link de um vÃdeo onde mostro com mais detalhe o que não estou conseguindo fazer.
Desde já agradeço.
vÃdeo explicativo: https://drive.google.com/file/d/0BznW01GdKw27S29WbXd6eVZ4VG8/view?usp=sharing
Ok, vi os modelos e seu vÃdeo, e minha pergunta é: O que você não está conseguindo fazer?
Transferir as informações da tabela dinâmica para os arquivos respectivos nos campos mostrados no vÃdeo, de forma que ao clicar no botão de comando do arquivo da tabela dinâmica, alimente as informações necessárias nos outros arquivos externos automaticamente sem a necessidade de abri-los.
Citação::
Transferir as informações da tabela dinâmica para os arquivos respectivos nos campos mostrados no vÃdeo, de forma que ao clicar no botão de comando do arquivo da tabela dinâmica, alimente as informações necessárias nos outros arquivos externos automaticamente sem a necessidade de abri-los.
Basicamente o que você sabe é adicionar o botão então...
Fiz alguns testes aqui, mas sem sucesso, preferi não deixá-los no exemplo, pois acredito que não acrescentaria muito de tanto erro que dava. E cheguei a conclusão que sim, pra esse caso, infelizmente eu só sei adicionar o botão. é evidente que meu conhecimento em VBA não chega nem perto do que maioria aqui é capaz de fazer. Por isso pedi ajuda, na qual, é uma das finalidades do fórum, ou seja, ajudar, compartilhar arquivos e idéias, etc...
Em anexo, segue um dos exemplos que tentei. Ele faz mais ou menos o que eu queria, porém, ele transfere os dados para outra aba de mesma pasta de trabalho e não para outra pasta de trabalho externa.
No mais, quem puder realmente me ajudar, eu desde já agradeço.
Obrigado...
Em anexo, segue um dos exemplos que tentei. Ele faz mais ou menos o que eu queria, porém, ele transfere os dados para outra aba de mesma pasta de trabalho e não para outra pasta de trabalho externa.
No mais, quem puder realmente me ajudar, eu desde já agradeço.
Obrigado...
Ok, o que você precisa é entender o conceito básico do excel: Cada arquivo(que é chamado de WorkBook), contém N planilhas(que são chamadas WorkSheet), então, tudo que você precisa fazer é abrir o WorkBook e passar os dados na WorkSheet desejada:
Aqui, entra mais uma vez, o conceito de OOP. Cada arquivo do excel é um objeto, que contém uma List<T> onde T é um objeto Workbook. Cada Workbook por sua vez, contém uma List<T>, onde T é um objeto Worksheet. Cada objeto Worksheet, contém uma List<T>, onde T é uma célula, indicada por coordenadas bi-dimensionais(linha e coluna. Então uma célula é Workbook(arquivo).Worksheet(planilha).Cells(linha, coluna). Cada célula contém várias propriedades, como fonte, valor, fórmula, cor de fundo, cor da fonte, formato de dados e muitas outras. Todas essas propriedades podem ser acessadas pelo VBA e é o que está acontecendo acima.
Eu reforço todas as vezes para que sempre estudem OOP, que entendam como funciona. é a única maneira de entender TUDO. Porque tudo é sempre OOP. C#, VB.NET, ASP.NET, VBA(não diretamente, mas o que ele trabalha é OOP), então é essa a chave do conhecimento. Muitos e muitos são os casos de coisas que vejo no fórum, uma situação que nunca passei, mas simplesmente por entender como funciona OOP, tenho sempre o caminho das pedras de como fazer. Não é poque eu já passei por todas essas coisas, ao contrário, a maioria não, mas por saber OOP, nada é mistério. Então, mais uma vez, estude e entenda OOP, é a chave de saber fazer qualquer coisa, aprender qualquer coisa, e trabalhar com qualquer coisa.
[ô][ô][ô][ô][ô]Definindo objetos
Dim Alvo As Workbook [ô]A planilha no qual os dados serão colocados
Dim Fonte As Workbook [ô]A planilha no qual os dados estão
Dim Alvo_Path As String
[ô][ô][ô][ô][ô]Passando o caminho completo do arquivo na variável [Ô]Alvo_Path[Ô]
Alvo_Path = [Ô]D:\Pasta\SubPasta\Arquivo.xlsx[Ô]
Set Alvo = Workbooks.Open(Target_Path)
Set Fonte = ThisWorkbook
[ô][ô][ô][ô][ô]Agora é possÃvel ler e gravar qualquer coisa, tanto no alvo, quanto no fonte, inclusive passando dados de um para outro
dados = Fonte.Sheets(1).Cells(1, 1) [ô]Sheets(1) se refere à primeira planilha, pode-se usar o nome dela também, se preferir. [Ô]Cells(1, 1)[Ô], se refere a coluna 1, linha 1
Alvo.Sheets(1).Cells(1, 1) = dados [ô]o mesmo caso acima, mas ao invés de atribuir o valor à uma variável, estou atribuindo o valor à célula
[ô][ô][ô][ô][ô]Fechando e salvando as planilhas
Alvo.Save
Fonte.Save
Set Alvo = Nothing
Aqui, entra mais uma vez, o conceito de OOP. Cada arquivo do excel é um objeto, que contém uma List<T> onde T é um objeto Workbook. Cada Workbook por sua vez, contém uma List<T>, onde T é um objeto Worksheet. Cada objeto Worksheet, contém uma List<T>, onde T é uma célula, indicada por coordenadas bi-dimensionais(linha e coluna. Então uma célula é Workbook(arquivo).Worksheet(planilha).Cells(linha, coluna). Cada célula contém várias propriedades, como fonte, valor, fórmula, cor de fundo, cor da fonte, formato de dados e muitas outras. Todas essas propriedades podem ser acessadas pelo VBA e é o que está acontecendo acima.
Eu reforço todas as vezes para que sempre estudem OOP, que entendam como funciona. é a única maneira de entender TUDO. Porque tudo é sempre OOP. C#, VB.NET, ASP.NET, VBA(não diretamente, mas o que ele trabalha é OOP), então é essa a chave do conhecimento. Muitos e muitos são os casos de coisas que vejo no fórum, uma situação que nunca passei, mas simplesmente por entender como funciona OOP, tenho sempre o caminho das pedras de como fazer. Não é poque eu já passei por todas essas coisas, ao contrário, a maioria não, mas por saber OOP, nada é mistério. Então, mais uma vez, estude e entenda OOP, é a chave de saber fazer qualquer coisa, aprender qualquer coisa, e trabalhar com qualquer coisa.
Coloquei o código aqui, mas, quando fui compilar ele não reconheceu o caminho.
Tenho outras dúvidas:
- Tenho que mandar os dados célula por célula? Como faço para o código entender qual é a última linha e preencher a coluna onde tiver dados?
- Como faço para o código reconhecer quais dados são referente aquele arquivo (cidade) para que o mesmo só copie os relativos à quela cidade?
- E reconhecendo o arquivo da cidade, como faço para as informações na coluna da aba [Ô]Aba para K[Ô] identifique os centros de custos começados com [Ô]1[Ô] e aba [Ô]Aba para F[Ô] entrar as informações centros de custos começados com [Ô]7[Ô] para que assim leve somente os dados restritos por cidade de tipo de centro de custos conforme falando anteriormente?
Obrigado
Tenho outras dúvidas:
- Tenho que mandar os dados célula por célula? Como faço para o código entender qual é a última linha e preencher a coluna onde tiver dados?
- Como faço para o código reconhecer quais dados são referente aquele arquivo (cidade) para que o mesmo só copie os relativos à quela cidade?
- E reconhecendo o arquivo da cidade, como faço para as informações na coluna da aba [Ô]Aba para K[Ô] identifique os centros de custos começados com [Ô]1[Ô] e aba [Ô]Aba para F[Ô] entrar as informações centros de custos começados com [Ô]7[Ô] para que assim leve somente os dados restritos por cidade de tipo de centro de custos conforme falando anteriormente?
Obrigado
[Ô]Não reconheceu o caminho[Ô], isso significa que ou o caminho está errado ou o nome da planilha(Arquivo)
Tenho que mandar os dados célula por célula?
- Não, você pode fazer algum loop para percorrer toda uma planilha.
Como faço para o código entender qual é a última linha e preencher a coluna onde tiver dados?
- Use o [Ô]if[Ô], se tiver dados ou não
Como faço para o código reconhecer quais dados são referente aquele arquivo (cidade) para que o mesmo só copie os relativos à quela cidade?
- Novamente, use um if
E reconhecendo o arquivo da cidade, como faço para as informações na coluna da aba [Ô]Aba para K[Ô] identifique os centros de custos começados com [Ô]1[Ô] e aba [Ô]Aba para F[Ô] entrar as informações centros de custos começados com [Ô]7[Ô] para que assim leve somente os dados restritos por cidade de tipo de centro de custos conforme falando anteriormente?
- Novamente, use um if
Vi outros tópicos seus, são na maioria relacionados à VBA e vários deles usam If. Você sabe fazer um condicional [Ô]if[Ô]?
Tenho que mandar os dados célula por célula?
- Não, você pode fazer algum loop para percorrer toda uma planilha.
Como faço para o código entender qual é a última linha e preencher a coluna onde tiver dados?
- Use o [Ô]if[Ô], se tiver dados ou não
Como faço para o código reconhecer quais dados são referente aquele arquivo (cidade) para que o mesmo só copie os relativos à quela cidade?
- Novamente, use um if
E reconhecendo o arquivo da cidade, como faço para as informações na coluna da aba [Ô]Aba para K[Ô] identifique os centros de custos começados com [Ô]1[Ô] e aba [Ô]Aba para F[Ô] entrar as informações centros de custos começados com [Ô]7[Ô] para que assim leve somente os dados restritos por cidade de tipo de centro de custos conforme falando anteriormente?
- Novamente, use um if
Vi outros tópicos seus, são na maioria relacionados à VBA e vários deles usam If. Você sabe fazer um condicional [Ô]if[Ô]?
E outra coisa, não faça simplesmente copiar e colar código, não é assim que deve ser. Código aqui, são só para dar uma luz, uma idéia de como fazer. Não espere código prontinho.
Pablo, como o Kerplunk falou, o teu problema é basicamente de lógica de programação.
Antes de qualquer coisa, tu precisa dividir o teu problema em vários passos menores. Esse passo é fundamental para resolver qualquer tarefa que venham a te passar na programação.
Se tu souber utilizar C# ou VB.NET, as coisas ficarão mais fáceis, pois as técnicas de programação orientada a objetos estão ai para facilitar nossa vida. Sugiro os vÃdeos do Kerplunk.
Eu também não sei o [Ô]quanto dinâmica[Ô] a planilha [Ô]exportar dados[Ô] é. A disposição das colunas é sempre a mesma? Os dados sempre começam na linha #6?
O primeiro passo é ler [Ô]todo[Ô] (a parte que te interessa) o conteúdo da planilha de leitura e armazenar em uma variável. Isso fará com que todo o processo se torne mais rápido.
Há inúmeras maneiras de fazer isso. Tudo depende de qual linguagem de programação tu está usando e qual o teu conhecimento.
Se puder utilizar uma linguagem que permita programação orientada a objetos, como VB.NET ou C#, teu código ficará bem mais lógico e de fácil compreensão, o que facilita muito a manutenção no futuro.
Mas, supondo que tu esteja usando somente o VBA, e não faça nenhuma questão de utilizar alguma outra, acho que um vetor pode lhe servir (me desculpe Kerplunk).
Vale a pena registrar que seria ideal o uso de Classes e Colections, principalmente para fazer leitura dos dados na hora de inseri-los nas outras planilhas. Mas veja tua necessidade e decida.
O código abaixo, feito em VBA, faz a leitura da planilha exportar dados.xlsm e armazena os dados em um vetor.
Assim, o passo seguinte seria a escrita desses dados nas outras planilhas.
Antes de qualquer coisa, tu precisa dividir o teu problema em vários passos menores. Esse passo é fundamental para resolver qualquer tarefa que venham a te passar na programação.
Se tu souber utilizar C# ou VB.NET, as coisas ficarão mais fáceis, pois as técnicas de programação orientada a objetos estão ai para facilitar nossa vida. Sugiro os vÃdeos do Kerplunk.
Eu também não sei o [Ô]quanto dinâmica[Ô] a planilha [Ô]exportar dados[Ô] é. A disposição das colunas é sempre a mesma? Os dados sempre começam na linha #6?
O primeiro passo é ler [Ô]todo[Ô] (a parte que te interessa) o conteúdo da planilha de leitura e armazenar em uma variável. Isso fará com que todo o processo se torne mais rápido.
Há inúmeras maneiras de fazer isso. Tudo depende de qual linguagem de programação tu está usando e qual o teu conhecimento.
Se puder utilizar uma linguagem que permita programação orientada a objetos, como VB.NET ou C#, teu código ficará bem mais lógico e de fácil compreensão, o que facilita muito a manutenção no futuro.
Mas, supondo que tu esteja usando somente o VBA, e não faça nenhuma questão de utilizar alguma outra, acho que um vetor pode lhe servir (me desculpe Kerplunk).
Vale a pena registrar que seria ideal o uso de Classes e Colections, principalmente para fazer leitura dos dados na hora de inseri-los nas outras planilhas. Mas veja tua necessidade e decida.
O código abaixo, feito em VBA, faz a leitura da planilha exportar dados.xlsm e armazena os dados em um vetor.
Assim, o passo seguinte seria a escrita desses dados nas outras planilhas.
[ô]Enumeracao que guarda os valores das colunas
Private Enum eColunas
Cidade = 1
Item = 2
NumeroServico = 3
Descricao = 4
CentroCusto = 5
SomaTotal = 6
End Enum
[ô]Type para lidar melhor com o vetor
Private Type tDados
Cidade As String
Item As String
NumeroServico As String
Descricao As String
CentroCusto As String
SomaTotal As String
End Type
[ô]Constante que indica a primeira linha que contem os dados que iremos iniciar
Private Const inicioDados = 6
Private Sub CommandButton1_Click()
Dim objWorkBook As Workbook
Dim objWorkSheet As Worksheet
Dim objRange As Range
[ô]
Dim vDados() As tDados
Dim iIndice As Integer
[ô]
Dim iLinhas As Integer
[ô]
iIndice = 0
[ô]
[ô]Workbook = arquivo do excel aberto
Set objWorkBook = Application.ActiveWorkbook
[ô]Worksheet = planilha selecionada dentro deste arquivo aberto
Set objWorkSheet = Application.ActiveSheet
[ô]UsedRange = intervalo que foi utilizado com dados.
[ô]é uma boa usar essa propriedade nativa em vez de ficar varrendo a planilha inteira
Set objRange = objWorkSheet.UsedRange
[ô]
[ô]Loop para varrer todas as linhas preenchidas
[ô]Lembrando que começa na linha [Ô]inicioDados[Ô]
For iLinhas = inicioDados To objRange.Rows.Count
[ô]
[ô]Aumenta o tamanho do nosso vetor
ReDim Preserve vDados(iIndice + 1)
[ô]
[ô]Preenche o vetor com os valores da planilha
vDados(iIndice).Cidade = objRange(iLinhas, eColunas.Cidade).Value
vDados(iIndice).Item = objRange(iLinhas, eColunas.Item).Value
vDados(iIndice).NumeroServico = objRange(iLinhas, eColunas.NumeroServico).Value
vDados(iIndice).Descricao = objRange(iLinhas, eColunas.Descricao).Value
vDados(iIndice).CentroCusto = objRange(iLinhas, eColunas.CentroCusto).Value
vDados(iIndice).SomaTotal = objRange(iLinhas, eColunas.SomaTotal).Value
[ô]
iIndice = iIndice + 1
[ô]
Next
[ô]
[ô]Sempre lembrando de liberar os objetos
Set objWorkBook = Nothing
Set objWorkSheet = Nothing
Set objRange = Nothing
[ô]
End Sub
Como aplico esse código. Coloquei-o mas, não tá alimentando. Estou postando o arquivo para análise se possÃvel.
Eu também não sei o [Ô]quanto dinâmica[Ô] a planilha [Ô]exportar dados[Ô] é. A disposição das colunas é sempre a mesma? Os dados sempre começam na linha #6?
Sim, ela ficará assim mesmo, não muda. O que pode acontecer é um eventual aumento de linhas. Vou tentar explicar melhor o processo:
No código você identificou todas as colunas, que foi ótimo para eu saber como funciona para aplicações futuras.
Mas, a ideia é que a Coluna B (exportar dados) alimente a coluna A (arquivo Governador_Valadares, guia Aba para K e Aba para F)
Coluna I (exportar dados) alimente a coluna F (arquivo Governador_Valadares, guia Aba para K e Aba para F))
Coluna E (exportar dados) alimente a coluna E (arquivo Governador_Valadares, guia Aba para K e Aba para F))
Coluna B (exportar dados) alimente a coluna B (arquivo Governador_Valadares, guia Aba Geral, mas, ignorando os valores de itens duplicados, ou seja, somente um item exclusivo, dos relacionados nas outras duas guias)
Isso o código entendendo e buscando somente os valores referente a Governador Valadares, e também alimente o arquivo de Aimorés com seus respectivos valores
OBS:
- No arquivo Governador_Valadares a guia Aba para F deve conter as informações onde na coluna E da dinâmica comece com [Ô]7[Ô]
- No arquivo Governador_Valadares a guia Aba para K deve conter as informações onde na coluna E da dinâmica comece com [Ô]1[Ô]
A mesma coisa vale para o arquivo de Aimorés. Mandei os dois arquivos dessas cidades só mesmo pra saber como faço para acrescentar mais arquivos de outras cidades posteriormente, pois ao rodar o código ele alimentaria todos os arquivos de uma vez.
A inserção desses valores devem alimentar os arquivos fechados. No caso o código abriria o arquivo transferiria os dados, salva e fecha automaticamente.
Obrigado...
Eu também não sei o [Ô]quanto dinâmica[Ô] a planilha [Ô]exportar dados[Ô] é. A disposição das colunas é sempre a mesma? Os dados sempre começam na linha #6?
Sim, ela ficará assim mesmo, não muda. O que pode acontecer é um eventual aumento de linhas. Vou tentar explicar melhor o processo:
No código você identificou todas as colunas, que foi ótimo para eu saber como funciona para aplicações futuras.
Mas, a ideia é que a Coluna B (exportar dados) alimente a coluna A (arquivo Governador_Valadares, guia Aba para K e Aba para F)
Coluna I (exportar dados) alimente a coluna F (arquivo Governador_Valadares, guia Aba para K e Aba para F))
Coluna E (exportar dados) alimente a coluna E (arquivo Governador_Valadares, guia Aba para K e Aba para F))
Coluna B (exportar dados) alimente a coluna B (arquivo Governador_Valadares, guia Aba Geral, mas, ignorando os valores de itens duplicados, ou seja, somente um item exclusivo, dos relacionados nas outras duas guias)
Isso o código entendendo e buscando somente os valores referente a Governador Valadares, e também alimente o arquivo de Aimorés com seus respectivos valores
OBS:
- No arquivo Governador_Valadares a guia Aba para F deve conter as informações onde na coluna E da dinâmica comece com [Ô]7[Ô]
- No arquivo Governador_Valadares a guia Aba para K deve conter as informações onde na coluna E da dinâmica comece com [Ô]1[Ô]
A mesma coisa vale para o arquivo de Aimorés. Mandei os dois arquivos dessas cidades só mesmo pra saber como faço para acrescentar mais arquivos de outras cidades posteriormente, pois ao rodar o código ele alimentaria todos os arquivos de uma vez.
A inserção desses valores devem alimentar os arquivos fechados. No caso o código abriria o arquivo transferiria os dados, salva e fecha automaticamente.
Obrigado...
Tópico encerrado , respostas não são mais permitidas