08. december 2005 - 10:46Der er
14 kommentarer og 1 løsning
CheckBox i Excel (VBA)
Jeg har en UserForm med tre Checkboxe.
Når den er udfyldt trykker brugeren på en "Tilføj"-knap, og hvis den første er markeret skal der føres et 1-tal over i kolonne A, hvis den anden er markeret skal der føres et 1-tal over i kolonne B osv. (Hvis begge er markeret skal der både et 1-tal i kolonne A og B).
Det er lidt mere kompliceret; min "tilføj"-knap er programmeret til at tilføje det indtastede i den næste ledige række i mit regneark. Det vil sige, at ved første indtastning dannes en række med et 1-tal i eks. kolonne A og B, ved næste indtastning dannes en ny række med et 1-tal i kolonne B og C. Det vil sige, at der skal læses om den er krydset af eller ej, og er den det skal 1-tallet tages med over i den række som tilføjes, og så placeres i den rigtige kolonne.
Private Sub CommandButton1_Click() Dim Kode As String x = Range("A65536").End(xlUp).Row + 1 If CheckBox1 Then Kode = "1" Else Kode = "0" If CheckBox2 Then Kode = Kode & "1" Else Kode = Kode & "0" If CheckBox3 Then Kode = Kode & "1" Else Kode = Kode & "0" For i = 1 To 3 Cells(x, i) = Val(Mid(Kode, i, 1)) Next End Sub
Jeg skal forsøge at få det ind i denne kode som jeg har i forvejen -
Private Sub CommandButton2_Click() Dim wksData As Worksheet Dim ctl As Control Dim lRow As Long Dim Kode As String
Set wksData = Worksheets("Data") 'Finder næste ledige række i Data arket. lRow = wksData.Range("A65536").End(xlUp).Row + 1
'Tilføjer teksten i tekstbokse og kombinationsbokse til næste række ledige celler. With wksData .Cells(lRow, 1) = Me.TextBox2.Value .Range("B" & CStr(lRow)).Value = CDate(ComboBox4.Text) .Cells(lRow, 3) = Me.ComboBox1.Value .Cells(lRow, 4) = Me.ComboBox2.Value .Cells(lRow, 5) = Me.TextBox3.Value .Cells(lRow, 27) = Me.ComboBox3.Value End With
Unload Me UserForm3.Show
End Sub
Jeg forsøgte efter "With..." men fik den kun til at skrive "0", også der hvor den skulle tilføje "1".
Private Sub CommandButton2_Click() Dim wksData As Worksheet Dim ctl As Control Dim lRow As Long Dim Kode As String If CheckBox1 Then Kode = "1" Else Kode = "0" If CheckBox2 Then Kode = Kode & "1" Else Kode = Kode & "0" If CheckBox3 Then Kode = Kode & "1" Else Kode = Kode & "0"
Set wksData = Worksheets("Data") 'Finder næste ledige række i Data arket. lRow = wksData.Range("A65536").End(xlUp).Row + 1
'Tilføjer teksten i tekstbokse og kombinationsbokse til næste række ledige celler. With wksData
For i = 1 To 3 .Cells(lRow, i) = Val(Mid(Kode, i, 1)) Next
' NB, linierne herunder bruger jo også A +B + C kolonnerne ' du kan jo ikke få 2 værdier i de samme celler .Cells(lRow, 1) = Me.TextBox2.Value .Range("B" & CStr(lRow)).Value = CDate(ComboBox4.Text) .Cells(lRow, 3) = Me.ComboBox1.Value .Cells(lRow, 4) = Me.ComboBox2.Value .Cells(lRow, 5) = Me.TextBox3.Value .Cells(lRow, 27) = Me.ComboBox3.Value End With
...har lige prøvet; der kommer kun 0'er, også selv om checkboxene er vingede af¿¿¿
Men de kommer ind i de rigtige kolonner, altså 6 til 25. (havde lidt flere kolonner end de 3 jeg startede med at beskrive, men jeg prøvede at holde det simpelt :=)
I bruges også til at læse strengen (Kode), der er kun 3 tegn, så dem fanger du aldrig med For I = 6 to 25 det giver jo også 19, hvor mange CheckBox har du ????
Ok Fortsæt med at lave flere linier som disse, intil du ille har flere bokse
If CheckBox1 Then Kode = "1" Else Kode = "0" If CheckBox2 Then Kode = Kode & "1" Else Kode = Kode & "0" If CheckBox3 Then Kode = Kode & "1" Else Kode = Kode & "0" fortsæt her
Koden bliver så sådan
For I = 6 to 25 .Cells(lRow, i-5) = Val(Mid(Kode, i, 1)) Next
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.