Notifications
Clear all

Abrir form pop-up <> do da primeira abertura, com condição

8 Posts
2 Usuários
0 Reactions
1,516 Visualizações
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

Olá, galera...boa tarde.

tenho a seguinte questão:

Ao incializar minha planilha tenho a instrução para que abra em pop-up apenas o frm_cadastro; este form deve ser aberto uma única vez para que sejam cadastrados os dados de seus txtbox's; numa segunda inicialização da planilha, se já houver preenchimento de dados anteriores a planilha deveria inicializar com frm_rbpa.

Estou tentando algo como:

mesmo assim ainda está abrindo o "frm_cadastro"

Private Sub UserForm_Initialize()

Application.ScreenUpdating = False

With wshCadastro
If .Cells(1, 1) = empresa And .Cells(2, 1) = cnpj And .Cells(3, 1) = dataabertura <> "" Then
Unload frm_cadastros
frm_rbpa.Show


End If
End With

Application.ScreenUpdating = True

Private Sub UserForm_Terminate()

    Application.Visible = True
    ActiveWorkbook.Save
    Application.Quit

End Sub

na minha pasta de trabalho:

Option Explicit
Private Sub workbook_open()

    Call ocultar_tudo
    Application.Visible = False
    frm_cadastros.Show
    
    
End Sub

no modulo:

Option Explicit

Sub ocultar_tudo()

Application.ExecuteExcel4Macro "Show, toolbar(""ribbon"",false)"
Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False
Application.Caption = ""

With ActiveWindow
.DisplayHeadings = False
.DisplayWorkbookTabs = False
.DisplayGridlines = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayZeros = False

End With

End Sub

segue planilha para ajudar a me ajudar...rsrsrs
https://www.dropbox.com/s/a1dtp7tv8eocq ... .xlsm?dl=0

Desde já muito abrigado pelo tempo e conhecimento!

 
Postado : 21/05/2018 1:23 pm
(@boobymcgee)
Posts: 84
Trusted Member
 

AMORIM123, primeiro para entender o que você quer, você coloca seu código para verificar se na planilha wshCadastro já existe a empresa "x" cadastrada, se sim fechar o formulário frm_cadastros e abrir o frm_rbpa, assim sempre vai abrir o frm_cadastro e só vai fecha-lo após validar os dados inseridos.

Você quer validar os dados antes de inserir no frm_cadastros?

Também tem erros no código:

Private Sub UserForm_Initialize()

Application.ScreenUpdating = False

With wshCadastro
If .Cells(1, 1) And .Cells(2, 1) And .Cells(3, 1) <> "" Then
Unload frm_cadastros
frm_frm_rbpa.Show

Onde deve ser:

Private Sub UserForm_Initialize()

Application.ScreenUpdating = False

With wshCadastro
If .Cells(1, 1) <> "" And .Cells(2, 1) <> "" And .Cells(3, 1) <> "" Then
Unload frm_cadastros
frm_rbpa.Show
 
Postado : 21/05/2018 2:41 pm
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

é pois na primeira abertura estes dados já são informados...são válidados...nas demais aberturas, como os campos que recebem as informações dos txtbox's do "frm_cadastro" já estão preenchidos não há mais necessidade de sempre abri meu "frm_cadastro"...logo preciso que abra o form seguinte: "frm_rbpa" .

Deu certo!

Qnd encerro o "frm_rbpa" da: não é possivel mover o foco para o controle porque está invisível, não ativado ou é de um tipo que não aceita o foco...esse erro

Mas o objetivo inicial foi alcançado!

 
Postado : 21/05/2018 2:46 pm
(@boobymcgee)
Posts: 84
Trusted Member
 

Com a correção no código que eu postei funciona como você quer.

 
Postado : 21/05/2018 2:49 pm
(@boobymcgee)
Posts: 84
Trusted Member
 

Quando encerra o frm_rbpa manda sair da aplicação, por isso não tem para onde mover o foco.

Private Sub UserForm_Terminate()

    Application.Visible = True
    ActiveWorkbook.Save
    Application.Quit

End Sub
 
Postado : 21/05/2018 3:14 pm
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

teria como manipular esse erro para não dar mais essa mensagem, pois toda vez que fecho dar esse erro em seguida a linha "frm_cadastros.Show" fica amarela

 
Postado : 23/05/2018 5:52 am
(@boobymcgee)
Posts: 84
Trusted Member
 

No evento do frm_rbpa coloca assim:

Private Sub UserForm_Terminate()
'
Application.Visible = True
ThisWorkbook.Save 'Salva as alterações
Application.Quit
ThisWorkbook.Close 'Fecha o excel todo

End Sub

Também no frm_rbpa tem que revisar este comando, ele que este com erro:

Private Sub txt_periodo_AfterUpdate()

Dim lngPriLin, lngUltLin, lngLoopLin       As Long
Dim datPeriodo                             As Date
Dim vlrRPA, vlrFSPA                        As Currency
Dim strbusca                               As String

lngPriLin = 2

'***********************AQUI ESTA O ERRO
'With Me
'datPeriodo = .txt_periodo.Text
'vlrRPA = .txt_rpa.Text
'vlrFSPA = .txt_fspa.Text
'End With
'**************************
With wshComum
    lngUltLin = .Cells(.Rows.Count, 2).End(xlUp).Row
End With

With wshComum
    For lngLoopLin = lngPriLin To lngUltLin Step 1
        strbusca = .Cells(lngLoopLin, 2)

        If strbusca = datPeriodo Then
            .Cells(lngLoopLin, 3) = CCur(vlrRPA)
            .Cells(lngLoopLin, 4) = CCur(vlrFSPA)
        End If
   Next lngLoopLin
End With

End Sub
 
Postado : 23/05/2018 7:40 pm
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

boobymcgee, bom dia!

Muito obrigado pela ajuda!

Referente à segunda parte do erro, já tratei, com ajuda do srobles aqui do fórum:

ficou assim, tinha que tratar o erro e não corrigir como pensava

Private Sub txt_periodo_AfterUpdate()

Dim lngPriLin, lngUltLin, lngLoopLin       As Long
Dim datPeriodo                             As Date
Dim strbusca                               As String
    
    lngPriLin = 2
    
    With Me
        On Error GoTo trataErro
        datPeriodo = .txt_periodo.Text
    End With
    
    With wshComum
        lngUltLin = .Cells(.Rows.Count, 2).End(xlUp).Row
    End With
    
    With wshComum
        For lngLoopLin = lngPriLin To lngUltLin Step 1
            strbusca = .Cells(lngLoopLin, 2)
    
            If strbusca = datPeriodo Then
                Me.txt_rpa = CCur(.Cells(lngLoopLin, 3))
                Me.txt_fspa = CCur(.Cells(lngLoopLin, 4))
                Exit For
            End If
        Next lngLoopLin
    End With
trataErro:
If Err.Number = 13 Then
    Me.txt_periodo = ""
    Me.txt_rpa = ""
    Me.txt_fspa = ""
End If

End Sub
 
Postado : 24/05/2018 6:37 am