Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
executar macro em outra pasta de trabalho
-
- Colaborador
- Mensagens: 57
- Registrado em: Sáb Set 30, 2017 2:26 pm
executar macro em outra pasta de trabalho
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...
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...
Re: executar macro em outra pasta de trabalho
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 :
Agora, mudamos para a segunda pasta de trabalho e executamos a macro :
Espero ter ajudado.
Abs
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
Código: Selecionar todos
With Windows("plan2.xlsm")
.Activate
'Executa a macro
End With
Abs
-
- Colaborador
- Mensagens: 57
- Registrado em: Sáb Set 30, 2017 2:26 pm
Re: executar macro em outra pasta de trabalho
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
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.
-
- Colaborador
- Mensagens: 57
- Registrado em: Sáb Set 30, 2017 2:26 pm
Re: executar macro em outra pasta de trabalho
sera que teria que mecher aqui Sheets("RelatórioSemanal").Select ? fazendo referencia a mesma sheet da nova planilha?
EM ANEXO A PLANILHA.
EM ANEXO A PLANILHA.
- Anexos
-
- TESTE.rar
- (1.1 MiB) Baixado 224 vezes
Re: executar macro em outra pasta de trabalho
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 :
2) Com esses dados gravados em memória, iremos adiciona-los á outra pasta de trabalho, você poderia abri-la, por exemplo :
Acredito que este seja o caminho á ser tomado.
Espero ter ajudado.
Abs
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
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
Espero ter ajudado.
Abs
-
- Colaborador
- Mensagens: 57
- Registrado em: Sáb Set 30, 2017 2:26 pm
Re: executar macro em outra pasta de trabalho
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 !
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 !
Re: executar macro em outra pasta de trabalho
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
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
Re: executar macro em outra pasta de trabalho
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 :
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. Espero ter ajudado.
Abs
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
Deixo abaixo, modelo contendo todo o código para estudo. Espero ter ajudado.
Abs
-
- Colaborador
- Mensagens: 57
- Registrado em: Sáb Set 30, 2017 2:26 pm
Re: executar macro em outra pasta de trabalho[TOPICO ENCERRADO]
muitissimo obrigado professor saulo, continue ajudando quem necessita de ajuda Deus te abençoe mais e mais!!
[TOPICO ENCERRADO]
[TOPICO ENCERRADO]
Re: executar macro em outra pasta de trabalho
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
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