VBA - Wenn Checkbox = True, Dann Userform Werte in Zelle eintragen
#1
Hallo Zusammen,

ich habe gerade ein Problem bei der Code erstellung und weiss nicht wirklich ich vorgehen muss.

Beispiel Sachverhalt :

Checkbox "Position bestätigt" ist bei Artikel 1, 4, 5 und 8 = True, wobei die Checkbox bei Artikel 2, 3, 6 und 7  = False sind.



Nun möchte ich die UserformWerte aus Artikel 1, 4, 5 und 8 in ein Tabellenblatt nacheinander rauschreiben.

Artikel 1 soll in Zelle 29 (ArtikelBez1 = C29, ArtikelBez2 = C30, ArtikelBez3 = C31, Menge = F29, ME = G29, Einzelpreis = H29)
Artikel 4 soll in Zelle 32 (ArtikelBez1 = C32, ArtikelBez2 = C33, ArtikelBez3 = C34, Menge = F32, ME = G32, Einzelpreis = H32)
Artikel 5 soll in Zelle 35 (ArtikelBez1 = C35, ArtikelBez2 = C36, ArtikelBez3 = C37, Menge = F35, ME = G35, Einzelpreis = H35)
Artikel 8 soll in Zelle 38 (ArtikelBez1 = C38, ArtikelBez2 = C39, ArtikelBez3 = C40, Menge = F35, ME = G38, Einzelpreis = H38)
usw.


[
Bild bitte so als Datei hochladen: Klick mich!
]

Ich hoffe man versteht, was ich vorhabe :)

Über einen Ansatz würde ich mich sehr freuen

      

   Grüße

Semi
Top
#2
Zitat:Ich hoffe man versteht, was ich vorhabe
Ich bin nicht ganz sicher... meinst du so?

Code:
With Sheets("DeinBlatt")
    If CheckBox1 = True then
        .Range("C29") = TextBox1
        .Range("C30") = TextBox2
        'etc. etc.
    End If
End With
Schöne Grüße
Berni
Top
#3
Hi MisterBurns,

vielen Dank hierfür, aber leider ist es nicht der Code nach dem ich suche, da es nicht dynamisch ist. Ich glaube man müsste hier eher mit schleifen arbeiten.

In deinem Beispiel hätte ich eine Lücke, da die 2te Checkbox = False ist und somit die Range ("C32:C35") leer wäre.

Jedoch möchte in der Range ("C32:C35") die nächsten Werte stehen haben bei der die darauffolgende Checkbox auf True ist, in meinem Beispiel also Checkbox 4.

Grüße

Semi
Top
#4
Und wie heißen deine Textfelder? Sind die nach irgendeiner Logik numeriert? Ohne das wird's nämlich nix mit der Schleife.
Schöne Grüße
Berni
Top
#5
Hier das Schema der Artikelpositionen:

Artikel 1: Artikel1Bez1, Artikel1Bez2, Artikel1Bez3, Artikel1Menge, Artikel1ME, Artikel1Preis
Artikel 2: Artikel2Bez1, Artikel2Bez2, Artikel2Bez3, Artikel2Menge, Artikel2ME, Artikel2Preis
Artikel 3: Artikel3Bez1, Artikel3Bez2, Artikel3Bez3, Artikel3Menge, Artikel3ME, Artikel3Preis
usw.
Top
#6
So müsste es gehen, vorausgesetzt, du hast deine Comboboxen von 1 weg durchgehend gleich wie die Artikelnummer nummeriert:

Code:
Private Sub CommandButton1_Click()
Dim ChBox As Object
Dim i As Integer
Dim j As Integer
Dim k As Integer

i = 29          'Startzeile in Tabelle
j = 1           'Zähler für Artikelseite
k = 1           'Zähler für Textbox

For Each ChBox In Me.Controls
   If TypeName(ChBox) = "CheckBox" Then
       If ChBox.Value = True Then
       Debug.Print ChBox.Name
           With Sheets("Tabelle1")         'Blattname anpassen
               Range("C" & i) = Me.Controls("Artikel" & j & "Bez" & k)
               Range("C" & i + 1) = Me.Controls("Artikel" & j & "Bez" & k + 1)
               Range("C" & i + 2) = Me.Controls("Artikel" & j & "Bez" & k + 2)
               Range("F" & i) = Me.Controls("Artikel" & j & "Menge")
               Range("G" & i) = Me.Controls("Artikel" & j & "ME")
               Range("H" & i) = Me.Controls("Artikel" & j & "Preis")
           End With
       i = i + 3
       End If
   j = j + 1
   End If

Next ChBox

End Sub
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • Semi069
Top
#7
Auch Hallo,

war zu langsam aber da ich doch ein wenig anders als Bernie durch die Userform gehe, poste ich meinen Code mal.

Code:
Private Sub CommandButton1_Click()
   Dim lngC As Long
   Dim lngZeile As Long
  
   lngZeile = 32
   With Worksheets("Tabelle1")
      For lngC = 1 To Me.MultiPage1.Pages.Count
      '   MsgBox lngC
         If Controls("Checkbox" & lngC) Then
            .Cells(lngZeile, 3).Value = Controls("Artikel" & lngC & "Bez1").Value
            .Cells(lngZeile + 1, 3).Value = Controls("Artikel" & lngC & "Bez2").Value
            'und die weiteren Textboxen
            lngZeile = lngZeile + 3
         End If
      Next lngC
   End With
End Sub
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • Semi069
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste