Ir ao conteúdo
  • Cadastre-se

Salomão Ozaki

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

0
  1. Boa tarde! Galera, Estou com o seguinte problema: A macro abaixo pega as informações de todas as guias da pasta de trabalho "Teste" e copia nas guias da Pasta de Trabalho "Teste1". Quando a pasta de trabalho "Teste1" encontra-se fechada, ela está executando as macros corretamente (Copiando infos da pasta Teste e colando na pasta Teste1), porém, cisma em aparecer ERRO EM TEMPO DE EXECUÇÃO 9 / SUBSCRITO FORA DO INTERVALO. OBS.: Os nomes estão batendo, tanto que está copiando e colando todas as informações, acredito que seja um problema de variável ou leitura, mas estou procurando a tanto tempo, e não consegui encontrar nada na internet. Abaixo segue os códigos para melhor visualização do problema. Sub TestFileOpened() Application.ScreenUpdating = False Application.DisplayAlerts = False 'Declarando todas as variáveis de origem e destino possíveis Dim Ender1 As Worksheet Dim Ender2 As Worksheet Dim Ender3 As Worksheet Dim Ender4 As Worksheet Dim Ender5 As Worksheet Dim Ender6 As Worksheet Dim Ender7 As Worksheet Dim Ender8 As Worksheet 'Função "SE" atrelada a uma função que encontra-se abaixo dessa Sub, onde faz a seguinte leitura:Se a planilha localizada no endereço abaixo (planilha Teste1) estiver aberta ela não abre novamente, apenas copia os dados a serem transferidos, porém, caso a planilha esteja fechada (nesse caso os comandos estão no Else) ela abre a planilha, tranfere os dados, salva e fecha. If IsFileOpen("M:\Negocios\PLANILHAS\Teste1.xlsm") Then 'Declarando quais são as planilhas de origem e destino, assim como as guias a serem utilizadas Set Ender1 = Workbooks("Teste.xlsm").Worksheets("Plan1") Set Ender2 = Workbooks("Teste.xlsm").Worksheets("Plan2") Set Ender3 = Workbooks("Teste.xlsm").Worksheets("Plan3") Set Ender4 = Workbooks("Teste.xlsm").Worksheets("Plan4") Set Ender5 = Workbooks("Teste1.xlsm").Worksheets("Plan1") Set Ender6 = Workbooks("Teste1.xlsm").Worksheets("Plan2") Set Ender7 = Workbooks("Teste1.xlsm").Worksheets("Plan3") Set Ender8 = Workbooks("Teste1.xlsm").Worksheets("Plan4") Ender1.Columns("A:AZ").Copy Ender5.Range("A1").PasteSpecial Application.CutCopyMode = False Ender2.Columns("A:AZ").Copy Ender6.Range("A1").PasteSpecial Application.CutCopyMode = False Ender3.Columns("A:AZ").Copy Ender7.Range("A1").PasteSpecial Application.CutCopyMode = False Ender4.Columns("A:AZ").Copy Ender8.Range("A1").PasteSpecial Application.CutCopyMode = False Else Workbooks.Open filename:= _ "M:\Negocios\PLANILHAS\Teste1.xlsm" 'Declarando quais são as planilhas de origem e destino, assim como as guias a serem utilizadas Set Ender1 = Workbooks("Teste.xlsm").Worksheets("Plan1") Set Ender2 = Workbooks("Teste.xlsm").Worksheets("Plan2") Set Ender3 = Workbooks("Teste.xlsm").Worksheets("Plan3") Set Ender4 = Workbooks("Teste.xlsm").Worksheets("Plan4") Set Ender5 = Workbooks("Teste1.xlsm").Worksheets("Plan1")<<<<<<<<<<<<<<Erro em tempo de execução 9>>>>>>>>>>>>>>> Set Ender6 = Workbooks("Teste1.xlsm").Worksheets("Plan2") Set Ender7 = Workbooks("Teste1.xlsm").Worksheets("Plan3") Set Ender8 = Workbooks("Teste1.xlsm").Worksheets("Plan4") Ender1.Columns("A:AZ").Copy Ender5.Range("A1").PasteSpecial Application.CutCopyMode = False Ender2.Columns("A:AZ").Copy Ender6.Range("A1").PasteSpecial Application.CutCopyMode = False Ender3.Columns("A:AZ").Copy Ender7.Range("A1").PasteSpecial Application.CutCopyMode = False Ender4.Columns("A:AZ").Copy Ender8.Range("A1").PasteSpecial Application.CutCopyMode = False Workbooks("Teste1.xlsm").Close SaveChanges:=True End If ThisWorkbook.Save 'Código para não aparecer alerta se deseja salvar as informações em cima de outras informações que já constavam na planilha Application.DisplayAlerts = True Application.ScreenUpdating = True 'Obs.: Essa macro roda automaticamente sempre que é salvo algo nessa planilha sendo que a chamada da macro esta em EstaPasta_de_trabalho End Sub ________________________________________________________________________________________________________________________________ Function IsFileOpen(filename As String) 'Essa função está atrelada ao "If IsfileOpen" no qual ela verifica se a planilha de destino já encontra-se aberta, não havendo a necessidade de abri-la novamente Dim filenum As Integer, errnum As Integer On Error Resume Next ' Turn error checking off. filenum = FreeFile() ' Get a free file number. Open filename For Input Lock Read As #filenum Close filenum ' Close the file. errnum = Err ' Save the error number that occurred. On Error GoTo 0 ' Turn error checking back on. Select Case errnum Case 0 IsFileOpen = False Case 70 IsFileOpen = True Case Else Error errnum End Select End Function
  2. Boa tarde! Galera, Consegui achar um código referente a questão anterior, mas tenho uma nova dúvida. É possível eu criar uma condição IF (SE), sendo: SE a pasta de trabalho "Teste" estiver aberta não precisa abrir novamente, e então só copia os dados da pasta de trabalho "Teste1" e cola na pasta de trabalho "Teste", mas caso a pasta de trabalho "Teste" esteja fechada nesse caso abre a pasta e copia os dados da pasta "Teste1" na pasta "Teste". Abaixo segue o código que estou utilizando, porém, ele está abrindo a pasta "Teste" independente se ela está aberta ou fechada. Inseri as informações em negrito para facilitar a visualização onde acredito que estão os erros ou ajustes a serem feitos Sub TestFileOpened() Application.ScreenUpdating = False 'Código para não aparecer alerta se deseja salvar as informações em cima de outras informações que já constavam na planilha Application.DisplayAlerts = False 'Declarando variável de planilha de origem e destino Dim PlanOrigem As Worksheet Dim PlanDestino As Worksheet 'Variável referente a planilha de destino Dim Path As String Dim nome As String Dim File1 As String Path = "C:\Desktop\Salomão\" nome = "Teste" File1 = Path & nome & ".xlsm" 'Intenção do Código: Se a planilha Teste estiver aberta esse código teria que funcionar If IsFileOpen("C:\Users\jkenji.sts\Desktop\Agente de Cargas\Teste.xlsm") Then Set PlanOrigem = Workbooks("Teste1.xlsm").Worksheets("Planilha1") Set PlanDestino = Workbooks("Teste.xlsm").Worksheets("Transferencia de Dados") PlanOrigem.Columns("A:L").Copy PlanDestino.Range("A1").PasteSpecial Application.CutCopyMode = False 'Intenção do Código: Se a planilha Teste estiver fechada, esse código que deveria funcionar (esse está funcionando se a planilha está aberta ou fechada) Else 'Declarando quais são as planilhas de origem e destino, assim como as guias a serem utilizadas Workbooks.Open filename:=File1 Set PlanOrigem = Workbooks("Teste1.xlsm").Worksheets("Planilha1") Set PlanDestino = Workbooks("Teste.xlsm").Worksheets("Transferencia de Dados") PlanOrigem.Columns("A:L").Copy PlanDestino.Range("A1").PasteSpecial Application.CutCopyMode = False Workbooks("teste.xlsm").Close SaveChanges:=True End If Application.ScreenUpdating = True 'Código para não aparecer alerta se deseja salvar as informações em cima de outras informações que já constavam na planilha Application.DisplayAlerts = True End Sub 'Acredito que esse código compõem o SE, porém, confesso que não entendi muito Function IsFileOpen(filename As String) On Error Resume Next filinum = FreeFile() Open filename For Input Lock Read As #Filenum Close Filenum errnum = Err On Error GoTo 0 Select Case errnum Case 0 IsFileOpen = False Case 70 IsFileOpen = True End Select End Function
  3. Bom dia! Sou novo no fórum, mas sempre utilizo quando tenho alguma dúvida em VBA e até então todas as dúvidas que eu tive, foram atendidas com dúvidas anteriores, e portanto, não havia necessidade de abrir um tópico. Porém, a dúvida que tenho hoje, é um pouco mais complexa e precisarei de ajuda dos experientes rsrs... Então, eu tenho 2 pastas de trabalho em excel, e preciso da seguinte macro: Pasta de trabalho salva como "X" em uma área compartilhada da empresa Pasta de trabalho salva como "Y" em uma área compartilhada da empresa Sempre que for salvo algo na pasta de trabalho "X", automaticamente ela copia todos os dados das colunas de A até L na pasta de trabalho salva como "Y" E por fim, o ideal é que essa macro fosse gerada automaticamente, sem que precisássemos apertar botão, na verdade o que dispararia a macro seria o simples clique em salvar. Obs: Essas pastas são utilizadas por mais de 1 funcionário, então pode ser que eu esteja trabalhando na planilha "X" e outro funcionário na planilha "Y", ou seja, sempre que eu salvar algo na planilha "X" seria interessante que essas alterações fossem ao vivo. É possível ou estou imaginando demais rsrs ? Desde já agradeço a todos pela atenção! Salomão Ozaki

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!