Inquiridor
Tela piscando entre workbooks

Pergunta
-
Todas as Respostas
-
-
Caro Filipe, obrigado pela atenção!
Meu código já tem essa aplicação, porém só funciona entre planilhas da mesma pasta e não entre arquivos diferentes!
Tipo:Sub Inserir_Composições() Dim W As Worksheet Dim UltimaLinha As Long Dim S As Worksheet Dim NomeArquivo As String Dim i As Long Dim CellAddr As String 'Pegar o nome dos arquivos abertos, exceto se o nome do arquivo for Base_dados.xslm For i = 1 To Workbooks.Count If Workbooks(i).Name <> "Base_dados.xlsm" Then NomeArquivo = Workbooks(i).Name End If Next Application.ScreenUpdating = False Set W = Sheets(1) Do While ActiveCell.Value2 <> "" If ActiveCell.Value <> "" Then Selection.Copy '(Copiar a Id da planilha ativa) Workbooks("Base_dados.xlsm").Activate '(Vai para o outro arquivos chamado de Base_dados) Sheets(3).Select Range("B1").PasteSpecial Application.CutCopyMode = False Columns("B:B").Find(What:=ActiveCell.Value, After:=ActiveCell, _ LookAt:=xlPart, SearchOrder:=xlByRows, _ MatchCase:=False, SearchFormat:=False).Activate ActiveCell.Offset(0, 1).Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Workbooks(NomeArquivo).Activate Sheets("Comp_analiticas").Select Range("A200000").Select Selection.End(xlUp).Select ActiveCell.Offset(2, 0).Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False ActiveCell.Offset(1, 6).Select 'COLOCAR SOMATÓRIA '----------------- Set S = Sheets("Comp_analiticas") S.Range("G" & Rows.Count).End(xlUp).End(xlUp).Offset(1, 0).Select If ActiveCell.Offset(1, 0).Value = "" Then GoTo Calcula With ActiveCell UltimaLinha = .End(xlDown).Row .Resize(UltimaLinha - .Row + 1).Select End With Calcula: CellAddr = Selection.Address ActiveCell.Offset(-1, 0).Select ActiveCell.Formula = "=SUM(" & CellAddr & ")" 'COLOCAR ITEMIZAÇÃO '------------------ ActiveCell.Offset(0, -6).Select Sheets(1).Select ActiveCell.Offset(0, -2).Select Application.CutCopyMode = False Selection.Copy ActiveCell.Offset(0, 2).Select Sheets("Comp_analiticas").Select ActiveSheet.Paste Link:=True Application.CutCopyMode = False Sheets(1).Select End If If ActiveCell.Value = "" Then Exit Do ActiveCell.Offset(1, 0).Select Loop Application.ScreenUpdating = True MsgBox "Composições adicionadas com sucesso" Set W = Nothing Set S = Nothing End Sub
Como faço pra esse código não ficar piscando quando trocar de planilhas?
-
Boa tarde Sávio.
Este código abrange todos os casos, inclusive troca de pasta de trabalho. Vale porém uma ressalva: ele não funciona para execução passo a passo, ou seja, se houver ponto de interrupção no código esta opção torna-se inativa.
Além disso, cuidado para não causar a reativação em um procedimento chamado dentro do seu código principal. Este é um ponto muito comum de erro.
Seria um destes o motivo?
Filipe Magno
-
Olá Filipe! Obrigado por responder-me.
Bom saber que o código serve para todos os casos e estou ciente de que não funcionará em modo passo a passo.
Não entendi a parte de causar uma reativação em um procedimento.
Poderia me dá um exemplo?
Seria o uso inadequado de Select ou Activate em meu código?
Só sei que quando executo a consulta a tela pisca, alternando entre o banco e a planilha mesmo usando o Application.ScreenUpdating.
Sávio Lóz.
-
Boa noite Sávio.
Sobre a reativação considere o exemplo:
Sub Procedimento1() Application.ScreenUpdating = False 'Trecho 1 ... Call Procedimento2 'Trecho 3 ... Application.ScreenUpdating = True End Sub Sub Procedimento2() Application.ScreenUpdating = False 'Trecho 2 ... Application.ScreenUpdating = True End Sub
Os trechos 1 e 2 executarão com a atualização de tela desabilitada, enquanto que o trecho 3 não, uma vez que houve uma reativação enquanto o Procedimento2 era executado.
Creio não ser este seu caso, mas fica o alerta.
Quanto ao seu caso, se não estiver interrompendo o código em algum ponto e nem executando passo a passo não vejo motivos para não funcionar...
Qualquer dúvida é só perguntar.
Filipe Magno
-
Pois é Filipe. Realmente não entendo o pisca pisca, mas o código funciona.
Estou pesquisando pela internet como setar uma outra planilha e buscar os dados sem ter que a tela acompanhar esses deslocamentos, mas só vejo entre planilhas do mesmo arquivo.
A busca continua... uma hora aparece uma ideia boa.
De qualquer forma, obrigado pela atenção.
-
Sávio, apenas para registro: eu utilizo várias macros que ativam diferentes pastas de trabalho e a desabilitação da atualização da tela funciona normalmente (Excel 2007 e 2010). Não conheço outro comando diferente deste para esta finalidade. Além disso, alguns comandos só funcionam com a ativação da pasta de trabalho, ou seja, é provável que você tenha que descobrir o motivo do não funcionamento...
Qualquer dúvida é só perguntar.
Boa sorte.
Filipe Magno
-
Filipe, bom dia.
Que o código de desabilitação de tela funciona, isso pra mim já é fato. Minha dúvida surgiu exatamente por isso.
Ontem estava analisando meu código e percebi que preciso utilizar uma outra logística para que tudo funcione de forma limpa. Tem muito Select, Activate e isso prejudica um pouco o que estou querendo. Estou estudando uma forma de criar relativas e melhorar mais o código.
Pesquisando na internet, tenho visto vários códigos que se relacionam com outras pastas de trabalho, mas é sempre o mesmo caminho, ou seja, vai na outra, busca a informação e para. No meu caso, eu preciso que fique analisando item por item e isso causa um vai e volta entre planilhas, gerando aquele pisca pisca que demonstra um código que ainda precisa melhorar.
Não sou programador, sou um simples usuário que aos poucos resolve bobagens com VBA e que se aventurou em criar uma automação na planilha e descobrindo que o VBA pode muito mais...
Mais uma vez, obrigado por toda atenção.