Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Code optimieren und zusätze einfügen
#1
Hallo Leute!
Hab da wieder mal eine Herausforderung an euch!
Ich möchte über meine Userform (Spiel1) in der Tabelle Beispiel einen neuen Clubnamen eintragen. Funktioniert auch soweit. Nur ist es so wenn in der Tabelle Beispiel hinter dem Clubname nichts steht wird der Clubnahme nicht dort eingetragen, so hab ich eine Leerzeile die ich nicht möchte. Es soll in der Zeile ab B4 der erste Clubname eingetragen werden wenn diese Leer ist soll sie dann mit dem Clubnamen gefüllt werden, ist dies möglich? Der Code stammt aus dem alten Forum. Dann soll noch eine Auswertung statt finden diese soll dann im Tabellenblatt Auswertung sein. Um dies zu machen habe ich in der UserForm (Spiel1) zwei OpptionButton eingefügt. Diese dienen dazu um eine Frauen und Männer Auswertung zumachen. Heist es werden 3 Auswertungen gemacht Bester Club, Frau und Mann. Wenn ich also einen neuen Namen unter der Auswahl Club eintrage muss ich einen OptionButton anwählen Damit auch der Name in der Auswertung erscheint. Aber ich möchte ersteinmal den anfang mit dem Clubnahmen haben. Den rest möchte ich gerne nach für nach machen. Damit ich das auch verstehe und dann auch anderen mal helfen KANN

Ich hoffe ihr könnt mir helfen.


Angehängte Dateien
.xlsm   RE_Michael_42.xlsm (Größe: 68,57 KB / Downloads: 14)
mfg
Michael
:98:

WIN 10  Office 2019
Top
#2
Hallo Michael,

(27.05.2014, 22:04)michel34497 schrieb: Ich möchte über meine Userform (Spiel1) in der Tabelle Beispiel einen neuen Clubnamen eintragen. Funktioniert auch soweit. Nur ist es so wenn in der Tabelle Beispiel hinter dem Clubname nichts steht wird der Clubnahme nicht dort eingetragen, so hab ich eine Leerzeile die ich nicht möchte. Es soll in der Zeile ab B4 der erste Clubname eingetragen werden wenn diese Leer ist soll sie dann mit dem Clubnamen gefüllt werden, ist dies möglich?

Versuchs mal so (Ist aber kaum kommentiert)
Code:
Private Sub CommandButton7_Click()
Dim lngLetzte As Long

        If TextBox10 <> "" Then
            'Ist die Zelle B4 leer?
            If Cells(4, 2) = "" Then
               Cells(4, 2) = TextBox10
            Else
               lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
               lngLetzte = lngLetzte + 2
               Range("A4:AQ5").Copy Cells(lngLetzte, 1)
               Cells(lngLetzte, 2) = TextBox10
               Application.CutCopyMode = False
            End If
        Else
             MsgBox "Kein neuer Club eingetragen!"
        End If
    ComboBoxenFuellen
End Sub
Gruß Stefan
Win 10 / Office 2016
Top
#3
Hallo Stefan!
Vielen Dank für die Hilfe von dir! Funkzioniet, so wie ich das haben wollte.
Nun bastele ich noch daran, wie ich die Clubnamen, Frauen und Männer in meine Auswertung übertragen kann. Frauen und Männer werden über dei optionsButton eingetragen. Ich versuche mal einen Code zusammen zu Basteln und werde mich dann wieder melden wenn ich wieder an igrend etwas scheitere.
mfg
Michael
:98:

WIN 10  Office 2019
Top
#4
Hallo Experten!
Wie schon im letzten beitrag gesagt melde ich mich wieder wenn es scheitert!
Es ist soweit. Wo ich nicht mehr weiter in meinen Projekt komme, werde ich im nachfolgenden versuchen zu beschreiben.
Eine kleine Beschreibung des gesamt Projektes:
Es geht um eine Dorfmeisterschaft im Kegeln.
Ich habe eine Userfoem (UF) erstellt wo alle Club's und Namen erfasst werden ( ist auf der rechten Seite der UF) dort soll auch ein auswahl ob Frau oder Mann getroffen werden. Ist der Clubname eingetragen werden dann im Blatt Beispiel darunter der Name eingetragen über die UF. Soweit geht das auch alles. Wenn dies alles geschen ist geht es zum eigentlichen Spiel. Dann wird auf der linken seite der UF der Club ausgewählt, der Name, das Spiel, wenn dies geschen ist werden die Würfe (über eine ComboBox) ausgewählt und eingetragen. Sind alle Würfe eingetragen kann mann mit den Button Würfe eintragen das in das Blatt Beispiel unter den Clubnamen und Spieler eintragen. Nach dem alle Würfe gemacht wurden soll noch eine Auswertung gemacht werden wer der Sieger ist.
Zum Teil geht auch einiges.
Jetzt zum eigentlichen:
1. Ich möchte das wenn ein Neuer Club eingetragen wird der Clubname auch in der Tabelle Auswertung eingetragen wird ( habe ich fast hinbekommen ).
2. Wenn ein neuer Name eingetragen wird, soll dieser auch in der Tabelle Auswertung mit Clubname eingetragen werden, unter der option Mann oder Frau (Tabelle Auswertung Culb Wertung, Frauen Wertung und Männer Wertung).
3. Soll über einen Button eine Auswertung statt finden die ich noch im einzelnen beschreiben muss.

Mir sind ersteimal Punkt 1 und 2 wichtig!
Wenn dies einwndfrei funkt dann möchte ich zu Punkt 3 eine genauere beschreibung geben.
im moment schaffe ich es das excel nicht mehr rehagiert.
Aktuelle Tabelle ist angehängt.Bitte nur noch diese angehäng Tabelle benutzen!

Viel Text

Ich hoffe es kann einer helfen!


Angehängte Dateien
.xlsm   RE_Michael_42.xlsm (Größe: 84,12 KB / Downloads: 5)
mfg
Michael
:98:

WIN 10  Office 2019
Top
#5
Hallo Michael,

(03.06.2014, 22:30)michel34497 schrieb: 1. Ich möchte das wenn ein Neuer Club eingetragen wird der Clubname auch in der Tabelle Auswertung eingetragen wird ( habe ich fast hinbekommen ).

Für den Clubnamen habe ich das CommanButton7_Click-Makro geändert und eine Kommentarzeile eingefügt

Code:
Private Sub CommandButton7_Click()
    Dim lngLetzte As Long
    
    If TextBox10 <> "" Then
        'Ist die Zelle B4 leer?
        With Worksheets("Beispiel")
            If .Cells(4, 2) = "" Then
                .Cells(4, 2) = TextBox10
            Else
                lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
                lngLetzte = lngLetzte + 2
                .Range("A4:AQ5").Copy .Cells(lngLetzte, 1)
                .Cells(lngLetzte, 2) = TextBox10
                Application.CutCopyMode = False
            End If
        End With
        'es ist günstiger, die Tabelle Auswertung nach der zweiten If-Abfrage zu befüllen, da nur einmal der Code nötig ist
        With Worksheets("Auswertung")
            lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp).Row, .Rows.Count)
            lngLetzte = lngLetzte + 1
            .Cells(lngLetzte, 1) = TextBox10
        End With
    Else
        MsgBox "Kein neuer Club eingetragen!"
    End If
    ComboBoxenFuellen
End Sub

(03.06.2014, 22:30)michel34497 schrieb: 2. Wenn ein neuer Name eingetragen wird, soll dieser auch in der Tabelle Auswertung mit Clubname eingetragen werden, unter der option Mann oder Frau (Tabelle Auswertung Culb Wertung, Frauen Wertung und Männer Wertung).

Für die Auswertung nach Geschlecht habe ich eine neue If-Abfrage eingefügt, wenn keine Auswahl getroffen ist bekommst Du eine Meldung. Ist zwar von der Reihenfolge nicht optimal, wollte aber den Gesamtaufbau nicht großartig umbauen. Den Rest habe ich auch spärlich kommentiert und dein Teil auskommentiert.

Code:
Private Sub CommandButton2_Click() ' Club auswählen und Namen eintragen
   Dim rngZelle As Range
   Dim lngZeile As Long
   Dim lngZaehler As Long
   Dim lngSpalte As Long
   Dim blnVorhanden As Boolean
   Dim lngLetzte As Long
  
   'falls ein OptionButton ausgewählt ist
   If OptionButton1.Value Xor OptionButton2.Value Then
      ' Club ausgewählt und Name/Vorname eingetragen
      If ComboBox12 <> "" And TextBox1 <> "" And TextBox11 <> "" Then
         ' Zeile mit Clubname suchen
         Set rngZelle = Columns(2).Find(ComboBox12, lookat:=xlWhole, LookIn:=xlValues)
         ' Clubname gefunden
         If Not rngZelle Is Nothing Then
            ' es sind noch keine Namen eingetragen
            If rngZelle.Row + 2 > rngZelle.End(xlDown).Row Then
               ' Zeile einfügen
               Rows(rngZelle.Row + 2).Insert shift:=xlDown
               ' Name und Vorname in die neue Zeile
               rngZelle.Offset(2, -1) = TextBox1
               rngZelle.Offset(2, 0) = TextBox11
               ' Format kopieren und in neue Zeile übertragen
               Range(rngZelle.Offset(1, -1), rngZelle.Offset(1, 43)).Copy
               rngZelle.Offset(2, -1).PasteSpecial Paste:=xlPasteFormats
               ' Füllfarbe zurücksetzen, damit Spalten für Gesamt nicht gelb formatiert sind
               Range(rngZelle.Offset(2, -1), rngZelle.Offset(2, 43)).Interior.ColorIndex = xlNone
            Else
               ' Schleife über alle Namen, die zum betreffenden Club gehören
               For lngZaehler = rngZelle.Offset(2, 0).Row To rngZelle.End(xlDown).Row
                  ' Name und Vorname stimmen mit TextBoxen überein
                  If Cells(lngZaehler, 1) = TextBox1 And Cells(lngZaehler, 2) = TextBox11 Then
                     ' Variable auf True setzen
                     blnVorhanden = True
                     ' Schleife verlassen
                     Exit For
                  End If
               Next lngZaehler
               ' Variable ist True
               If blnVorhanden Then
                  MsgBox "Diesen Spieler gibt es bereits"
               Else
                  ' nach dem letzten Spieler eine Zeile einfügen
                  Rows(rngZelle.End(xlDown).Row + 1).Insert shift:=xlDown
                  ' Name und Vorname in die neue Zeile
                  Cells(rngZelle.End(xlDown).Row + 1, 1) = TextBox1
                  Cells(rngZelle.End(xlDown).Row + 1, 2) = TextBox11
                  ' Format kopieren und in neue Zeile übertragen
                  Range(Cells(lngZaehler - 1, 1), Cells(lngZaehler - 1, 42)).Copy
                  Cells(lngZaehler, 1).PasteSpecial Paste:=xlPasteFormats
                  Application.CutCopyMode = False
                  'Es muß die Spalte entsprechend dem Geschlecht angegeben werden
                  If OptionButton1.Value Then
                     lngSpalte = 7
                  ElseIf OptionButton2.Value Then
                     lngSpalte = 13
                  End If
                  'und die letzte Zeile entsprechend dem Geschlecht gesucht werden
                  With Worksheets("Auswertung")
                     lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, lngSpalte)), .Cells(.Rows.Count, lngSpalte).End(xlUp).Row, .Rows.Count)
                     lngLetzte = lngLetzte + 1
                     .Cells(lngLetzte, lngSpalte) = TextBox1
                     .Cells(lngLetzte, lngSpalte).Offset(, 1) = TextBox11
                     .Cells(lngLetzte, lngSpalte).Offset(, 2) = ComboBox12
                  End With
   '               'Ab hier meine Version
   '                Sheets(Tab2).Select                                                     'Auswertung aufrufen
   '
   '                lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 7)), Cells(Rows.Count, 7).End(xlUp).Row, Rows.Count)
   '                lngLetzte = lngLetzte + 1
   '                Cells(lngLetzte, 7) = TextBox1
   '                Cells(lngLetzte, 8) = TextBox11
   '                Cells(lngLetzte, 9) = ComboBox12
   '
   '
   '             Sheets(Tab1).Select
   '
   '               ' ************************************************
                  
                  
                  
               End If
            End If
            ' TextBoxen und Set-Variable leeren
            TextBox1 = ""
            TextBox11 = ""
            Set rngZelle = Nothing
            ComboBoxenFuellen
          End If
      Else
         MsgBox "Bitte Club auswählen und Namen/Vornamen eintragen"
      End If
   'falls kein Geschlecht ausgewählt
   Else
      MsgBox "Das Geschlecht auswählen!"
   End If
End Sub

Gruß Stefan

PS: Es ist in den alllermeisten Fällen unnötig, etwas zu selektieren.
Top
#6
Hallo Michael,

würdest Du bitte mal die jetzt aktuelle Datei zur Verfügung stellen?

Danke
Top
#7
Hallo experten!

@Käpt'n Blaubär
Natürlich mach ich das, mit den geänderten Code von stefan
@Stefan
Vielen dank für die Hilfe! Doch gibt es Probleme, bin grade noch am testen und werde mich dann wieder melden ,was nicht richtig funkt.


Angehängte Dateien
.xlsm   RE_Michael_42.xlsm (Größe: 81 KB / Downloads: 5)
mfg
Michael
:98:

WIN 10  Office 2019
Top
#8
Hallo Michael,

dann danke ich Dir zunächst mal
Top
#9
Hallo Leute!
Habe getestet und mir sind fehler aufgefallen.

Wenn ein neuer Club eingetragen wird ist alles in Ordnung. Trage ich nun einen Namen für den neuen Club ein, erscheint dieser nicht im Tabellenblatt Auswertung. Erst wenn noch ein neuer Name eingetragen wird erscheint dieser auch bei der Auswertung. Aber nicht der erste eingetragene Name. Finde leider nicht woran es liegen kann! Das andere ist bei der auswahl vom geschlecht. Vergisst mann die Auswahl zu ändern, wird folglich auch der Name bei der Auswertung falsch eingetragen. Mein fehler nicht richtig nachgedacht! Um dies zu vermeinden sollte eine MsgBox oder eine neue UserForm aufgehen wo dann das geschlecht ausgewählt und mit OK bestätigt wird. Eine UF (Auswahl) habe ich erstellt. Weis aber noch Nicht wie ich diese mit einbinden kann.
Habe die Datei nochmals mit angehangen.

Ich hoffe ihr könnt mir helfen.
PS: Wie der ablauf mit der Auswertung sein soll werde ich wahrscheinlich nacher noch einstellen!

Tausen dank für jede Hilfe!


.xlsm   RE_Michael_42.xlsm (Größe: 88,97 KB / Downloads: 3)
mfg
Michael
:98:

WIN 10  Office 2019
Top
#10
Hallo Michael,

das Eintragen in die Tabelle Auswertung war an der falschen Stelle und ich hatte es wohl nicht genau genug getestet. :16:

Ich habe jetzt auch eingefügt, das die Buttons zurück gesetzt werden. Ist meiner Meinung nach besser als hier eine extra UF zu benutzen.

Code:
Private Sub CommandButton2_Click() ' Club auswählen und Namen eintragen
   Dim rngZelle As Range
   Dim lngZeile As Long
   Dim lngZaehler As Long
   Dim lngSpalte As Long
   Dim blnVorhanden As Boolean
   Dim lngLetzte As Long
  
   'falls ein OptionButton ausgewählt ist
   If OptionButton1.Value Xor OptionButton2.Value Then
      ' Club ausgewählt und Name/Vorname eingetragen
      If ComboBox12 <> "" And TextBox1 <> "" And TextBox11 <> "" Then
         ' Zeile mit Clubname suchen
         Set rngZelle = Columns(2).Find(ComboBox12, lookat:=xlWhole, LookIn:=xlValues)
         ' Clubname gefunden
         If Not rngZelle Is Nothing Then
            ' es sind noch keine Namen eingetragen
            If rngZelle.Row + 2 > rngZelle.End(xlDown).Row Then
               ' Zeile einfügen
               Rows(rngZelle.Row + 2).Insert shift:=xlDown
               ' Name und Vorname in die neue Zeile
               rngZelle.Offset(2, -1) = TextBox1
               rngZelle.Offset(2, 0) = TextBox11
               ' Format kopieren und in neue Zeile übertragen
               Range(rngZelle.Offset(1, -1), rngZelle.Offset(1, 43)).Copy
               rngZelle.Offset(2, -1).PasteSpecial Paste:=xlPasteFormats
               Application.CutCopyMode = False
               ' Füllfarbe zurücksetzen, damit Spalten für Gesamt nicht gelb formatiert sind
               Range(rngZelle.Offset(2, -1), rngZelle.Offset(2, 43)).Interior.ColorIndex = xlNone
            Else
               ' Schleife über alle Namen, die zum betreffenden Club gehören
               For lngZaehler = rngZelle.Offset(2, 0).Row To rngZelle.End(xlDown).Row
                  ' Name und Vorname stimmen mit TextBoxen überein
                  If Cells(lngZaehler, 1) = TextBox1 And Cells(lngZaehler, 2) = TextBox11 Then
                     ' Variable auf True setzen
                     blnVorhanden = True
                     ' Schleife verlassen
                     Exit For
                  End If
               Next lngZaehler
               ' Variable ist True
               If blnVorhanden Then
                  MsgBox "Diesen Spieler gibt es bereits"
               Else
                  ' nach dem letzten Spieler eine Zeile einfügen
                  Rows(rngZelle.End(xlDown).Row + 1).Insert shift:=xlDown
                  ' Name und Vorname in die neue Zeile
                  Cells(rngZelle.End(xlDown).Row + 1, 1) = TextBox1
                  Cells(rngZelle.End(xlDown).Row + 1, 2) = TextBox11
                  ' Format kopieren und in neue Zeile übertragen
                  Range(Cells(lngZaehler - 1, 1), Cells(lngZaehler - 1, 42)).Copy
                  Cells(lngZaehler, 1).PasteSpecial Paste:=xlPasteFormats
                  Application.CutCopyMode = False
               End If
            End If
            'Es muß die Spalte entsprechend dem Geschlecht angegeben werden
            If OptionButton1.Value Then
               lngSpalte = 7
            ElseIf OptionButton2.Value Then
               lngSpalte = 13
            End If
            'und die letzte Zeile entsprechend dem Geschlecht gesucht werden
            With Worksheets("Auswertung")
               lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, lngSpalte)), .Cells(.Rows.Count, lngSpalte).End(xlUp).Row, .Rows.Count)
               lngLetzte = lngLetzte + 1
               .Cells(lngLetzte, lngSpalte) = TextBox1
               .Cells(lngLetzte, lngSpalte).Offset(, 1) = TextBox11
               .Cells(lngLetzte, lngSpalte).Offset(, 2) = ComboBox12
            End With
            ' TextBoxen und Set-Variable leeren
            TextBox1 = ""
            TextBox11 = ""
            Set rngZelle = Nothing
            'die Buttons auf false setzen
            OptionButton1.Value = False
            OptionButton2.Value = False
            ComboBoxenFuellen
          End If
      Else
         MsgBox "Bitte Club auswählen und Namen/Vornamen eintragen"
      End If
   'falls kein Geschlecht ausgewählt
   Else
      MsgBox "Das Geschlecht auswählen!"
   End If
End Sub
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • michel34497
Top


Gehe zu:


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