Avatar billede valsoeje Nybegynder
08. december 2005 - 10:46 Der 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).

Hvordan gør jeg det med kode ?
Avatar billede kuiper Nybegynder
08. december 2005 - 11:21 #1
Hej
i koden :
Private Sub CheckBox1_Click()
Range("a1") = CheckBox1.Value
End Sub

Hvilket giver "Sand" hvis den er valgt eller "falsk" hvis den ikke er valgt
udfra dette kan du bare lave en hvis, til brug for dit program

Hilsen
søren
Avatar billede valsoeje Nybegynder
08. december 2005 - 11:34 #2
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.
Avatar billede kabbak Professor
08. december 2005 - 12:29 #3
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
Avatar billede valsoeje Nybegynder
08. december 2005 - 13:00 #4
Hej Kabbak.

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".
Avatar billede kabbak Professor
08. december 2005 - 13:09 #5
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
 
    Unload Me
    UserForm3.Show
 
 
End Sub
Avatar billede valsoeje Nybegynder
08. december 2005 - 13:35 #6
Nej, jeg klarer det ved at sætte
     
      For I = 6 to 25

i stedet for.

Men hvorfor forskellen på
  If CheckBox1 Then Kode = "1" Else Kode = "0"
  If CheckBox2 Then Kode = Kode & "1" Else Kode = Kode & "0"  ?
Avatar billede valsoeje Nybegynder
08. december 2005 - 13:50 #7
...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 :=)
Avatar billede kabbak Professor
08. december 2005 - 13:56 #8
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 ????
Avatar billede valsoeje Nybegynder
08. december 2005 - 13:58 #9
20 af slagsen.....
Avatar billede valsoeje Nybegynder
08. december 2005 - 14:00 #10
...for at gøre ondt værre er der - som du har set - andre bokse der bruger de første 5 kolonner.
Avatar billede kabbak Professor
08. december 2005 - 14:06 #11
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
Avatar billede kabbak Professor
08. december 2005 - 14:07 #12
For I = 6 to 25
      .Cells(lRow, i) = Val(Mid(Kode, i-5, 1))
  Next

sådan, den anden var fejl
Avatar billede valsoeje Nybegynder
08. december 2005 - 14:24 #13
Lige i øjet !

Nu virker det for mig - smid et svar :=)
Avatar billede kabbak Professor
08. december 2005 - 14:39 #14
et svar ;-))
Avatar billede valsoeje Nybegynder
08. december 2005 - 14:46 #15
Tak for hjælpen
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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