Esqueceu sua senha? Você pode usar o mecanismo de lembrete neste link: Recuperar senha

Você receberá um link de reativação no email cadastrado.

Não recebeu o email? Lembre-se checar o Lixo Eletrônico.

executar macro em outra pasta de trabalho

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
JONATHA123
Colaborador
Colaborador
Mensagens: 55
Registrado em: Sáb Set 30, 2017 2:26 pm

executar macro em outra pasta de trabalho

Mensagem por JONATHA123 » Ter Abr 09, 2019 1:41 pm

Boa tarde amigos,
Faz muito tempo que não apareço por aqui, por isso desde já peço desculpas, e no mesmo instante agradeço quem puder me ajudar!
Dúvida seguinte: tenho duas pastas de trabalho "iguais" (plan1.xlsm e plan2.xlsm - exemplo) , com as mesmas guias, já possuo uma macro que faz a copia e colagem de determinadas celulas de uma guia para outra na plan1.xlsm, no entanto, quero que a mesma macro da plan1.xlsm faça o mesmo tbm na plan2.xlsm nas respectivas guias no mesmo tempo de execução...



Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


srobles
Sabe muito
Sabe muito
Mensagens: 737
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: executar macro em outra pasta de trabalho

Mensagem por srobles » Ter Abr 09, 2019 4:03 pm

JONATHA123,

Experimente editar a macro da plan1.xlsm para alternar entre as 2 pastas de trabalho e executar a macro, exemplo :
Ativamos e executamos a macro na plan1.xlsm :

Código: Selecionar todos

With Windows("plan1.xlsm")
   .Activate
   'Executa a macro
End With
Agora, mudamos para a segunda pasta de trabalho e executamos a macro :

Código: Selecionar todos

With Windows("plan2.xlsm")
   .Activate
   'Executa a macro
End With
Espero ter ajudado.

Abs


Espero ter ajudado.

Abs.

Saulo Robles


Remember when you were young?
You shone like the sun.
Shine On You Crazy Diamond


Se suas dúvidas foram esclarecidas, acrescente ao lado do título o texto [RESOLVIDO].

JONATHA123
Colaborador
Colaborador
Mensagens: 55
Registrado em: Sáb Set 30, 2017 2:26 pm

Re: executar macro em outra pasta de trabalho

Mensagem por JONATHA123 » Ter Abr 09, 2019 10:16 pm

srobles boa noite acho que você não entendeu o que quero dizer é que tenho uma macro que copia e cola o nome de uma cliente, a data e o peso dele em outra guia, e queria que simultaneamente ela fizesse a mesma coisa tanto nessa quanto em outra pasta de trabalho(aberta ou não) com exatamente as mesmas guias, ou seja, a pasta de trabalho "1" teria toda a estrutura de macros e etc, enquanto na pasta de traballho "2" serviria somente como banco de dados...
EXEMPLO:
Sub Relatorio()

ActiveSheet.Calculate
Application.ScreenUpdating = False

Dim DATA As Date
Dim CLIENTE As String
Dim PRODUTO As String
Dim QTD As Double
Dim PREÇO As Double
Dim TOTAL As Double
Dim PROCV As Double
Dim PROCV2 As Double
Dim ITEM0 As Double
Dim ITEM1 As Double
Dim ITEM2 As Double
Dim ITEM3 As Double
Dim ITEM4 As Double
Dim ITEM5 As Double
Dim ITEM6 As Double

Dim UltimaCel As Integer

DATA = Range("C7").Value
CLIENTE = Range("B10").Value
PRODUTO = Range("A12").Value
QTD = Range("B12").Value
PREÇO = Range("C12").Value
TOTAL = Range("D19").Value
PROCV = Range("F13").Value
' PROCV2 = Range("G13").Value
ITEM0 = Range("D12").Value
ITEM1 = Range("D13").Value
ITEM2 = Range("D14").Value
ITEM3 = Range("D15").Value
ITEM4 = Range("D16").Value
ITEM5 = Range("D17").Value
ITEM6 = Range("D18").Value

Sheets("RelatórioSemanal").Select

UltimaCel = Range("A65000").End(xlUp).Row + 1

Range("A" & UltimaCel).Value = CLIENTE
Range("B" & UltimaCel).Value = QTD
Range("C" & UltimaCel).Value = DATA

Sheets("VendaRápida").Select

Application.ScreenUpdating = True

End Sub
Editado pela última vez por JONATHA123 em Ter Abr 09, 2019 10:23 pm, em um total de 1 vez.



JONATHA123
Colaborador
Colaborador
Mensagens: 55
Registrado em: Sáb Set 30, 2017 2:26 pm

Re: executar macro em outra pasta de trabalho

Mensagem por JONATHA123 » Ter Abr 09, 2019 10:20 pm

sera que teria que mecher aqui Sheets("RelatórioSemanal").Select ? fazendo referencia a mesma sheet da nova planilha?

EM ANEXO A PLANILHA.
Anexos
TESTE.rar
(1.1 MiB) Baixado 17 vezes



Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


srobles
Sabe muito
Sabe muito
Mensagens: 737
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: executar macro em outra pasta de trabalho

Mensagem por srobles » Ter Abr 09, 2019 10:46 pm

JONATHA123,

Como você forneceu maiores detalhes do funcionamento desta macro, vamos elaborar esta segunda etapa por partes.

1) Gravamos em variáveis, os novos dados inseridos na pasta de origem :

Código: Selecionar todos

   'Desabilitamos a atualização de tela
   Application.ScreenUpdating = False

   'Variáveis para armazenarmos os novos dados
   Dim colunaA, colunaB, colunaC As String
   colunaA = Sheets("RelatórioSemanal").Cells(Rows.Count,1).Text
   colunaB = Sheets("RelatórioSemanal").Cells(Rows.Count,2).Text
   colunaC = Sheets("RelatórioSemanal").Cells(Rows.Count,3).Text
2) Com esses dados gravados em memória, iremos adiciona-los á outra pasta de trabalho, você poderia abri-la, por exemplo :

Código: Selecionar todos

   WorkBooks.Open (Caminho_completo_da_nova_pasta)
   Windows(Nome_da_pasta_aberta).Activate
   
   'Variáveis para retornar valores dela
   Dim novaLinha As Long
   novaLinha = Sheets(NomaDaAba).Cells(Rows.Count, 1).End(xlUp).Row + 1 'Linha que receberá os novos dados

   'Gravamos os dados
   Sheets(NomeDaAba).Cells(novaLinha, 1) = colunaA
   Sheets(NomeDaAba).Cells(novaLinha, 2) = colunaB
   Sheets(NomeDaAba).Cells(novaLinha, 3) = colunaC

  'Limpamos as variáveis
  colunaA=""
  colunaB=""
  colunaC=""

  'Salvamos as alterações e fechamos
  ActiveWorkBook.Close True

  'Habilitamos a atualização de tela
  'Application.ScreenUpdating = True

  Msgbox "Cadastro realizado com sucesso!", VbInformation
Acredito que este seja o caminho á ser tomado.

Espero ter ajudado.

Abs


Espero ter ajudado.

Abs.

Saulo Robles


Remember when you were young?
You shone like the sun.
Shine On You Crazy Diamond


Se suas dúvidas foram esclarecidas, acrescente ao lado do título o texto [RESOLVIDO].

JONATHA123
Colaborador
Colaborador
Mensagens: 55
Registrado em: Sáb Set 30, 2017 2:26 pm

Re: executar macro em outra pasta de trabalho

Mensagem por JONATHA123 » Qua Abr 10, 2019 9:57 am

Muito obrigado pela resposta srobles, sei que vc trabalha e estuda incansavelmente programação para ajudar quem necessita..
conseguir ter o resultado q queria modificando um pouco seu código para o meu próprio entendimento, porém demora demais para executar as macro tipo trava e depois volta ao normal, existe a possibilidade de acelerar a execução ou reduzir redundância? Tipo tem como executar com a pasta de trabalho “2” fechada, pois quando abre e faZ a gravação dos dados ela demora para executar e fechar !



srobles
Sabe muito
Sabe muito
Mensagens: 737
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: executar macro em outra pasta de trabalho

Mensagem por srobles » Qua Abr 10, 2019 2:50 pm

JONATHA123,

Que bom que chegou á um resultado satisfatório!
Quanto á sua dúvida em relação ao desempenho nesta troca de dados, existem algumas variáveis que devemos levar em consideração como, a pasta de destino possui fórmulas nos campos? Existem links externos para outras planilhas? Enfim, essas variáveis afetam diretamente no desempenho.

Podemos estudar uma outra forma de fazer esta transferência, como por exemplo, fazermos uma conexão á outra pasta, como se fossemos nos conectar á um banco Access, porém, esta forma é uma pouco mais trabalhosa.

Abs


Espero ter ajudado.

Abs.

Saulo Robles


Remember when you were young?
You shone like the sun.
Shine On You Crazy Diamond


Se suas dúvidas foram esclarecidas, acrescente ao lado do título o texto [RESOLVIDO].

srobles
Sabe muito
Sabe muito
Mensagens: 737
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: executar macro em outra pasta de trabalho

Mensagem por srobles » Qua Abr 10, 2019 5:06 pm

JONATHA123,

Disponibilizo abaixo, uma nova abordagem para a gravação dos dados em outra pasta via ADO.
Portanto, adicione as referências Microsoft ADO Ext 2.8 for DLL and Security e Microsoft Data Access Components Installed Version no menu Referências no editor de Macros (VBE).

Após isso, adicione um novo módulo á pasta cujos dados serão transferidos, copie e cole o que segue :

Código: Selecionar todos

Option Private Module
Public Banco As New ADODB.Connection
Public Record As New ADODB.Recordset
Public caminhoDestino As String
Public vValores(1 To 4) As String
Public strSQL As String

Sub exportaDados()
    'Definimos o caminho para a pasta de DESTINO
    caminhoDestino = ThisWorkbook.Path
    
    'Armazenamos os dados á serem gravados na pasta de DETINO
    With ThisWorkbook.Sheets(1)
        Dim ultimoRegistro As Long
        'No caso, aqui iremos guardar os dados da ultima linha preenchida
        ultimoRegistro = .Cells(Rows.Count, 1).End(xlUp).Row
        
        'Gravamos os dados nas variáveis
        If .Cells(ultimoRegistro, 1) <> Empty Then
            vValores(1) = .Cells(ultimoRegistro, 1).Text
            vValores(2) = .Cells(ultimoRegistro, 2).Text
            vValores(3) = .Cells(ultimoRegistro, 3).Text
            vValores(4) = .Cells(ultimoRegistro, 4).Text
        End If
        
    End With
    
    'String de consulta a pasta de DESTINO
    'Altere Plan1 para o nome da planilha de DESTINO, mantendo do caracter $ ao final
    strSQL = "SELECT * FROM [Plan1$]"
    
    'Abrimos a conexão com a pasta de DESTINO
    'Altere Pasta2.xlsm para o nome da pasta de DESTINO
    With Banco
        .Provider = "Microsoft.ACE.OLEDB.12.0;"
        .ConnectionString = "data source=" & caminhoDestino & "\Pasta2.xlsm" & ";Extended Properties=;" & "Excel 12.0 Xml;HDR=YES;"
        .Open
    End With
    
    'Fazemos a consulta a pasta de DESTINO
    With Record
        .Open strSQL, Banco, adOpenDynamic, adLockOptimistic
        'Adicionamos um novo registro
        .AddNew
        'Preenchemos os campos da aba Plan1 na pasta de DESTINO
        .Fields(0) = vValores(1)
        .Fields(1) = vValores(2)
        .Fields(2) = vValores(3)
        .Fields(3) = vValores(4)
        'Atualizamos a pasta de DESTINO
        .Update
        'Fechamos a consulta
        .Close
    End With
    
    'Limpa as string
    Sql = vbNullString
    Set Record = Nothing
    
    'Fechamos a conexão com a pasta de DESTINO
    Banco.Close
    Banco = vbNullString
    Set Banco = Nothing
    
    MsgBox "Operação concluída com sucesso!"
End Sub
Desta forma, acredito que seja mais rápida a transferência dos dados para a pasta que será o Banco de Dados.
Deixo abaixo, modelo contendo todo o código para estudo.
Teste.rar
(28.03 KiB) Baixado 17 vezes
Espero ter ajudado.
Abs


Espero ter ajudado.

Abs.

Saulo Robles


Remember when you were young?
You shone like the sun.
Shine On You Crazy Diamond


Se suas dúvidas foram esclarecidas, acrescente ao lado do título o texto [RESOLVIDO].

JONATHA123
Colaborador
Colaborador
Mensagens: 55
Registrado em: Sáb Set 30, 2017 2:26 pm

Re: executar macro em outra pasta de trabalho[TOPICO ENCERRADO]

Mensagem por JONATHA123 » Qua Abr 10, 2019 6:01 pm

muitissimo obrigado professor saulo, continue ajudando quem necessita de ajuda Deus te abençoe mais e mais!!
[TOPICO ENCERRADO]



srobles
Sabe muito
Sabe muito
Mensagens: 737
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: executar macro em outra pasta de trabalho

Mensagem por srobles » Qua Abr 10, 2019 6:12 pm

JONATHA123,

Grato pelo retorno e pelas considerações, e espero que esta última maneira de tratar do problema em questão tenha lhe atendido.

Aqui neste fórum, aprendemos e ensinamos na mesma medida e o que importa ao final de tudo, é que continuemos nos apoiando sempre.

Abs


Espero ter ajudado.

Abs.

Saulo Robles


Remember when you were young?
You shone like the sun.
Shine On You Crazy Diamond


Se suas dúvidas foram esclarecidas, acrescente ao lado do título o texto [RESOLVIDO].

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder