Avatar billede Super Mester
06. september 2021 - 14:03 Der er 10 kommentarer

Active X Checkbox dato stempel

Jeg har en kollonne 150 ActiveX checkboxe. I kollonnen til højre for checkboxene er det linket til cellen der viser True eller False afhænging om boksen er checket.

Jeg leder efter et stykke VBA kode der når en af checkboxene hver for sig bliver klikket på kan enter dags dato i en celle i samme rækken som checkboxen. Datoen må ikke ændre sig efterfølgende når filen åbnes etc. Kan det lade sig gøre?
Avatar billede Super Mester
06. september 2021 - 14:22 #1
Ekstra information:
Jeg har prøvet med nedensteående VBA kode. Den virker på sin vis hvis jeg i stedet for If Cell.Value <> "" Then bruger If Cell.Value = True Then


MEN, den virker kun når jeg indtaster True, ikke når jeg checkboxen som så får der til at stå True i cellen til højre for Checkboxen.

Private Sub Worksheet_Change(ByVal Target As Range)
' Auto Date
Dim Cell As Range
For Each Cell In Target
    If Cell.Column = Range("A:A").Column Then
        If Cell.Value <> "" Then
            Cells(Cell.Row, "B").Value = Int(Now)
        Else
            Cells(Cell.Row, "B").Value = ""
        End If
    End If
Next Cell
End Sub
Avatar billede jens48 Ekspert
06. september 2021 - 15:04 #2
Denne linje

If Cell.Column = Range("A:A").Column Then

kan omskrives til

If Cell.Column = 1 Then

Men vil du kun have den til at virke i kolonne A?
Avatar billede Super Mester
06. september 2021 - 15:09 #3
Checkboxen er i kollonne T, True/False kommer i Kolonne U og datoen håber jeg kan komme i kolonne p.
Avatar billede jens48 Ekspert
07. september 2021 - 20:51 #4
Jeg ved ikke lige hvordan man kan få en makro til at reagere på 150 forskellige Checkboxe, men måske var det en mulighed at lave kolonne U med data validering, fra en liste med blot TRUE og FALSE. Så ville denne lille makro klare at sætte dags dato i kolonne P hver gang der vælges TRUE

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("U:U")) Is Nothing Then
If Target.Value = True Then
Target.Offset(0, -5) = Int(Now())
Else
Target.Offset(0, -5) = ""
End If
End If
End Sub
Avatar billede Super Mester
08. september 2021 - 08:12 #5
Jeg har prøvet som du beskriver også lavet datavalidering. Det virker på samme måde som min Macro. Når jeg klikker i Checkboxen, kommer der til at stå TRUE i cellen til højre for Checkboxen. Datoen kommer ikke i kollonne P. Det sker først når jeg flytter curseren til en anden celle og går tilbage og dobbeltklikker på cellen til højre for Checkboxen hvor der står TRUE, så kommer datoen frem i kollonne P. Det samme hvis jeg SKRIVER TRUE i cellen til højre for Checkboxen, så kommer datoen også korrekt i Kollonne P. Det ser ud til at der er en forskel i om det er Checkboxen der har fået der til at stå TRUE i cellen til højre for Checkboxen eller om jeg Indtaster TRUE der. Jeg har prøvet på at indsætte en ekstra kollonne og linke med en formel til Kollonne u og så bruge dens data, men det giver samme problem.
Avatar billede Super Mester
08. september 2021 - 08:17 #6
NB. Når jeg vælger TRUE med Filteret kommer Datoen frem, men hensigten var at dette skulle ske når jeg klikker på Checkboxen.
Avatar billede jens48 Ekspert
08. september 2021 - 08:51 #7
Ja, og det er her jeg står af. Man kan naturligvis lave 150 makroer. En der bliver aktiveret til hver enkelt checkbox, men det ville være temmeligt omstændeligt at lave.
Avatar billede store-morten Ekspert
09. september 2021 - 09:03 #8
Ja, du kommer nok til at lave en kode til hver knap.
Da tryk på en Checkbox ikke registreres som en ændring i arket.

Har lavet en kode, hvor der kun skal rettes et tal for hver Checkbox.
Public Status

Private Sub CheckBox1_Click()

Status = CheckBox1.LinkedCell 'tal tilrettes

If Range(Status) = True Then
    Range(Status).Offset(0, -5) = Int(Now())
Else
    Range(Status).Offset(0, -5) = ""
End If

End Sub

Private Sub CheckBox2_Click()

Status = CheckBox2.LinkedCell 'tal tilrettes

If Range(Status) = True Then
    Range(Status).Offset(0, -5) = Int(Now())
Else
    Range(Status).Offset(0, -5) = ""
End If

End Sub
Avatar billede Super Mester
09. september 2021 - 13:55 #9
Hej Morten,

Jeg behøver jo ikke skrive at din macro virker, for det ved du jo 🙂👍 
Og..du har ret jeg er nødt til at kopiere den faktisk rigtig mange gange, men bedre jeg gør det end andre skal bruge tid på at indtaste datoen🙂

Mange tak for din hjælp.
Avatar billede store-morten Ekspert
09. september 2021 - 20:31 #10
Public Status

Private Sub Sæt_Dato()
    If Range(Status) = True Then
        Range(Status).Offset(0, -5) = Int(Now())
    Else
        Range(Status).Offset(0, -5) = ""
    End If
End Sub

Private Sub CheckBox1_Click()
    Status = CheckBox1.LinkedCell
    Sæt_Dato
End Sub

Private Sub CheckBox2_Click()
    Status = CheckBox2.LinkedCell
    Sæt_Dato
End Sub

Private Sub CheckBox3_Click()
    Status = CheckBox3.LinkedCell
    Sæt_Dato
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester