Jump to content

Ganhe $$$ escrevendo tutoriais para nós!


Foto

Como unificar várias pastas de trabalho do Excel?

Script para pastas do excel




  • Faça login para responder
18 respostas neste tópico

#1 Lex-Underground

Lex-Underground
  • Participante
  • 57 mensagens

Publicado 18 June 2012 - 11:29 AM

Olá colegas do fórum,

Estou com uma situação para resolver e não consegui encontrar uma solução para a mesma. Aqui na empresa foi criado no excel um formulário para os funcionários preencherem quando observarem algum processo na rotina da empresa que não estejam conforme, "Relatórios de não conformidade".

Já foram criados uma quantidade razoável de relatórios, e meu chefe quer conseguir visualizar todos os relatórios em um única planilha, onde todas as informações seriam inseridas de forma linear na planilha do tipo: Numeração do documento, responsável, situação etc essas informações seriam capituradas de cada formulário e inseridas nas linhas de uma nova planilha, enfim cada linha na nova planilha seria correspondente a um formulário diferente.

Eu encontrei um código para fazer algo assim na internet, mas está apresento erro quando eu executo o script, no seguinte link:
http://qbexcel.blogs...o-planilha.html

Gostaria da ajuda de vocês para conseguir uma solução para esta situação.

Desde já agradeço a ajuda de todos os colegas.
The One




#2 marcelokai

marcelokai
  • Participante
  • 483 mensagens

Publicado 18 June 2012 - 09:59 PM

Boa noite!!

Segue este link:

http://www.babooforu...ost__p__3176403

Veja se lhe atende!!

Boa sorte!
O truque da filosofia é começar por algo tão simples que ninguém ache digno de nota e terminar por algo tão complexo que ninguém entenda.
https://www.facebook...o.goncalves.756

#3 felipebenza

felipebenza
  • Participante
  • 61 mensagens

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?

#4 Lex-Underground

Lex-Underground
  • Participante
  • 57 mensagens

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ê.

Obrigado pela ajuda.

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.

Obrigado pela ajuda.

Attached Thumbnails

  • erro_script.JPG

Editado por Lex-Underground, 22 June 2012 - 09:08 AM.
''

The One

#5 felipebenza

felipebenza
  • Participante
  • 61 mensagens

Publicado 22 June 2012 - 09:01 PM


#6 Lex-Underground

Lex-Underground
  • Participante
  • 57 mensagens

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.
The One

#7 Lex-Underground

Lex-Underground
  • Participante
  • 57 mensagens

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 Explicit
Dim vItem As Variant 'Declara a primeira variavel como Variant
With 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 procura

For Each vItem In .FoundFiles 'assume para cada Vitem o nome dos arquivos encontrados
Dim xlw As Excel.Workbook 'Declara a Variavel XLW prepara grupo de trabalho no novo aplicativo de excel aberto
Set xlw = xl.Workbooks.Open(vItem) 'Assume a Variavel VItem como novo grupo de trabalho do aplicativo excel aberto

Sub 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.AutoFit
End Sub
Set xlw = Nothing 'Zera a variavel xlw
' Kill vItem 'Deleta o Arquivo dentro do caminho da varivel vItem

Next vItem 'Calcula a proxima variavel vItem
End With 'Vai retornar o Looping de busca dos arquivos XLS até achar todos

Alguma idéia?
The One

#8 felipebenza

felipebenza
  • Participante
  • 61 mensagens

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:
Sub GeraBaseDeDados()
   
    '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
    Dim fso As Object
    Dim fld As Object
    Dim fl As Object
   
    '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")
   
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fld = fld.GetFolder("c:\pasta\formularios\")
   
    'A linha 1 é o cabeçalho
    lRow = 2
   
    For Each fl In fld.Files
	    Select Case Extensão(fl.Name)
		    Case "xls", "xlsx", "xlsm"
			    Set wb = Workbooks.Open(fl.Path)
			    For Each ws In wb.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
			    wb.Close SaveChanges:=False
	    End Select
    Next fl
    'Redimensiona colunas (opcional):
    wsResumo.Columns.AutoFit
End Sub
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
    Dim l As Long
    l = InStr(1, str, ".")
    If l > 0 Then
	    Extensão = Mid(str, InStrRev(str, ".") + 1)
    End If
End Function

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/

#9 Lex-Underground

Lex-Underground
  • Participante
  • 57 mensagens

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.

Attached Thumbnails

  • erro_execucao_27062012.JPG
The One

#10 felipebenza

felipebenza
  • Participante
  • 61 mensagens

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?






Tópicos Relacionados Collapse





Ganhe $$$ escrevendo tutoriais para nós!