Pagina 1 din 1

inregistrare date din userform

Scris: Mar Iun 11, 2019 3:59 pm
de maryurs24
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.

Re: inregistrare date din userform

Scris: Mar Iun 11, 2019 5:12 pm
de Dr.Windows
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.

Re: inregistrare date din userform

Scris: Mar Iun 11, 2019 5:31 pm
de maryurs24
Merge perfect.Multumesc.

Re: inregistrare date din userform

Scris: Sâm Iun 15, 2019 9:27 am
de maryurs24
Salut.
Am facut modificarile din CheckBox in OptionButton.
A mers bine Ieri
Azi imi da eroare Compile Error: User-defined type not defined

Re: inregistrare date din userform

Scris: Dum Iun 16, 2019 8:41 am
de Dr.Windows
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

Re: inregistrare date din userform

Scris: Dum Iun 16, 2019 12:20 pm
de maryurs24
dar ce s-a intamplat?
O zi a mers bine, iar a 2-a zi aparea asta.

Re: inregistrare date din userform

Scris: Mar Iun 18, 2019 10:32 am
de Dr.Windows
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: