User form vizibil - Excel hidden... si invers

zvonacfirst
Mesaje: 105
Membru din: Mie Feb 19, 2014 10:41 pm

User form vizibil - Excel hidden... si invers

Mesaj de zvonacfirst » Dum Feb 26, 2017 7:40 pm

Va rog sa ma ajutati sa-i dau de cap la acest workbook.
Nu stiu ce gresesc in codurile din workbookul atasat, dar nu functioneaza asa cum imi doresc.
Ce as dori:
- la lansare sa deschida userform iar excel sa nu fie vizibil - asta merge
- in cazul in care in lstCodDoc nu este selectat nimic, sa dea msgbox cu eroare - nu merge. Ceva este gresit sau ceva lipseste in codul meu. Imi da Runtime error 9 si daca apas pe Debug imi marcheaza cu galben linia Sheets(sht).Activate
- dupa eroare in loc sa ramana userformul deschis pentru a selecta ceva in lstCodDoc, acesta se ascunde si se deschide excel. Eu as dori ca dupa eroare, sa reapara userform pentru a selecta ceva in lstCodDoc.

Cod: Selectaţi tot

Private Sub cmdOpenSheet_Click()

If frmOpenSheet.lstCodDoc.Value = "" Then
MsgBox "Selecteaza codul documentului", vbCritical
Else
    Dim i As Integer, sht As String
    For i = 0 To lstCodDoc.ListCount - 1
        If lstCodDoc.Selected(i) = True Then
            sht = lstCodDoc.List(i)
        End If
    Next i
    Sheets(sht).Activate
    End
End If

Application.Visible = True
Unload Me

End Sub
- la click pe cmdOpenSheet as vrea sa se deschida sheetul cu aceeasi denumire ca selectia din lstCodDoc. Asta merge doar ca excel nu devine vizibil.
- dupa vizualizarea sheetului, la click pe cmdOpenUserform ar trebui sa deschida userform si sa ascunda excel - acum deschide userform dar excel ramane vizibil.
Unde gresesc?
Multumesc.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

TudyBTH
Moderator
Moderator
Mesaje: 993
Membru din: Joi Feb 11, 2016 2:12 pm
Localitate: Cluj Napoca

Re: User form vizibil - Excel hidden... si invers

Mesaj de TudyBTH » Lun Feb 27, 2017 12:08 am

Buna,

Incercati codul de mai jos

Cod: Selectaţi tot

Private Sub cmdOpenSheet_Click()

If frmOpenSheet.lstCodDoc.ListIndex = -1 Then
    MsgBox "Selecteaza codul documentului", vbCritical
Else
    Dim i As Integer, sht As String
    For i = 0 To lstCodDoc.ListCount - 1
        If lstCodDoc.Selected(i) = True Then
            sht = lstCodDoc.List(i)
        End If
    Next i
    Application.Visible = True
    Sheets(sht).Activate
    End
    Unload Me
End If
End Sub
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.

zvonacfirst
Mesaje: 105
Membru din: Mie Feb 19, 2014 10:41 pm

Re: User form vizibil - Excel hidden... si invers

Mesaj de zvonacfirst » Lun Feb 27, 2017 3:00 pm

Multumesc mult. Era simplu... sau asa pare acum. :)

zvonacfirst
Mesaje: 105
Membru din: Mie Feb 19, 2014 10:41 pm

Re: User form vizibil - Excel hidden... si invers

Mesaj de zvonacfirst » Lun Mar 06, 2017 10:21 am

Salutari.

Revin cu o intrebare.
Cand lansez worksheetul trebuie sa fie vizibil doar userformul de logare iar aplicatia Excel trebuie sa fie ascunsa.
Dar nu merge foarte bine deoarece pana cand apare userformul de logare Excel, apare, fiind vizibil o secunda, exact sheetul cu lista userilor si cu parolele.
Acest sheet trebuie sa fie activ deoarece acolo se inregistreaza un istoric al intrarii si iesirii userilor din aplicatie.
Este normal sa se intample asa? Ce rezolvare ar fi?
De exemplu si in Testul care este subiectul acestui topic se intampla la fel.
Multumesc.

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: User form vizibil - Excel hidden... si invers

Mesaj de Dr.Windows » Joi Mar 09, 2017 10:32 am

Salut!

Nu este obligatoriu ca o foaie sa fie afisata decat daca un utilizator va completa "de mana" date acolo, altfel foaia poate sta ascunsa. Mai ales cea cu parole ar trebui sa fie setata (in VBA) nu pe "Hidden" ca asa o poate reafisa oricine cu "unhide", ci ar trebui setata ca "Very Hidden".

Singura "restrictie" in Excel este ca nu poate functiona decat daca are cel putin o foaie vizibila - nu se pot ascunde toate - dar nici asta nu este o problema pentru ca atunci cand folosesti VBA, unii utilizatori mai uita sa activeze codul macro, exceptand situatiile periculoase cand se activeaza toate ("Enable all macros"). Dar poate ramane vizibila o pagina goala sau una care sa le reaminteasca sa activeze codul macro. ;)

Si combinand cele doua probleme de mai sus, rezolvarea ar putea fi un subiect mai vechi: Cum reamintim utilizatorilor sa activeze macro-urile

zvonacfirst
Mesaje: 105
Membru din: Mie Feb 19, 2014 10:41 pm

Re: User form vizibil - Excel hidden... si invers

Mesaj de zvonacfirst » Joi Mar 09, 2017 12:41 pm

Referitor la macrouri toti colegii mei care vor folosi workbookul au macrourile activate.
Revenind la problema mea, am introdus in codul Workbook_Open urmatoarea linie:

Cod: Selectaţi tot

Sheet8.Select
Am mai incercat si:

Cod: Selectaţi tot

Worksheets("Splash").Activate
Acest Splash este un sheet cu un background. Am sperat ca la deschidere va fi afisat sheetul "Splash (Sheet8)".
Nu se intampla asa, tot sheetul Login apare la deschidere. Deoarece inchiderea worksheetului se face cu o macrocomanda care scrie in "Login (Sheet1)" data si ora la care userul inchide workbookul si salveaza, acel sheet ramane selectat.

Fiecare user navigheaza intre 3 formuri. Userii nu au aces decat la un anumit sheet la un moment dat iar acel sheet nu il pot decat vizualiza, utiliza filtre si printa. Sheetul este in full screen si are suprimate comenzile de inchidere, minimizare sau coborare pe bara. Asa ca nu am vazut rostul ascunderii sheeturilor cu date confidentiale. Doar adminul are acces la setari si poate vizualiza intregul workbook. Pentru restul userilor aplicatia este hidden.

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: User form vizibil - Excel hidden... si invers

Mesaj de Dr.Windows » Joi Mar 09, 2017 2:20 pm

zvonacfirst scrie:...inchiderea worksheetului se face cu o macrocomanda care scrie in "Login (Sheet1)" data si ora la care userul inchide workbookul si salveaza, acel sheet ramane selectat.
Pai cine a spus ca pentru a scrie intr-o foaie trebuie mai intai sa o selectezi/activezi?... ;)

De ex. secventa de mai jos scrie in "Sheet1" care este ascunsa... deci nici nu am cum sa o activez:

Cod: Selectaţi tot

Private Sub cmdSalvare_Click()
    Dim ws As Worksheet
    Dim r As Double
    Set ws = Sheets("Sheet1")
    r = ws.UsedRange.Rows.Count + 1
    ws.Range("A" & r).Value = Me.TextBox1
    ws.Range("B" & r).Value = Me.TextBox2
End Sub
Asa ca ajusteaza codul in asa fel incat sa ramana activa o foaie "goala" sau cu ce date ar putea sa se vada fara probleme, dar in evenimentul open ar trebui sa folosesti o setare care nu mai "deseneaza" ecranul si atunci sunt sanse sa nu se mai vada nici macar pentru o secunda vreo foaie din Excel - Application.ScreenUpdating = False:

Cod: Selectaţi tot

    Application.Visible = False
    UserForm1.Show
    Application.ScreenUpdating = False
Nu uita sa-l pui la loc pe True cand vei dori sa se vada date actualizate in foi... ;)

Ai si un fisier de test atasat.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

zvonacfirst
Mesaje: 105
Membru din: Mie Feb 19, 2014 10:41 pm

Re: User form vizibil - Excel hidden... si invers

Mesaj de zvonacfirst » Vin Mar 10, 2017 10:04 am

Multumesc mult Dr.Windows..
Mi-ai deschis ochii.
Am corectat cateva coduri si functioneaza. Am modificat inclusiv codul care imi inregistra data si ora cand userul inchide workbookul, am modificat un pic codul oferit de tine.

Cod: Selectaţi tot

Dim ws As Worksheet
Dim r As Double
Set ws = Sheets("Login")
    r = ws.UsedRange.Cells(Rows.Count, 11).End(xlUp).Row + 1
    ws.Range("J" & r).Value = Date
    ws.Range("K" & r).Value = Time
Solutia era sa tin permanent sheetul Login VeryHidden si sa il fac Visible doar cand am nevoie de el.
In rest am pus linia Worksheets("Splash").Activate pe open si close worksheet.

zvonacfirst
Mesaje: 105
Membru din: Mie Feb 19, 2014 10:41 pm

Re: User form vizibil - Excel hidden... si invers

Mesaj de zvonacfirst » Vin Mar 10, 2017 1:55 pm

Revin. Sper sa nu deranjeze insistenta mea. Va multumesc anticipat.
Incerc sa avansez si mai ma incurca cate o problema.
Acest cod as vrea sa faca urmatoarele:
- sa deprotejeze sheetul al carui nume este selectat in frmInterfata.lstCodDoc
- sa umple pe primele randuri care nu au valori in coloanele B, C, D, si E valorile din.... (vezi in code)
- sa protejeze respectivul sheet
- sa salveze workbookul
- sa inchida frmInterfata
- sa deschida frmInregistrare

Deocamdata ma blochez la urmatoarele linii:
name = frmInterfata.lstCodDoc.Value
Set ws = Worksheets("name") - linia asta este marcata cu galben

Cod: Selectaţi tot

Dim ws As Worksheet
Dim r As Double
Dim name As Variant

    name = frmInterfata.lstCodDoc.Value
    Set ws = Worksheets("name")
    ws.Unprotect Password:="123"
    r = ws.UsedRange.Cells(Rows.Count, 5).End(xlUp).Row + 1
    ws.Range("B" & r).Value = DTPicker1.Value
    ws.Range("C" & r).Value = cmbBU.Value
    ws.Range("D" & r).Value = txtUtilizator.Value
    ws.Range("E" & r).Value = txtFunctia.Value
    ws.Protect Password:="123", AllowFiltering:=True, DrawingObjects:=False
ActiveWorkbook.Save
frmInregistrare.Show
Unload Me

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: User form vizibil - Excel hidden... si invers

Mesaj de Dr.Windows » Vin Mar 10, 2017 2:26 pm

zvonacfirst scrie:Deocamdata ma blochez la urmatoarele linii:
name = frmInterfata.lstCodDoc.Value
Set ws = Worksheets("name") - linia asta este marcata cu galben
Pai daca pui o valoare intr-o variabila pentru a o utiliza ulterior nu mai folosi ghilimelele in Set ws = Worksheets(name).

In plus sper sa nu folosesti variabila name pentru ca este un nume rezervat in VBA si iti va da eroare oricum... asa ca foloseste sName sau orice alt nume "valabil"... ;)

Închis

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