Pagina 1 din 1

Suprimarea inchiderii userform si workbook folosind "X"

Scris: Mar Sep 12, 2017 9:11 am
de zvonacfirst
Salutare.

Am un workbook pentru care vreau sa suprim posibilitatea de a fi inchis cu click pe butonul "X", cu un msgbox de genul:

Cod: Selectaţi tot

MsgBox "Utilizati butonul FINALIZARE", vbOKOnly, "Actiune nepermisa"
Motivul este ca vreau sa dirijez userul catre o inchidere care sa asigure si salvarea modificarilor si atunci am pus un buton care il duce la un userform.
Acest userform are un buton Save and Close dar as vrea sa suprim de asemenea inchiderea prin click pe "X", cu un msgbox de genul:

Cod: Selectaţi tot

MsgBox "Utilizati butonul Save and Close", vbOKOnly, "Actiune nepermisa"
Ideea este ca userul sa nu aiba de ales intre Save, Don't save si Cancel pentru a nu risca sa aleaga o optiune care nu salveaza modificarile.

Codurile utilizate sunt urmatoarele:
- In ThisWorkbook

Cod: Selectaţi tot

Option Explicit
Public BooleanForClosing As Boolean
--------------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     
    If BooleanForClosing = False Then
        MsgBox "Utilizati butonul FINALIZARE", vbOKOnly, "Actiune nepermisa"
        Cancel = True
    End If
     
End Sub
-------------------------------------------------------------------
Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show
End Sub
- In Userform1:

Cod: Selectaţi tot

Private Sub CommandButton1_Click()
Me.Hide
Application.Visible = True
End Sub
------------------------------------------------------------------
Private Sub CommandButton2_Click()
Application.DisplayAlerts = False
    
    With ThisWorkbook
        .Save
        .Close
    End With
    
Application.DisplayAlerts = True
End Sub
------------------------------------------------------------------
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "Utilizati butonul Save and Close", vbOKOnly, "Actiune nepermisa"
    End If
End Sub
- In Module (cod simplu, fara legatura cu problema, dar il postez totusi)

Cod: Selectaţi tot

Sub Finalizare()
Application.Visible = False
UserForm1.Show
End Sub
Treaba este ca daca apas butonul Save and Close in intoarce msgbox-ul de la inchiderea workbookului, si intru intr-un cerc fara iesire.
Va solicit ajutorul pentru rezolvarea problemei. Am atasat un workbook pentru exemplificare.
Multumesc in avans.

Re: Suprimarea inchiderii userform si workbook folosind "X"

Scris: Mar Sep 12, 2017 10:50 am
de Liana
Buna,

Intra intr-un loop datorita codului din ThisWorkbook
Stergeti/dezactivati codul asta si va functiona.

Cod: Selectaţi tot

Public BooleanForClosing As Boolean
--------------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     
    If BooleanForClosing = False Then
        MsgBox "Utilizati butonul FINALIZARE", vbOKOnly, "Actiune nepermisa"
        Cancel = True
    End If
     
End Sub

Re: Suprimarea inchiderii userform si workbook folosind "X"

Scris: Mar Sep 12, 2017 5:30 pm
de zvonacfirst
Buna. Multumesc.
Daca sterg/dezactivez acel cod, butonul X (Close) din aplicatie devine activ, ori eu doresc exact contrariul. Daca X devine inactiv si intoarce acel msgbox, fortez userul sa utilizeze butonul Finalizare din fiecare sheet pentru a deschide userform1.
De asemenea nici butonul X din userform nu trebuie sa fie activ.

Re: Suprimarea inchiderii userform si workbook folosind "X"

Scris: Mar Sep 12, 2017 9:04 pm
de TudyBTH
Buna,

In Thisworkbook:

Cod: Selectaţi tot

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Cancel = Not BooleanForClosing
    If Cancel = True Then
        MsgBox "Utilizati butonul FINALIZARE", vbOKOnly, "Actiune nepermisa"
    End If
End Sub
In sub-ul butonului

Cod: Selectaţi tot

Private Sub CommandButton2_Click()
    BooleanForClosing = True
    With ThisWorkbook
        .Close True
    End With
End Sub

Re: Suprimarea inchiderii userform si workbook folosind "X"

Scris: Joi Sep 14, 2017 8:57 am
de zvonacfirst
Multumesc mult.
Ce am atasat este doar un test. Am mutat codurile in workbookul la care lucrez si am avut surpriza sa imi dea o eroare referitoare la codul din ThisWorkbook.
Am eliminat Option Explicit si functioneaza.

Re: Suprimarea inchiderii userform si workbook folosind "X"

Scris: Sâm Sep 16, 2017 6:58 pm
de Dr.Windows
zvonacfirst scrie:Am eliminat Option Explicit si functioneaza.
Acea optiune forteaza utilizatorul sa declare variabilele pe care le utilizeaza in acel modul si asta este bine pentru ca sunt mai multe avantaje:
1. Microsoft spune ca acel cod va fi executat ceva mai repede pentru ca nu mai sta sa verifice pe percurs de ce tip sunt acele variabile in plus nu mai exista riscul de a reutiliza o variabila stocand in ea alt tip de date fata ed cel "declarat";
2. Declararea cu instructiunea DIM ajuta si la scrierea mai usor a variabilelor cu nume mai lung pentru ca dupa cateva caractere se poate "forta" editorul cu CTRL+SPATIU sa afiseze lista de "posibilitati" si pot alege variabila dintr-o lista iar astfel nici nu mai fac greseli de "dactilografiere";
3. Declararea variabilelor in acea procedura ajuta la "protejarea" lor local, adica nu pot fi modificate in alte proceduri in cazul in care au fost declarate si ca variabile publice.