Clever-Excel-Forum

Normale Version: Wert in nächste freie Zeile schreiben VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

hier mal ein Ansatz für eine Checkbox:


Code:
Option Explicit
Public loCheck1
Public loCheck2
Public loCheck3
Public loCheck4
Public loCheck5
Public loCheck6
Private Sub CheckBox1_Click()

Dim loLetzte As Long
    If CheckBox1 = True Then                             'Wenn in Checkbox1 das Häckchen gesetzt ist'
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A" & loLetzte) = CheckBox1.Caption   'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
        loCheck1 = loLetzte
    Else
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row
        Range("A" & loCheck1) = ""   'Lösche den Wert aus ebendieser Zelle'
    End If
End Sub
Da Du Formeln in Deiner Tabelle hast und ich keine Zeit habe, habe ich es dabei belassen, den Eintrag zu löschen, normalerweise würde ich die ganze Zeile löschen und jedesmal neu eintragen.
Hallo zusammen,

das Ganze ist nicht gut durchdacht und für ungeübte User eher ungeeignet.
Wenn ich es richtig versteh, dann sollen ja noch zu den Checkboxen Zahlen eingegeben werden.
Diese müssten dann auch mit gelöscht werden.
Was soll passieren, wenn eine Checkbox mittendrin abgewählt wird. Dann entsteht in der Tabelle eine Lücke.

Man kann das Bisherige aber sehr leicht ohne viel Aufwand unter der Nutzung der Tag Eigenschaft der Checkbox umsetzen.

Folgender Code als Beispiel für eine Checkbox kann auf die anderen genauso adaptiert werden:


Code:
Private Sub CheckBox1_Click()
 Dim loLetzte As Long
 If CheckBox1.Tag = "" Then                             'Wenn in Checkbox1 das Häckchen gesetzt ist'
 loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row + 1
   Range("A" & loLetzte).Value = CheckBox1.Caption   'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
   Me.CheckBox1.Tag = "A" & loLetzte                 'shreibe die Zelladresse in die Tag Eigenschaft der Checkbox
 Else
   'Wenn in Checkbox1 das Häckchen gelöscht wird oder keins vorhanden ist'
   Range(Me.CheckBox1.Tag).ClearContents  'Lösche den Wert aus ebendieser Zelle'
   CheckBox1.Tag = ""  'löscht den Eintrag in der Tag Eigenschaft der Checkbox
  End If
End Sub
Hallo,

ich hätte es so gemacht:


Code:
Option Explicit

Public loCheck1
Public loCheck2
Public loCheck3
Public loCheck4
Public loCheck5
Public loCheck6
Private Sub CheckBox1_Click()

Dim loLetzte As Long
    If CheckBox1 = True Then                             'Wenn in Checkbox1 das Häckchen gesetzt ist'
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A" & loLetzte) = CheckBox1.Caption   'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
        loCheck1 = loLetzte
    Else
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row
        Rows(loCheck1).EntireRow.Clear 'Lösche den Wert aus ebendieser Zelle'
    End If
End Sub
   



Private Sub CheckBox2_Click()

Dim loLetzte As Long
    If CheckBox2 = True Then                             'Wenn in Checkbox1 das Häckchen gesetzt ist'
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A" & loLetzte) = CheckBox2.Caption   'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
        loCheck2 = loLetzte
    Else
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row
         Rows(loCheck2).EntireRow.Clear  'Lösche den Wert aus ebendieser Zelle'
    End If
End Sub

Private Sub CheckBox3_Click()


Dim loLetzte As Long
    If CheckBox3 = True Then                             'Wenn in Checkbox1 das Häckchen gesetzt ist'
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A" & loLetzte) = CheckBox3.Caption   'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
        loCheck3 = loLetzte
    Else
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row
         Rows(loCheck3).EntireRow.Clear  'Lösche den Wert aus ebendieser Zelle'
    End If
End Sub

Private Sub CheckBox4_Click()
Dim loLetzte As Long
    If CheckBox4 = True Then                             'Wenn in Checkbox1 das Häckchen gesetzt ist'
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A" & loLetzte) = CheckBox4.Caption   'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
        loCheck4 = loLetzte
    Else
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row
         Rows(loCheck4).EntireRow.Clear   'Lösche den Wert aus ebendieser Zelle'
    End If
End Sub

Private Sub CheckBox5_Click()
Dim loLetzte As Long
    If CheckBox5 = True Then                             'Wenn in Checkbox1 das Häckchen gesetzt ist'
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A" & loLetzte) = CheckBox5.Caption   'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
        loCheck5 = loLetzte
    Else
        loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row
         Rows(loCheck5).EntireRow.Clear   'Lösche den Wert aus ebendieser Zelle'
    End If
End Sub

Private Sub ComboBox1_Change()
      Range("B" & loCheck1) = CDbl(ComboBox1.Text)
End Sub

Private Sub ComboBox2_Change()
    Range("B" & loCheck5) = CDbl(ComboBox2.Text)
End Sub

Private Sub ComboBox3_Change()
    Range("B" & loCheck4) = CDbl(ComboBox3.Text)
End Sub

Private Sub ComboBox4_Change()
    Range("B" & loCheck3) = CDbl(ComboBox4.Text)
End Sub

Private Sub ComboBox5_Change()
    Range("B" & loCheck2) = CDbl(ComboBox5.Text)
End Sub

Private Sub CommandButton1_Click()
Dim loLetzte As Long
loLetzte = Cells(Rows.Count, 1).End(xlUp).Row
If loLetzte = 1 Then Exit Sub
Range(Cells(2, 1), Cells(loLetzte, 5)).Sort key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo
loLetzte = Cells(Rows.Count, 1).End(xlUp).Row
Cells(2, 3).FormulaLocal = "=sverweis(A2;Hintergrund!C:D;2;0)"
Cells(2, 4).FormulaLocal = "=B2*C2"
Range("C2:D2").AutoFill Range("C2:D" & loLetzte)
UserForm1.Hide
End Sub


Private Sub UserForm_Click()

End Sub
Hallo Edgar,

es gibt da so einige Lösungswege, denke ich.

Aber mich interessiert mehr, was Travis damit machen möchte.

Hier einige Fragen an Travis:
1. wie erkenne später welche Vorrichtung wann und von wem und wofür eingegeben wurde?
1a. wäre eine eindeutige ID Vergabe nicht sinnvoll?

2.Bei 100 Checkboxen ist der ungeübte User eher überfordert.
Es würde übersichtlicher mit nur zwei Comboboxen und einer Listbox zu arbeiten.

Beispiel: ertse Combobox enthält alle Vorrichtungen, die zweite wie gehabt die Anzahl.
Nach Auswahl bei Beiden werden diese erst in der Listbox gelistet.
Wenn alles ausgewählt wurde, dann wird per Schaltfläche der Inhalt der Listbox in die Tabelle übertragen.
Falls eine Auswahl rausgenommen werden soll, kann das per Doppelklick in die Listboxzeile aus der Listbox entfernt werden.

Wenn ich nachher mal Zeit habe, stelle ich ein Beispiel ein, wie ich es machen würde. Aber wichtig wäre zu wissen, ob eine ID sein soll um die Daten später genau zuordnen zu können.
Hallo zusammen,


in der Anlage ein Beispiel, wie ich es machen würde:

[attachment=1776]
Hey Leute,

sorry für die späte Rückmeldung, war übers WE weg. Und vielen Dank für die zahlreichen Rückmeldungen, ist ja Wahnsinn Blush

@ Atilla, du hattest mir ein paar Fragen gestellt:

1&1a: wann und von wem ist in erster Linie unwichtig, ich bastel mir eine Funktion, die das Tabellenblatt exportiert auf dem die ausgewählten Vorrichtungen gelistet sind.  Eine eindeutige ID Vergabe ist definitiv sinnvoll und auch schon geschehen.

2. Recht hast du, übersichtlicher ist es definitiv. Jedoch könnte es unter Umständen sein, dass der Enduser ein Laie auf dem Gebiet ist und sich mit den Vorrichtungen nicht auskennt. Die 100 Vorrichtungen sind unterteilt in 4 verschiedene Serien, dementsprechend gibt es ca 25 Vorrichtungen pro Userform. Um die Auswahl zu erleichtern, habe ich von jeder Vorrichtung Zeichnungen anfertigen lassen, nach denen der User seine Auswahl treffen kann.
Ich glaube das wird schwierig werden über eine Listbox zu realisieren. Ich finde die Idee, dass der User seine Auswahl bestätigen muss, bevor er den Endpreis sieht, aber sehr schön.
Ich versuche mal die Checkboxen der einzelnen Vorrichtungen mit einer Listbox zu verknüpfen, ich glaube das wäre die optimale Lösung :28:
Bei Fragen melde ich mich. also bis später Wink
GlG und vielen Dank Travis
Seiten: 1 2