inregistrare date din userform

maryurs24
Mesaje: 70
Membru din: Joi Feb 21, 2013 8:34 am

inregistrare date din userform

Mesaj de maryurs24 » Mar Iun 11, 2019 3:59 pm

Salut
Am fisierul atasat,in care am creat un userform.Cum fac ca dupa bifarea celor 3 coloane din aceasta forma , in primul rand gol din coloanele E,F si G sa se inregistreze ceea ce este bifat?
Adica eu tot timpul sa am pe ecran acea forma.Bifez cate o optiune(doar cate 1) din fiecare coloana din forma si apoi apas ok.Atunci datele din forma sa se scrie in fisier in dreptul coloanelor E,F si G, iar in coloana H sa se scrie data si ora la care am apasat ok.Daca apas AM GRESIT, sa dispara ce este bifat, iar datele sa nu se inregistreze.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

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

Re: inregistrare date din userform

Mesaj de Dr.Windows » Mar Iun 11, 2019 5:12 pm

Salut!

In primul rand 2 observatii:
1. Daca trebuie sa fie o singura valoare pe coloana nu ar fi trebuit sa folosesti "CheckBox" ci "OptionButton". Am lasat exemplul totusi asa cum a fost conceput.
2. Ca sa poti controla fiecare coloana, obiectele de pe coloana respectiva trebuiesc incluse intr-un "Frame"

Pentru salvarea datelor, trebuie scris cod in evenimentul Click al butonului Ok. Doar trebuie gasit ultimul rand disponibil, si apoi scris ce trebuie pe fiecare coloana:

Cod: Selectaţi tot

Private Sub CommandButton1_Click()
    Dim r As Double, sh As Sheet1
    Dim elDefect As Control, elBara As Control, elCuloare As Control
    
    'stabileste foaia in care se lucreaza
    Set sh = Sheets("Sheet1")
    
    'detecteaza primul rand liber pe coloana de referinta (E)
    r = sh.Cells(sh.Rows.Count, "E").End(xlUp).Row + 1
    
    'scrie pe coloana H data si ora
    sh.Range("H" & r).Value = Now()
    
    'Scrie in coloana E defect
    For Each elDefect In Me.fraDefect.Controls
        If TypeName(elDefect) = "CheckBox" Then
            If elDefect.Value = True Then
                sh.Range("E" & r).Value = elDefect.Caption
                Exit For
            End If
        End If
    Next elDefect
    
    'Scrie in coloana F tip bara
    For Each elBara In Me.fraBara.Controls
        If TypeName(elBara) = "CheckBox" Then
            If elBara.Value = True Then
                sh.Range("F" & r).Value = elBara.Caption
                Exit For
            End If
        End If
    Next elBara
    
    'Scrie in coloana G Culoare
    For Each elCuloare In Me.fraCuloare.Controls
        If TypeName(elCuloare) = "CheckBox" Then
            If elCuloare.Value = True Then
                sh.Range("G" & r).Value = elCuloare.Caption
                Exit For
            End If
        End If
    Next elCuloare
    
End Sub
Pentru butonul "Am gresit" presupun ca defapt doreai o doar resetare a checkboxurilor, asa va varianta rapida este:

Cod: Selectaţi tot

Private Sub CommandButton2_Click()
    Dim elem As Control
    For Each elem In Me.Controls
        If TypeName(elem) = "CheckBox" Then
            elem.Value = False
        End If
    Next elem
End Sub
Mai multe detalii in fisierul atasat.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

maryurs24
Mesaje: 70
Membru din: Joi Feb 21, 2013 8:34 am

Re: inregistrare date din userform

Mesaj de maryurs24 » Mar Iun 11, 2019 5:31 pm

Merge perfect.Multumesc.

maryurs24
Mesaje: 70
Membru din: Joi Feb 21, 2013 8:34 am

Re: inregistrare date din userform

Mesaj de maryurs24 » Sâm Iun 15, 2019 9:27 am

Salut.
Am facut modificarile din CheckBox in OptionButton.
A mers bine Ieri
Azi imi da eroare Compile Error: User-defined type not defined
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

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

Re: inregistrare date din userform

Mesaj de Dr.Windows » Dum Iun 16, 2019 8:41 am

Salut!

Cand apare o eroare, e bine sa te obisnuiesti sa citesti mesajul de eroare si ce anume a fost "subliniat" pentru ca editorul VBA incearca sa te ajute:
Eroare.jpg
In cazul de fata doar trebuie corectata linia respectiva cu:

Cod: Selectaţi tot

Dim r As Double, sh As Worksheet
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

maryurs24
Mesaje: 70
Membru din: Joi Feb 21, 2013 8:34 am

Re: inregistrare date din userform

Mesaj de maryurs24 » Dum Iun 16, 2019 12:20 pm

dar ce s-a intamplat?
O zi a mers bine, iar a 2-a zi aparea asta.

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

Re: inregistrare date din userform

Mesaj de Dr.Windows » Mar Iun 18, 2019 10:32 am

Cineva a modificat codul... chiar si din gresala, pentru ca in momentul in care se apasa "Debug" iar partea cu eroarea era selectata, un simplu spatiu poate sa stearga bucata respectiva... si de aici "dezastrul"... :lol:

Scrie răspuns

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