Logo Hardware.com.br
Josebeca
Josebeca Novo Membro Registrado
12 Mensagens 0 Curtidas

Exibir apenas forms sem afetar outras pastas de trabalho (VBA)

#1 Por Josebeca 30/09/2015 - 09:49
Bom dia amigos,

Estou fazendo uma planilha com userforms para meu trabalho. Ela está com 5 userforms e o que eu queria era: Ao clicar na pasta de trabalho apenas o userform fosse exibido, porém utilizando o Application.Visible eu desabilito o excel, de forma que se tiver alguma outra pasta de trabalho aberta a mesma também se oculta e abrir uma outra pasta de trabalho enquanto os forms estão abertos também não é funcional. Resumindo: Queria um código que ocultasse apenas a pasta de trabalho a qual os forms pertencem, deixando livre o usuario abrir e editar qualquer outra pasta de trabalho. Estou há um bom tempo atrás dessa solução, se vcs puderem me ajudar ficarei mto grato!!
Um abraço,
José Beça
Shura16
Shura16 Ubbergeek Registrado
2.5K Mensagens 601 Curtidas
#2 Por Shura16
30/09/2015 - 10:11
Cada planilha tem uma opção de ocultar. Basta clicar com o botão direito e em ocultar na mesma para fazer isso.

Se quiser fazer isso via código, eu não conheço VBA, mas você pode gravar um Macro para ver o código gerado e usar no meio do seu código.
Coragem não é ausência de medo e sim o controle dele.

Linux em casa!
Windows 10, na empresa!
Agora: Android no bolso!
Josebeca
Josebeca Novo Membro Registrado
12 Mensagens 0 Curtidas
#3 Por Josebeca
30/09/2015 - 10:14
Shura16 disse:
Cada planilha tem uma opção de ocultar. Basta clicar com o botão direito e em ocultar na mesma para fazer isso.

Se quiser fazer isso via código, eu não conheço VBA, mas você pode gravar um Macro para ver o código gerado e usar no meio do seu código.


Fala cara beleza?

Na verdade eu não quero ocultar uma planilha (aba) quero ocultar a pasta de trabalho toda, assim que ela for aberta, mostando apenas os userforms. Obrigado pela resposta
Shura16
Shura16 Ubbergeek Registrado
2.5K Mensagens 601 Curtidas
#4 Por Shura16
30/09/2015 - 10:43
Ah, "tindi" daa.png!

Bom então o cenário muda. Creio não ser possível com VBA, pois o VBA precisa da aplicação que o roda.

O que você poderia fazer então é partir para uma linguagem de programação independente como o Visual Basic (de preferência com .NET Framework), e então utilizar a planilha em Excel como "base de dados".
Coragem não é ausência de medo e sim o controle dele.

Linux em casa!
Windows 10, na empresa!
Agora: Android no bolso!
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#5 Por Basole
30/09/2015 - 10:46
Veja se desta forma lhe atende:
O userform é aberto no modo modal, permitindo que voce possa ter acesso( interagir/ editar ), outras pasta de trabalho
[code=vb]
' No modulo de EstaPasta_de_Trabalho

Private Sub Workbook_Open()
Windows("AQUI_o_nome_da_sua_Pasta_de_Trabalho.xlsm").Visible = False
Application.WindowState = xlMinimized
UserForm1.Show vbModeless
End Sub

'No modulo do UserForm

Private Sub CommandButton1_Click()
Unload UserForm1
Application.Quit
End Sub
[/code]
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Josebeca
Josebeca Novo Membro Registrado
12 Mensagens 0 Curtidas
#6 Por Josebeca
30/09/2015 - 11:29
Shura16 disse:
Ah, "tindi" daa.png!

Bom então o cenário muda. Creio não ser possível com VBA, pois o VBA precisa da aplicação que o roda.

O que você poderia fazer então é partir para uma linguagem de programação independente como o Visual Basic (de preferência com .NET Framework), e então utilizar a planilha em Excel como "base de dados".


Entendi.. =/ o código já está todooo feito no vba, tudo funcionando.. só preciso disso.. vou tentar uma solução ainda, aí se realmente não conseguir vou tentar partir para essa opção.. valeu pela ajuda !!

Abraço

Basole disse:
Veja se desta forma lhe atende:
O userform é aberto no modo modal, permitindo que voce possa ter acesso( interagir/ editar ), outras pasta de trabalho
[code=vb]
' No modulo de EstaPasta_de_Trabalho

Private Sub Workbook_Open()
Windows("AQUI_o_nome_da_sua_Pasta_de_Trabalho.xlsm").Visible = False
Application.WindowState = xlMinimized
UserForm1.Show vbModeless
End Sub

'No modulo do UserForm

Private Sub CommandButton1_Click()
Unload UserForm1
Application.Quit
End Sub
[/code]



Opa Basole, tudo bem?

Fiz isso que você falou e me retornou o erro 1004.

O método Sheets do objeto _Global falhou . =/

Alguma idéia?
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#7 Por Basole
30/09/2015 - 13:00
Bom pra mim aqui funciona perfeitamente desta forma:
ThisWorkbook.Windows(ThisWorkbook.Name).Visible = False

Mas tente então, como voce estava fazendo " Application.Visible = False "
E acrescentando a abertura do userform de forma modal.
[code=vb]
PrivateSub Workbook_Open()
Application.Visible = False
UserForm1.Show vbModeless
End Sub
[/code]

Outra opção seria usar api (* caso o seu office ñ seja 64 Bits), para inserir um botao minimizar/maxminizar, no userform p/ voce poder abrir outros arquivos:
(Este codigo tbm permite voce ajustar manualmente o tamanho do form ativo)
Em um modulo:
[code=vb]
Option Explicit
Public Declare Function FindWindowA& Lib "User32" (ByVal lpClassName$, ByVal lpWindowName$)
Public Declare Function GetWindowLongA& Lib "User32" (ByVal hWnd&, ByVal nIndex&)
Public Declare Function SetWindowLongA& Lib "User32" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)

' Déclaration des constantes
Public Const GWL_STYLE As Long = -16
Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_FULLSIZING = &H70000

'Attention, envoyer après changement du caption de l'UF
Public Sub InitMaxMin(mCaption As String, Optional Max As Boolean = True, Optional Min As Boolean = True _
, Optional Sizing As Boolean = True)
Dim hWnd As Long
hWnd = FindWindowA(vbNullString, mCaption)
If Min Then SetWindowLongA hWnd, GWL_STYLE, GetWindowLongA(hWnd, GWL_STYLE) Or WS_MINIMIZEBOX
If Max Then SetWindowLongA hWnd, GWL_STYLE, GetWindowLongA(hWnd, GWL_STYLE) Or WS_MAXIMIZEBOX
If Sizing Then SetWindowLongA hWnd, GWL_STYLE, GetWindowLongA(hWnd, GWL_STYLE) Or WS_FULLSIZING
End Sub
[/code]
E no modulo do seu userform no evento initialize:
[code=vb]
Private Sub UserForm_Initialize()
InitMaxMin Me.Caption, True, True, True
End Sub
[/code]
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Josebeca
Josebeca Novo Membro Registrado
12 Mensagens 0 Curtidas
#8 Por Josebeca
30/09/2015 - 13:15
Basole disse:
Bom pra mim aqui funciona perfeitamente desta forma:
ThisWorkbook.Windows(ThisWorkbook.Name).Visible = False

Mas tente então, como voce estava fazendo " Application.Visible = False "
E acrescentando a abertura do userform de forma modal.
[code=vb]
PrivateSub Workbook_Open()
Application.Visible = False
UserForm1.Show vbModeless
End Sub
[/code]

Outra opção seria usar api (* caso o seu office ñ seja 64 Bits), para inserir um botao minimizar/maxminizar, no userform p/ voce poder abrir outros arquivos:
(Este codigo tbm permite voce ajustar manualmente o tamanho do form ativo)
Em um modulo:
[code=vb]
Option Explicit
Public Declare Function FindWindowA& Lib "User32" (ByVal lpClassName$, ByVal lpWindowName$)
Public Declare Function GetWindowLongA& Lib "User32" (ByVal hWnd&, ByVal nIndex&)
Public Declare Function SetWindowLongA& Lib "User32" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)

' Déclaration des constantes
Public Const GWL_STYLE As Long = -16
Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_FULLSIZING = &H70000

'Attention, envoyer après changement du caption de l'UF
Public Sub InitMaxMin(mCaption As String, Optional Max As Boolean = True, Optional Min As Boolean = True _
, Optional Sizing As Boolean = True)
Dim hWnd As Long
hWnd = FindWindowA(vbNullString, mCaption)
If Min Then SetWindowLongA hWnd, GWL_STYLE, GetWindowLongA(hWnd, GWL_STYLE) Or WS_MINIMIZEBOX
If Max Then SetWindowLongA hWnd, GWL_STYLE, GetWindowLongA(hWnd, GWL_STYLE) Or WS_MAXIMIZEBOX
If Sizing Then SetWindowLongA hWnd, GWL_STYLE, GetWindowLongA(hWnd, GWL_STYLE) Or WS_FULLSIZING
End Sub
[/code]
E no modulo do seu userform no evento initialize:
[code=vb]
Private Sub UserForm_Initialize()
InitMaxMin Me.Caption, True, True, True
End Sub
[/code]


Basole,

A primeira opção segue dando o mesmo erro =/

A segunda usando o Application.visible faz justamente o que eu não quero, esconde o exce, porém não se pode mais abrir ou mexer em nenhuma outra pasta de trabalho, afinal nesse caso o excel como um todo é ocultado e não só a pasta de trabalho que tem os userforms.

A respeito do api eu já uso um api que faz essa função de botões de maximizar e minimizar, mas nesse caso ele não oculta o excel e o que eu queria era que o meu código rodasse como um executável que não fosse possivel ter acesso a planilha. =/

Mais alguma idéia?? tá fogo resolver essa bronca =/
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#9 Por Basole
30/09/2015 - 16:11
A segunda usando o Application.visible faz justamente o que eu não quero, esconde o exce, porém não se pode mais abrir ou mexer em nenhuma outra pasta de trabalho, afinal nesse caso o excel como um todo é ocultado e não só a pasta de trabalho que tem os userforms.


Bom meu caro, como eu disse se voce abrir os userforms de forma modal UserForm1.Show vbModeless
voce pode 'mexer' em outras pastas de trabalho, mas isso não vai impedir que o usuario click na aba "Exibição" e "Rexibir" habilitar a exibição da Pasta de trabalho a qual esta o form.

Acho que uma alternativa para este caso seria voce ocultar as (abas) ou converter sua planilha para " *.exe"
http://orlando.mvps.org/XLtoExeMore.asp?IdC=OrlMoreWin1
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Josebeca
Josebeca Novo Membro Registrado
12 Mensagens 0 Curtidas
#10 Por Josebeca
01/10/2015 - 14:33
Fala Basole,

Primeiramente obrigado pela força.. Vê: De qualquer forma usar o application.visible dá problema porque veja: Está o usuário trabalhando com outra pasta de trabalho, se ele abrir meu programa, a pasta que ele está trabalhando já some automaticamente. E se abrir primeiro meu programa e depois uma outra pasta de trabalho, todos são reexibidos. Aí não sei se fica viável essa opção. A respeito do executável, eu converti a planilha, mas n tem diferença nenhuma do .xlsm. Fica como .exe mas qd clico ele abre do msm jeito que clicasse no .xlsm. Estou configurando algo errado? Mais alguma idéia?

Abraço
bhenrique2005
bhenrique200... Novo Membro Registrado
1 Mensagem 0 Curtidas
#11 Por bhenrique200...
24/03/2016 - 13:03
Basole disse:
Veja se desta forma lhe atende:
O userform é aberto no modo modal, permitindo que voce possa ter acesso( interagir/ editar ), outras pasta de trabalho
[code=vb]
' No modulo de EstaPasta_de_Trabalho

Private Sub Workbook_Open()
Windows("AQUI_o_nome_da_sua_Pasta_de_Trabalho.xlsm").Visible = False
Application.WindowState = xlMinimized
UserForm1.Show vbModeless
End Sub

'No modulo do UserForm

Private Sub CommandButton1_Click()
Unload UserForm1
Application.Quit
End Sub
[/code]


Basole, boa tarde!

Estou também com o mesmo problema do nosso amigo. Você tem a uma planilha deste modelo que esteja funcionando. Teria como enviar para ver como ficou. Pois não consegui somente inserindo os codigos. Se puder envie em [email]bhenrique2005@gmail.com[/email]
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal