Suprimarea inchiderii userform si workbook folosind "X"

Suprimarea inchiderii userform si workbook folosind "X"

Mesajde zvonacfirst » Mar Sep 12, 2017 9:11 am

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.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
zvonacfirst
 
Mesaje: 60
Membru din: Mie Feb 19, 2014 10:41 pm

Re: Suprimarea inchiderii userform si workbook folosind "X"

Mesajde Liana » Mar Sep 12, 2017 10:50 am

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
Liana
 
Mesaje: 9
Membru din: Mie Dec 14, 2016 6:07 pm

Re: Suprimarea inchiderii userform si workbook folosind "X"

Mesajde zvonacfirst » Mar Sep 12, 2017 5:30 pm

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.
zvonacfirst
 
Mesaje: 60
Membru din: Mie Feb 19, 2014 10:41 pm

Re: Suprimarea inchiderii userform si workbook folosind "X"

Mesajde TudyBTH » Mar Sep 12, 2017 9:04 pm

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
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.
TudyBTH
Moderator
Moderator
 
Mesaje: 778
Membru din: Joi Feb 11, 2016 2:12 pm
Localitate: Cluj Napoca

Re: Suprimarea inchiderii userform si workbook folosind "X"

Mesajde zvonacfirst » Joi Sep 14, 2017 8:57 am

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.
zvonacfirst
 
Mesaje: 60
Membru din: Mie Feb 19, 2014 10:41 pm

Re: Suprimarea inchiderii userform si workbook folosind "X"

Mesajde Dr.Windows » Sâm Sep 16, 2017 6:58 pm

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.
Dr.Windows
Site Admin
Site Admin
 
Mesaje: 4491
Membru din: Vin Iul 31, 2009 7:32 am


Înapoi la Visual Basic for Application (VBA) cu Excel - Intrebari tehnice

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 3 vizitatori