Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Punkteverteilung Turniertabelle


Betrifft: Punkteverteilung Turniertabelle von: Michael J.
Geschrieben am: 27.07.2018 06:22:18

Hallo zusammen,

ich arbeite an einer Tabelle für Turniere in der ich eine UserForm erstellt habe, um die Eingabe der Spielernamen und der Punkte erheblich zu vereinfachen. Die Top 9 jedes Turniers bekommen Punkte (Platz 1=10 Punkte, Platz 2=9Punkte...Platz 9=2 Punkte).
Mein Problem ist nun, dass ich nicht weiß wie ich z.B. dem Textfeld für den Sieger eines Turniers die 10 Punkte zuordnen kann!! Ich möchte also nur die Spielernamen der besten 9 in die Textfelder eintragen (Spielernamen können Zahlen und Sonderzeichen enthalten!) und mit Drücken des CommandButtons die Punkte automatisch in die Liste eintragen lassen.
Makros für die Zusammenführung der Punkte bei doppelten Spielernamen, sowie die alphabetische Reihenfolge bei Punktegleichheit sind bereits vorhanden! (Kann man diese beiden Makros gleichzeitig mit der Übertragung der Spielernamen ausführen lassen?)

Da ich kaum Ahnung von VBA habe, wäre es wirklich super wenn bitte jemand für nur ein Turnier und hierbei auch nur für einen Spieler den VBA-Code schreiben könnte. (B€ispielname1 gewinnt 1. Turnier am 1. Spieltag und bekommt 10 Punkte!)
Ich könnte diesen dann für alle anderen Spieler(Textfelder)/Turniere/Spieltage kopieren und mit entsprechenden Zellbezügen anpassen.

https://www.herber.de/bbs/user/122940.xlsm

Gruß
Michael

  

Betrifft: AW: Punkteverteilung Turniertabelle von: Matthias L
Geschrieben am: 27.07.2018 07:50:44

Hallo

Würde ich ungefähr so machen.

Als Ansatz:

Select Case Spielername_Platz1_Turnier1_Spieltag1
Case Is = Range("D5")
 Range("I5") = 10
Case Is = Range("D6")
 Range("I6") = 10
Case Is = Range("D7")
 Range("I7") = 10

'... usw.

End Select

Außerdem würde ich satt TextBox-Objekte eher ComboBox-Objekte benutzen
So könntest Du über DropDown den entsprechenden Namen auswählen.

Gruß Matthias


  

Betrifft: AW: Punkteverteilung Turniertabelle von: Michael J.
Geschrieben am: 27.07.2018 10:01:00

Hallo Matthias,

ich glaube das ist noch nicht so ganz das was ich benötige. So wie ich Deinen Code als Laie verstehe, würde ich ja einen ewig langen Code für jedes einzelne Textfeld benötigen. Außerdem wäre es wohl etwas umständlich über DropDown den jeweiligen Namen auszuwählen, wenn sich am Ende des Monats ca. 100 verschiedene Spielernamen in der Tabelle befinden.

Da ich ja bereits ein Makro habe, welches mir doppelte Spielernamen automatisch korrigiert, müsste es doch eigentlich recht einfach sein mit wenigen Codezeilen eine Anweisung zu schreiben mit welcher ich dem jeweiligen Textfeld anweise in welcher Zeile und Spalte die jeweils zugehörigen Punkte eingefügt werden müssen.(Mit entsprechendem Zusatz für die jeweils erste freie Zeile)

Ich schreibe z.B. in Textfeld "Spielername_Platz1_Turnier1_Spieltag1" den Sieger des ersten Turniers des ersten Spieltags (Spalte I) welcher 10 Punkte bekommen soll. Dann müsste der Code doch eigentlich nur lauten: suche mir die erste freie Zeile im Bereich ("D5:D135"), schreibe mir dort den Spielernamen rein den ich in das Textfeld eingegeben habe und schreibe dann die 10 Punkte in die gleiche erste freie Zeile in die entsprechend für Turnier 1 und Spieltag 1 zugehörige Spalte I. Mehr brauche ich nicht!

Selbst wenn ein Spielername in zwei verschiedenen Turnieren/Spieltagen Punkte bekommt ist das kein Problem, da mein Makro die jeweiligen Punkte der doppelten Spielernamen in die entsprechend richtigen Zeilen zusammenfügt.Das klappt auch prima! Ich benötige also nur einen VBA-Code für mein im oben fett geschriebenes Szenario. (Wäre natürlich megaklasse wenn ich einen Spielernamen in ein Textfeld schreibe welcher schon einmal eingetragen wurde, dass dieser nach Eingabe von 3 oder 4 Zeichen automatisch im Textfeld angezeigt wird! Das wäre die Mutter aller VBA-Codes und würde die Pflege der Tabelle nochmals beschleunigen, aber das ist zur Zeit kein muss;-) )

(Wie gesagt ich habe wirklich kaum Ahnung von VBA und es fällt mir sehr schwer mich in solche abstrakten Sachen hineinzudenken.)
Ich glaube aber im fett geschriebenen Absatz ist mir die Darstellung meines Problems einigermaßen gelungen.

Aber schonmal vielen Dank für Deine schnelle Antwort und Deine Mühe Matthias
(Vielleicht hattest Du auch schon die Lösung und ich habs einfach nicht begriffen?!?)


Gruß
Michael


  

Betrifft: AW: Punkteverteilung Turniertabelle von: Matthias L
Geschrieben am: 27.07.2018 10:59:00

Hallo

Stand ja drüber "Als Ansatz"
Hier eine Variante für die 9 Plätze

Private Sub CommandButton1_Click()
Dim x&
For x = 5 To 135
 Select Case Spielername_Platz1_Turnier1_Spieltag1
   Case Is = Range("D" & x)
    Range("I" & x) = 10
 End Select
 Select Case Spielername_Platz_2
   Case Is = Range("D" & x)
    Range("I" & x) = 9
 End Select
 Select Case Spielername_Platz_3
   Case Is = Range("D" & x)
    Range("I" & x) = 8
 End Select
 Select Case Spielername_Platz_4
   Case Is = Range("D" & x)
    Range("I" & x) = 7
 End Select
 Select Case Spielername_Platz_5
   Case Is = Range("D" & x)
    Range("I" & x) = 6
 End Select
 Select Case Spielername_Platz_6
   Case Is = Range("D" & x)
    Range("I" & x) = 5
 End Select
 Select Case Spielername_Platz_7
   Case Is = Range("D" & x)
    Range("I" & x) = 4
 End Select
 Select Case Spielername_Platz_8
   Case Is = Range("D" & x)
    Range("I" & x) = 3
 End Select
 Select Case Spielername_Platz_9
   Case Is = Range("D" & x)
    Range("I" & x) = 2
 End Select
Next
End Sub
Gruß Matthias


  

Betrifft: AW: Punkteverteilung Turniertabelle von: Michael J.
Geschrieben am: 27.07.2018 12:17:44

Hi Matthias,

ich habe Deinen Code mal eingebaut, aber irgendwie haut der mir ab I103 nur 2er von I103 bis I135 rein! (Egal ob ich etwas in ein Textfeld schreibe oder alle 9)
Was mache ich bitte falsch??
Ansonsten finde ich Deinen Code super!!!! Sieht für mich als Laie stimmig aus und wenns bald funktionieren würde, könnte ich problemlos die Zellbezüge etc. entsprechend anpassen!!

Hier die neue Tabelle. Woran könnte es bitte liegen das es noch nicht läuft?

https://www.herber.de/bbs/user/122949.xlsm

Gruß
Michael


  

Betrifft: könnte man drauf kommen, oder ? von: Matthias L
Geschrieben am: 27.07.2018 12:44:22

Hallo

Du hast ab Zeile 103 keine Namen mehr in Deiner Liste


Man muss also abfragen, ob die Zelle in Spalte("D") leer ist
oder die Schleife nicht bis 135 laufen lassen, sondern nur bis 102

also
For x = 5 To 102 ;-)

Gruß Matthias


  

Betrifft: AW: könnte man drauf kommen, oder ? von: Michael J.
Geschrieben am: 27.07.2018 13:20:35

Hi,

wir habe herrlich aneinander vorbeigeredet;-))
Dein Code ist fehlerfrei und funktioniert perfekt! Allerdings nur bei bereits VORHANDENEN Namen;-)
Ich benötige etwas wo auch NEUE noch nicht vorhandene Namen in Spalte D eingetragen werden, wenn man sie in einem Textfeld der UserForm eintippt. "suche mir die erste FREIE Zeile im Bereich..." (Der in fett geschriebene Absatz)

Was muss ich bitte jetzt verändern damit das läuft???

Wenn das alles gleich funktioniert, dann trinke ich nachher ein Bierchen auf Dein Wohl, weil Du mir heute sehr geholfen hast!

Gruß
Michael


  

Betrifft: AW: könnte man drauf kommen, oder ? von: Matthias L
Geschrieben am: 27.07.2018 18:44:53

Hallo

Vorschlag wie man es machen könnte:

Habs mal nur für die oberste Textbox erstellt.

https://www.herber.de/bbs/user/122957.xlsm

Gruß Matthias


  

Betrifft: AW: könnte man drauf kommen, oder ? von: Michael J.
Geschrieben am: 28.07.2018 07:46:17

Hi

vielen Dank für Deinen Vorschlag, aber so kompliziert muss das überhaupt nicht sein. Es würde vollkommen reichen, wenn die Textfelder/Textboxen der UserForm ganz stur die eingetippten Spielernamen in die nächste freie Zeile der Tabelle eintragen(plus die Punkte natürlich). Fertig! Mehr brauche ich nicht!
Denn alles andere erledigt anschließend mein schon vorhandenes "doppelte zusammenfassen" Makro! Es dürfen also ruhig bereits vorhandene Spielernamen in die nächste freie Zeile eingetragen werden! Das Makro transportiert die Punkte des doppelten Eintrags an die richtige Stelle des ersten Eintrags und löscht anschließend den doppelten Eintrag.
Das zweite bereits vorhandene Makro sortiert die Gesamtpunktzahl und ordnet bei Punktgleichheit die Spielernamen alphabetisch.

Könntest Du mir bitte den Code so umändern das die in der Textbox eingetippten Spielernamen in die nächste freie Zeile der Tabelle eingetragen werden? Wenn Du es schaffst das mit dem Drücken des "Punkte eintragen" CommandButtons nicht nur die Spielernamen inkl. Punkte in die Tabelle eingetragen werden, sondern anschließend auch noch das "doppelte zusammenfassen" Makro und am Schluß das "Sortieren" Makro ausgeführt wird, wäre mein Tabelle perfekt!

Gruß
Michael


  

Betrifft: AW: könnte man drauf kommen, oder ? von: Michael J.
Geschrieben am: 28.07.2018 08:57:47

Hi

vielen Dank für Deinen Vorschlag, aber so kompliziert muss das überhaupt nicht sein. Es würde vollkommen reichen, wenn die Textfelder/Textboxen der UserForm ganz stur die eingetippten Spielernamen in die nächste freie Zeile der Tabelle eintragen(plus die Punkte natürlich). Fertig! Mehr brauche ich nicht!
Denn alles andere erledigt anschließend mein schon vorhandenes "doppelte zusammenfassen" Makro! Es dürfen also ruhig bereits vorhandene Spielernamen in die nächste freie Zeile eingetragen werden! Das Makro transportiert die Punkte des doppelten Eintrags an die richtige Stelle des ersten Eintrags und löscht anschließend den doppelten Eintrag.
Das zweite bereits vorhandene Makro sortiert die Gesamtpunktzahl und ordnet bei Punktgleichheit die Spielernamen alphabetisch.

Könntest Du mir bitte den Code so umändern das die in der Textbox eingetippten Spielernamen in die nächste freie Zeile der Tabelle eingetragen werden? Wenn Du es schaffst das mit dem Drücken des "Punkte eintragen" CommandButtons nicht nur die Spielernamen inkl. Punkte in die Tabelle eingetragen werden, sondern anschließend auch noch das "doppelte zusammenfassen" Makro und am Schluß das "Sortieren" Makro ausgeführt wird, wäre mein Tabelle perfekt!

Gruß
Michael


  

Betrifft: warum sendest Du das doppelt ? owT von: Matthias L
Geschrieben am: 28.07.2018 10:12:29




  

Betrifft: AW: warum sendest Du das doppelt ? owT von: Michael J.
Geschrieben am: 28.07.2018 10:30:45

war auch überrascht das es zwei mal gesendet wurde... um 9 Uhr war ich noch nicht mal am Rechner!!!...und sonst ist niemand hier...kanns mir echt nicht erklären...


  

Betrifft: wow ! von: Matthias L
Geschrieben am: 28.07.2018 10:35:45

Hallo

Pack mal den Code dazu (UserForm)


Private Sub Spielername_Platz1_Turnier1_Spieltag1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Loletzte&, x&
Loletzte = Cells(Rows.Count, 4).End(xlUp).Row
 For x = 5 To Loletzte
  If Cells(x, 4) = Spielername_Platz1_Turnier1_Spieltag1 Then Exit Sub
 Next
 Cells(Loletzte + 1, 4) = Spielername_Platz1_Turnier1_Spieltag1
End Sub

Private Sub Spielername_Platz_2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Loletzte&, x&
Loletzte = Cells(Rows.Count, 4).End(xlUp).Row
 For x = 5 To Loletzte
  If Cells(x, 4) = Spielername_Platz_2 Then Exit Sub
 Next
  Cells(Loletzte + 1, 4) = Spielername_Platz_2
End Sub

Private Sub Spielername_Platz_3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Loletzte&, x&
Loletzte = Cells(Rows.Count, 4).End(xlUp).Row
 For x = 5 To Loletzte
  If Cells(x, 4) = Spielername_Platz_3 Then Exit Sub
 Next
  Cells(Loletzte + 1, 4) = Spielername_Platz_3
End Sub

Private Sub Spielername_Platz_4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Loletzte&, x&
Loletzte = Cells(Rows.Count, 4).End(xlUp).Row
 For x = 5 To Loletzte
  If Cells(x, 4) = Spielername_Platz_4 Then Exit Sub
 Next
  Cells(Loletzte + 1, 4) = Spielername_Platz_4
End Sub

Private Sub Spielername_Platz_5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Loletzte&, x&
Loletzte = Cells(Rows.Count, 4).End(xlUp).Row
 For x = 5 To Loletzte
  If Cells(x, 4) = Spielername_Platz_5 Then Exit Sub
 Next
  Cells(Loletzte + 1, 4) = Spielername_Platz_5
End Sub

Private Sub Spielername_Platz_6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Loletzte&, x&
Loletzte = Cells(Rows.Count, 4).End(xlUp).Row
 For x = 5 To Loletzte
  If Cells(x, 4) = Spielername_Platz_6 Then Exit Sub
 Next
  Cells(Loletzte + 1, 4) = Spielername_Platz_6
End Sub

Private Sub Spielername_Platz_7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Loletzte&, x&
Loletzte = Cells(Rows.Count, 4).End(xlUp).Row
 For x = 5 To Loletzte
  If Cells(x, 4) = Spielername_Platz_7 Then Exit Sub
 Next
  Cells(Loletzte + 1, 4) = Spielername_Platz_7
End Sub

Private Sub Spielername_Platz_8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Loletzte&, x&
Loletzte = Cells(Rows.Count, 4).End(xlUp).Row
 For x = 5 To Loletzte
  If Cells(x, 4) = Spielername_Platz_8 Then Exit Sub
 Next
  Cells(Loletzte + 1, 4) = Spielername_Platz_8
End Sub

Private Sub Spielername_Platz_9_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Loletzte&, x&
Loletzte = Cells(Rows.Count, 4).End(xlUp).Row
 For x = 5 To Loletzte
  If Cells(x, 4) = Spielername_Platz_9 Then Exit Sub
 Next
  Cells(Loletzte + 1, 4) = Spielername_Platz_9
End Sub
Gruß Matthias


  

Betrifft: AW: wow ! von: Michael J.
Geschrieben am: 28.07.2018 11:05:59

hallo

hab ich dazugepackt. Der schreibt auch die Eingaben in die jeweils erste freie Zeile, allerdings leider ohne die Punkte einzutragen. Ich habe es außerdem mal versucht indem ich diesen alten Code:

Private Sub CommandButton1_Click()
Dim x&
For x = 5 To 102
 Select Case Spielername_Platz1_Turnier1_Spieltag1
   Case Is = Range("D" & x)
    Range("I" & x) = 10
 End Select
 Select Case Spielername_Platz_2
   Case Is = Range("D" & x)
    Range("I" & x) = 9
 End Select
 Select Case Spielername_Platz_3
   Case Is = Range("D" & x)
    Range("I" & x) = 8
 End Select
 Select Case Spielername_Platz_4
   Case Is = Range("D" & x)
    Range("I" & x) = 7
 End Select
 Select Case Spielername_Platz_5
   Case Is = Range("D" & x)
    Range("I" & x) = 6
 End Select
 Select Case Spielername_Platz_6
   Case Is = Range("D" & x)
    Range("I" & x) = 5
 End Select
 Select Case Spielername_Platz_7
   Case Is = Range("D" & x)
    Range("I" & x) = 4
 End Select
 Select Case Spielername_Platz_8
   Case Is = Range("D" & x)
    Range("I" & x) = 3
 End Select
 Select Case Spielername_Platz_9
   Case Is = Range("D" & x)
    Range("I" & x) = 2
 End Select
Next
End Sub
mal rausgenommen habe...dasselbes Ergebniss. Trägt Namen ein, aber keine Punkte.

Vielleicht mache ich irgendwas falsch.
Vielleicht wäre es besser wenn du es einbaust und die Tabelle hochlädst.

Hier die Tabelle wo ich es gerade eingebaut habe:
https://www.herber.de/bbs/user/122965.xlsm

Gruß
Michael


  

Betrifft: warum klickst Du nicht auf Punkte eintragen ? von: Matthias L
Geschrieben am: 28.07.2018 11:13:34




  

Betrifft: AW: warum klickst Du nicht auf Punkte eintragen ? von: Michael J.
Geschrieben am: 28.07.2018 11:16:38

Ups...hatte noch eine alte Liste wo "Übertragen" steht! Daran wirds liegen!! Ich probiers sofort aus...


  

Betrifft: AW: warum klickst Du nicht auf Punkte eintragen ? von: Michael J.
Geschrieben am: 28.07.2018 11:35:05

sorry geht immer noch nicht. Habe nun die aktuellste Tabelle von Deinem letzten Vorschlag mit dem grünen Hintergrund beim ersten Textfeld genommen und den Code eingebaut...selbe Ergebnis! Trägt nur Namen ein, aber nicht die Punkte.
In Deinem Screenshot sieht man aber auch das keine Punkte eingetragen werden!

https://www.herber.de/bbs/user/122967.xlsm


  

Betrifft: AW: warum klickst Du nicht auf Punkte eintragen ? von: Michael J.
Geschrieben am: 28.07.2018 11:45:05

ich glaub ich weiß jetzt woran es liegt...hab aus Versehen was wichtiges gelöscht...


  

Betrifft: AW: warum klickst Du nicht auf Punkte eintragen ? von: Michael J.
Geschrieben am: 28.07.2018 11:45:16

ich glaub ich weiß jetzt woran es liegt...hab aus Versehen was wichtiges gelöscht...


  

Betrifft: AW: warum klickst Du nicht auf Punkte eintragen ? von: Michael J.
Geschrieben am: 28.07.2018 11:46:07

jetzt weiss ich auch wie der doppelte eintrag zustande kam...grad wieder passiert;-))))


  

Betrifft: Warum hast Du denn den Code gelöscht? von: Matthias L
Geschrieben am: 28.07.2018 11:45:53

Der Code von Commandbutton1 muss drinbleiben
Trage die Namen ein für die jeweiligen Punkte und klicke danach auf Punkte eintragen.

https://www.herber.de/bbs/user/122968.xlsm

Gruß Matthias


  

Betrifft: AW: Warum hast Du denn den Code gelöscht? von: Michael J.
Geschrieben am: 28.07.2018 11:53:44

SEHR GUT!!! Es funktioniert!!!!!
Viele Dank Matthias

Kann ich meine beiden Makros mit dem CommandButton "Punkte eintragen" verbinden, damit ich nur einen Button drücken muss?


  

Betrifft: AW: Warum hast Du denn den Code gelöscht? von: Michael J.
Geschrieben am: 28.07.2018 12:04:33

Ich glaub ich würde das auch notfalls alleine herausbekommen wie ich die beiden Makros mit der Punkte eintragen Schaltfläche verbinden kann. Ich möchte nicht unnötig Deine Zeit stehlen!
Ich danke Dir vielmals für Deine wirklich gute Hilfe und wünsche Dir noch ein schönes Wochenende.

MfG
Michael J.


  

Betrifft: Hier können MJ und ML weiterplaudern ;-) owT von: lupo1
Geschrieben am: 30.07.2018 13:55:03