Bom estou com problemas na minha programação VBA pois não consigo executar o Userform sem que ele feche outras planilhas abertas, já fiz uma pesquisa em vários tópicos, mas nenhum conseguiu resolver meu problema então, vou postar uma parte da minha programação para ver se alguém pode me ajudar.
Desde já, agradeço.
---------------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
Plan1.Range("A2").Select
CarregarDadosNoFormulario
Application.Visible = False
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = 1
ActiveWorkbook.Save
Application.Quit
End Sub
Private Sub Workbook_Open()
frmAgenda2.Show
End Sub
----------------------------------------------------------------------------------------------------
Olá!
Application.Quit não seria muito radical para sua necessidade?? Por este comando é para encerrar o programa do Excel, incluindo todas pastas de trabalho abertas.
Acho que seria mais aplicável utilizar ActiveWorkbook.Close para encerrar somente a pasta de trabalho ativa.
Abs.
Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
Foi útil? Clique na mãozinha
Conheça:
Agradeço sua sugestão Rafael, mas o meu problema é que o USERFORM está fechando uma planilha normal do excel aberta antes, eu gostaria de saber como neutralizar esse problema, para que ambas trabalhem simultaneamente abertas.
Experimente alterar o código desta forma:
Private Sub UserForm_Initialize() Plan1.Range("A2").Select CarregarDadosNoFormulario 'Application.Visible = False Application.Visible = True '* <---- Alteracao. End Sub
tiagotadeu, boa noite!
Experimente utilizar as propriedades contidas em "Esta pasta de trabalho".
Ex:
Na pasta que contém o UserForm, pelo editor do VB, vá em "Esta Pasta de Trabalho" e no campo Geral selecione WorkBook e no campo ao lado procure por WindowActivate e faça :
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
UserForm1.Show
Application.Visible=False
End Sub
Agora faça o mesmo processo ainda na mesma Pasta, porém utilize a propriedade WindowDeactivate :
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
UserForm1.Hide
Application.Visible=True
End Sub
Faça como o amigo Issamu orientou e tudo funcionará conforme esperado.
Teste e nos retorne.
Abs
Espero ter ajudado.
Abs.
Saulo Robles
srobles, fiz a alteração conforme você falou, ele continua fechando uma outra planilha já aberta, mas quando fecho meu arquivo vba ele me retorna a planilha que ja estava aberta. Resolveu o problema em partes, pois preciso que ambos continuem aberto tanto o VBA quanto uma planilha normal. Agradeço mesmo assim a ajuda.
tiagotadeu,
Procure em todas as suas planilhas por quaisquer códigos que possam vir a fechar elas, caso algum evento tanto em Formulários quanto em eventos de Receber Foco ou Perder Foco na aplicação. Normalmente esta alteração que citei, apenas esconde seu form e torna a aplicação visivel novamente, como pode ser notado, e creio que haja algum código neste form que envia o comando para fechar as demais planilhas (aplicação toda)
Sem um modelo para estudo, as respostas acabam por se tornar superficiais. Poste um modelo se possivel.
Abs
Espero ter ajudado.
Abs.
Saulo Robles
Bom dia Saulo Robles, segue em anexo o modelo do programa em VBA, obrigado pela compreensão.
tiagotadeu, bom dia!
Fiz umas alterações no seu modelo.
Inseri um combobox que lista todas as planilhas abertas na aplicação do excel.
Veja se te atende ok?
Abs
Espero ter ajudado.
Abs.
Saulo Robles
Boa trade Saulo, a planilha que você mandou não está abrindo 2 planilhas simultâneas, como eu queria que ocorresse, essa questão de fechar so a planilha de vba ja tinha conseguido +/- com o código que você havia passado anteriormente e uma outra coisa que está ocorrendo é que ele esta deixando uma planilha com fundo cinza, quando clico em fechar, agradeço mesmo assim pela ajuda.
tiagotadeu,
Fiz umas modificações no formulário. Agora pode-se abrir mais de uma planilha.
Faça os teste e se possível retorne.
Abs
Espero ter ajudado.
Abs.
Saulo Robles
Bom dia Saulo, a planilha que você me passou funcionou em partes, o que você fez é o que quero mesmo, so que esta dando erro de "Subscrito fora do intervalo" e está retornando erro na ComboBox1, na linha destacada em vermelho. Mesmo assim agradeço pela sua ajuda.
Private Sub ComboBox1_Change()
'On Error Resume Next
If ComboBox1.Value = "" Then Exit Sub
If ComboBox1.Value <> ThisWorkbook.Name Then
Plan1.Visible = xlSheetHidden
Application.Visible = True
Windows(ComboBox1.Value).Activate <----------
Unload Me
Else
Application.Visible = False
Plan1.Visible = True
Plan1.Activate
frmAgenda2.Show
End If
End Sub
tiagotadeu,
Experimente substituir o código do ComboBox_Change() por este:
Private Sub ComboBox1_Change() If ComboBox1.Value = "" Then Exit Sub If ComboBox1.Value <> ThisWorkbook.Name Then Dim nomePasta As String nomePasta = ComboBox1.Value Plan1.Visible = xlSheetHidden Application.Visible = True Application.Windows(nomePasta).Activate Unload Me Else Application.Visible = False Plan1.Visible = True Plan1.Activate frmAgenda2.Show End If End Sub
Qual a versão do Office que você utiliza?
Aguardo retorno.
Abs
Espero ter ajudado.
Abs.
Saulo Robles
Desculpe a demora, a planilha que você mandou realmente funcionou, eu estava utilizando o Office 2013 depois que atualizei para o Office 2016 não tive mas o problema relatado, a única coisa que não consigo fazer agora é alterar outras planilhas quando a Agenda está aberta, mas quando clico em sair, a planilha que já estava aberta volta a ser visualizada perfeitamente.
Esse é um grande problema qdo se oculta a aplicação
application.visible = false
vc fica preso a esta aplicaçao somente
Eu pessoalmente nao gosto de usar esse recurso, justamente por esta razão, mas é uma questão de gosto.
Marcelo Prudencio
"Começar já é a metade do caminho."
Autor Desconhecido
Simplifica que simples fica.
Nicole Tomazella.
"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.