VBA - Autoausfüllen mit Bedingungen
#1
Hallo Zusammen ,

Da ich VBA Anfänger bin benötige ich Hilfe bei meinem Problem.
Ich möchte unter bestimmten Voraussetzungen Zellen automatisch ausfüllen lassen.
Im Spieleblatt habe ich die Zellen K3:CW3 als Anwesenheit benannt.
In der jeweiligen Zelle über den Spielern wird die Anwesenheit mit einem . oder x gekennzeichnet.
Die Zellen K6:F6 habe ich als Alle_9 benannt.

Wenn nun ein Spieler eine 9 Wirft, wird dieses bei Alle9 mit einem „O“ gekennzeichnet und die anderen Anwesenden Spieler bekommen ein „I“.
Ich möchte nur das „O“ setzen und alle anderen Anwesenden Spieler sollen automatisch das „I“ bekommen.
Im Anhang habe ich Spieler 1 bis 3 + 6 bis 10 als Anwesend gekennzeichnet.
Dann habe ich bei Spieler1 in die Zellen K6:N6 ein „O“ eingetragen und alle anderen Anwesenden bekamen automatisch in den entsprechenden Zellen ein „I“.
Anschließend habe ich bei Spieler2 in die Zellen Y6 ein „O“ eingetragen und alle anderen Anwesenden bekamen ihr „I“.
Dies hat bis zur 5ten Zelle auch funktioniert.

Nun zu meinem Problem:
Wenn ich jetzt bei Spieler2 in Zelle Z6 ein „O“ einsetze bekommen Spieler1 + Spieler6 bis 9 ein „I“ ,
Spieler3+10 nicht, dafür aber Spieler5 der nicht Anwesend ist.
Oder dieses Problem:
Wenn ich bei Spieler3 in Zelle AJ6 ein „O“ eintrage bekomme ich die Meldung „Nicht Da“ obwohl er Anwesend ist.

Ich weiss nicht wo der Fehler in meinem Mako ist und hoffe mir kann geholfen werden


.xlsm   Spieleblatt mit VBA.xlsm (Größe: 729,02 KB / Downloads: 10)
Top
#2
Hallo,

Deine Berechnung der Anwesenheit und Einträge stimmt in Deinen Makros nicht überein. Wenn Du z.B. beim Spieler1 ein O einträgst, fängt Dein Makro in G5 an, die I einzutragen - also 1x nach links versetzt. Dadurch wird von Excel z.B. bei Spieler4 die Anwesenheit geprüft, und weil der nicht da ist erfolgt kein Eintrag bei Spieler 3 ....

Nimm dazu mal in den jeweiligen Makros
Range("Anwesenheit").Cells(1, 1 + (Spieler - 1) * 10).Address
und
Range("Alle_9").Cells(1, (i - 1) * 10 + Neuner).Address
in die Überwachung.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
N´abend André,

erstmal Danke für deine Hilfe.

Ich habe meine Makros um .Adress erweitert und jetzt tut sich nichts mehr wenn ich ein O bei einem Spieler eintrage.

Vielleicht hab ich es auch falsch eingesetzt, deshalb hier mein Makro wie ich es geändert habe.

Im Anhang sende das geänderte Excel-Sheet


Nochmals Danke für deine Hilfe


Angehängte Dateien
.xlsm   Spieleblatt mit VBA.xlsm (Größe: 729,03 KB / Downloads: 1)
Top
#4
Hallo Emanuel,

das Makro ist nicht von Dir? Das Problem ist die Berechnung des Feldes, wo die Einträge erfolgen sollen. mit der variable vom Typ Byte erhälst Du in den ersten 4 Eintragespalten für winner den Wert 1. Ab der 5. Spalte ist der Wert 2, und dadurch kommt es zu der Verschiebung. Erst in der SPalte T, also dem letzten Eintrag, relativiert sich das, weil der Spaltenwert hier 20 ist und die Berechnung von Neuner dann den korrekten Wert ergibt.

Versuchs mal so:

Code:
Sub Alle9(Target As Range)
'Variablendeklarationen
    Dim i As Integer, Neuner As Integer, winner As Integer
        'Wenn der Eintrag im Target <> O ist, dann Makro verlassen
        If Target <> "O" Then Exit Sub
        'Berechnung des Eintragungsbereiches des Werfers
        winner = WorksheetFunction.RoundDown((Target.Column - 1) / 10, 0)
        'Berechnung der Eintragungsspalte
        Neuner = Target.Column - winner * 10
        'Wenn der winner anwesend ist, dann
        If Anwesend(winner) Then
            'Schleife ueber alle Spieler
            For i = 1 To 10 'alle Spieler abfragen
                'Wenn der Spieler anewesend ist und nicht der winner, dann
                If Anwesend(i) And i <> winner Then 'wenn der anwesend ist, dann
                    'in Spielspalten der anwesenden Spieler "I" eintragen
                    Range("Alle_9").Cells(1, (i - 1) * 10 + Neuner) = "I"
                'Ende Wenn der Spieler anewesend ist und nicht der winner, dann
                End If
            'Ende Schleife ueber alle Spieler
            Next i
        'Wenn der winner NICHT anwesend ist, dann
        Else
            MsgBox "Nicht Da"
            Target = ""
        'Ende Wenn der winner anwesend ist, dann
        End If
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • EmanuelG
Top
#5
N´abend André,

ja es war nicht von mir, und ich mußte für meine zwecke ein paar Spalten einfügen, danach funktionierte es nicht mehr und da ich VBA - Anfänger bin hab ichs auch nicht hinbekommen. Aber jetzt läuft es PRIMA

Vielen DANK
Top


Gehe zu:


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