Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
#65797
Boa tarde, gente!!

Terminei um projeto feito em VBA mas em testes percebi um detalhe importante.

Assim que o usuario ativa as macros, fica se guiando por forms com o Application.Visible = False o tempo todo. Quando ele clica em OK no form, o excel é liberado pra ele colar uma tabela em uma planilha que contém apenas uma planilha(que ele ira colar a tabela).

Problema: Acontece que percebi que se mais de uma planilha o usuario estiver aberta usando( e isso é praticamente certeza absoluta que acontecerá já que é usado como uma ferramenta de um dpto corporativo), quando o Visible é acionado(True), em vez do WorkBook que o usuario deve colar a tabela aparecer, aparece como primario o outra das planilhas que estão abertas. Tentei solucionar sem sucesso com o seguinte.

No fim do escopo que libera libera o Excel ao usuario, coloquei:
Código: Selecionar todos
Workbooks("nomeArquivoExcel.xlsm").Activate
Sheets("nomePlanilha").select
Range("A1").select ' Essa foi minha ultima tentativa.
Mas enfim nada funcionou e mesmo pesquisando não achei algo que me atendesse.

Podem me ajudar?
Desde já, muito obrigado!
Editado pela última vez por NemPensar em 16 Jul 2021 às 20:35, em um total de 1 vez.
#65801
Olá, @NemPensar .

Nesta expressão ~~~> Workbooks("nomeArquivoExcel").Activate consta a extensão do arquivo ?

Se não, experimente colocar ~~~> Workbooks("nomeArquivoExcel.aaa").Activate

no lugar de aaa ~~~> xlx ou xlsx ou xlsm ... conforme a extensão do seu arquivo
#65803
Olá, @osvaldomp , muito obrigado pela resposta! :D

Sim, está com a extensão. Na verdade, assim que as macros são ativadas - que o Visible = False - a instrução Initialize grava o nome da planilha usando a propriedade Name com ActiveWorkbook em uma variável Public do tipo string. Isso acontece imediatamente que as macros são ativadas pois inicia um form. Como Name coleta o nome do arquivo com a extensão, então isso não deveria ser problema tanto que, quando a linha é executada (Workbooks(varPubNomeArquivo)) não recebo um erro em tempo de execução.

Exatamente isso me deixa "encucado" pois Workbooks juntamento com o método Activate deveria me atender. :?:

O que achas?
#65804
Concordo, deveria funcionar.

Existe algum comando Application.ScreenUpdating = False antes do comando que tenta ativar o nomeArquivoExcel ?

Se quiser fazer um teste, rode o código abaixo a partir de um arquivo vazio. Não utilize variável, coloque o nome do arquivo a ser ativado diretamente no código (com a extensão).
Código: Selecionar todos
Sub teste()
 Application.Visible = False
 'aguarda 5 seg para reexibir o Excel
 Application.Wait Now + TimeValue("00:00:05")
 Application.Visible = True
 'aguarda 5 seg e então ativa outro aruivo
 Application.Wait Now + TimeValue("00:00:05")
 Workbooks("NomeArquivo.xlsm").Activate
End Sub
NemPensar agradeceu por isso
#65809
Olá, @osvaldomp , tudo bem? Muito obrigado por manter contato com objetivo de ajudar com meu problema! :D

Assim que recebi sua última resposta, analisei seu código e fui testar mas não funcionou. Então removi a variável e coloquei diretamente o nome do arquivo, mas não funcionou. Fiquei 20 minutos fazendo teste e tudo falhando. Então tive uma ideia: e se eu gravasse uma macro selecionando a planilha manualmente? Fiz isso. Resultado foi que em vez da coleção Workbooks que estávamos usando, foi utilizado a coleção Windows na macro. Dai vi uma luz e fui testar. Não funcionou também nem com alguns testes só com ela. Dai fui até a documentação da instrução(https://docs.microsoft.com/pt-br/office ... cel.window) e ela explica a diferença entre a coleção Workbook e o Window:

"A coleção Windows do objeto Application contém todas as janelas do aplicativo, enquanto a coleção Windows do objeto Workbook contém somente as janelas da pasta de trabalho especificada."

Logo, essa é a instrução correta pra atender. Neste mesmo artigo, o primeiro exemplo usa a propriedade WindowState para controlar o menu de controle das janelas, como minimizar, maximizar, fechar...
Com isso, tive a ideia de usar após um Windows(varNomeArquivo).Activate usar um Windows(varNomeArquivo).WindowState = xlMaximized, que é exatamente o primeiro exemplo da documentação que citei.

Fui testar e... funcionou! :shock:
Além disso ficou até melhor pois antes a janela abria minimizada para o usuário e agora abre maximizada. 8-)

Tudo resolvido, muito obrigado!
Grande abraço!
osvaldomp agradeceu por isso
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord