Como unificar várias pastas de trabalho do Excel? - Microsoft Office - Forum do BABOO
Criado por Lex-Underground, Jun 18 2012 11:29 AM
Script para pastas do excel
Publicado 18 June 2012 - 11:29 AM
Publicado 18 June 2012 - 09:59 PM
http://www.babooforu...ost__p__3176403
Publicado 21 June 2012 - 09:26 PM
Esses relatório (formulários) possuem a mesma formatação? Como eles estão armazenados: estão cada uma numa Planilha (guia) de uma Pasta de Trabalho ou estão em Pastas de Trabalho (arquivos) diferentes? Poderia disponibilizar um com dados fictícios como modelo?
Publicado 22 June 2012 - 09:08 AM
Caro felipebenza,
Os formulários possuem a mesma formatação, eles são armazenados em pastas de trabalho (arquivos) diferentes.
Eu não consegui anexar um modelo que eu preenchi a nível de exemplo, quando tento anexar o fórum diz que eu não tenho permissão para carregar este tipo de arquivo.
Será que você pode me passar seu e-mail? Eu poderia enviar um modelo pra você.
Caro marcelokai,
Eu copiei o código e tentei executar pelo Vbsedit, não funcionou, salvei o arquivo como .vbs e apresentou uma mensagem de erro ao executar o script, eu vou anexar o print da mensagem.
Obs.: Eu alterei o caminho da pasta onde procurar os arquivos.
Como falei ao felipebenza, eu tentei anexar um modelo do arquivo, mas não tenho permissão para isso no fórum entao se você puder e quiser eu posso enviar um modelo para o seu e-mail.
Editado por Lex-Underground, 22 June 2012 - 09:08 AM.
Publicado 22 June 2012 - 09:01 PM
http://www.ambienteo...o_e_uma_tabela/
Publicado 25 June 2012 - 09:49 AM
Caro felipebenza ,Obrigado pela dica.A segunda macro é mais ou menos o que estou procurando, a que gera uma base de dados a partir de várias planilhas. A diferença é que no meu caso eu preciso buscar as informações de várias pastas de trabalho diferentes, ou seja, são vários arquivos diferentes.O coordenador criou uma pasta de trabalho com o formulário em branco, quando um funcionário o preenche ele não salva em uma planilha adicional na pasta de trabalho, ele salva como uma nova pasta de trabalho do excel e envia este arquivo ao coordenador por e-mail, que por sua vez salva estas pastas de trabalho em um diretório em seu computador.Pelo que entendi a linha que eu preciso editar é a seguinte:'Atribui à wsResumo a Planilha de uma nova Pasta de Trabalho criada'com apenas uma Planilha:Set wsResumo = Workbooks.Add(xlWBATWorksheet).Sheets(1)Mas não sei qual o parâmetro eu utilizo para ele buscar as informações em várias pastas de trabalho. Talvez tenha usar um "For Each" mas nao sei qual seria o parâmetro.Se puder me ajudar com relação a isso eu agradeço.
Publicado 25 June 2012 - 12:12 PM
Caro felipebenza ,Eu tentei copiar o trecho de um código com um loop para procurar arquivos e acrescentar o código deste link que você me passou, só que quando eu executo o Visual Basic exibe uma mensagem: "Erro de compilação: Inválido fora de um procedimento" .Tentei fazer desta maneira:Option ExplicitDim vItem As Variant 'Declara a primeira variavel como VariantWith Application.FileSearch 'Loop para localizar arquivos.Filename = strFileName 'strFileName é a variável que assume o nome do arquivo.LookIn = "D:\Planilhas\Teste_MONTAGEM_MACRO".SearchSubFolders = True 'Inclui busca em subdiretorios.Execute 'Executa a Função de procuraFor Each vItem In .FoundFiles 'assume para cada Vitem o nome dos arquivos encontradosDim xlw As Excel.Workbook 'Declara a Variavel XLW prepara grupo de trabalho no novo aplicativo de excel abertoSet xlw = xl.Workbooks.Open(vItem) 'Assume a Variavel VItem como novo grupo de trabalho do aplicativo excel abertoSub GeraBaseDeDados(xlw) 'Endereço dos campos buscados nas Planilhas padrões:	Const sNome As String = "E5"	Const sIdade As String = "E7"	Const sCidade As String = "E11"	Const sCor As String = "E9" Dim lRow As Long	Dim wb As Workbook	Dim wsResumo As Worksheet	Dim ws As Worksheet 'Atribui à wsResumo a Planilha de uma nova Pasta de Trabalho criada	'com apenas uma Planilha:	Set wsResumo = Workbooks.Add(xlWBATWorksheet).Sheets(1) 'Constrói cabeçalho da base de dados:	wsResumo.Range("A1:D1") = Array("Nome", "Idade", "Cidade", "Cor") 'A linha 1 é o cabeçalho	lRow = 2 For Each ws In ThisWorkbook.Worksheets	wsResumo.Cells(lRow, "A") = ws.Range(sNome)	wsResumo.Cells(lRow, "B") = ws.Range(sIdade)	wsResumo.Cells(lRow, "C") = ws.Range(sCidade)	wsResumo.Cells(lRow, "D") = ws.Range(sCor)	lRow = lRow + 1	Next ws 'Redimensiona colunas (opcional):	wsResumo.Columns.AutoFitEnd SubSet xlw = Nothing 'Zera a variavel xlw' Kill vItem 'Deleta o Arquivo dentro do caminho da varivel vItemNext vItem 'Calcula a proxima variavel vItemEnd With 'Vai retornar o Looping de busca dos arquivos XLS até achar todosAlguma idéia?
Publicado 26 June 2012 - 06:05 PM
Lex, o código que você tentou mudar não diz respeito aos objetos alvo que serão lidos, mas sim da Pasta de Trabalho criada para apresentar a nova base de dados.Experimente adaptar o código abaixo:
Set fld = fld.GetFolder("c:\pasta\formularios\")
Select Case Extensão(fl.Name)
Case "xls", "xlsx", "xlsm"
Set wb = Workbooks.Open(fl.Path)
Function Extensão(ByVal str As String) As String
'Retorna a extensão de um arquivo em mínusculas
'Exemplo: Para Pasta1.Xls é retornado xls
l = InStr(1, str, ".")
Extensão = Mid(str, InStrRev(str, ".") + 1)
Na sua última postagem, você está usando o objeto FileSearch para varrer arquivos numa pasta. Não recomendo o uso do mesmo porque ele não está mais presente no Excel 2007 nem no 2010.Para saber mais sobre laços num caminho, veja: http://www.ambienteo...uivos_e_pastas/
Publicado 27 June 2012 - 10:29 AM
Felipe,Eu utilizei esse código, mas o VBA está apresentando uma mensagem de erro em tempo de execução eu vou postar o print da tela. Pelo que li clicando no botão "Ajuda" ele explica que não foi atribuída uma referência a variável do tipo objeto, usando a instrução "Set" .Eu não tenho muito conhecimento em programação, mas pelo que vi no código a única variável do tipo "Objeto" que não possui uma instrução "Set" é a "fl" utilizada no laço, eu tentei algumas combinações com ela, do tipo, Set fl = fld.Files mas não deu certo.Obs.: Quando eu executo esse código ele abri uma nova planilha com o cabeçalho, mas não consegue inserir as informações dos formulários.Vou continuar tentando aqui, se você tiver alguma idéia também será muito bem-vinda, até porque já perguntei a vários colegas e ninguem pode me ajudar rsrs, vlw.
Publicado 27 June 2012 - 04:38 PM
Na sua captura de tela não consegui ver em qual linha o código está dando erro. Qual linha é?E mais um detalhe: você alterou o caminho da pasta:Set fld = fld.GetFolder("c:\pasta\formularios\") para o caminho onde estão suas Pastas de Trabalho, certo?