Wenn A1 = "x" dann B1 ="" und umgekehrt

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Wenn A1 = "x" dann B1 ="" und umgekehrt
von: Andreas Ellwardt
Geschrieben am: 04.11.2015 07:42:40

Guten Morgen,
ich bin neu hier, die Suchfunktion bringt mich nicht wirklich weiter, daher hoffe ich auf keine Standpauke :-)
Es klingt wahrscheinlich sehr banal.
Folgendes Problem:
Das ganze ist eine Art Fragenkatalog, in dem man nur mit Ja oder Nein antworten kann. Und zwar in der Form, dass der Anwender entweder in Spalte JA ein "x" einträgt oder in Spalte NEIN ein "x" einträgt.
Ich habe insegesamt 44 Zeilen in 2 Spalten.
Wie kann ich jetzt verhindern das in beiden Spalten ein "x" eingetragen wird.
Meine Idee war:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("F7").Value = "x" Then
Range("G7").Value = ""
End If
Und das für jede Zelle. Erstens geh ich davon aus, dass das einfacherer zu realisieren ist und zweitens funktioniert das auch so gar nicht weil ich in eine Endlosschleife komme. (Was logisch ist)
Für einen Lösungshinweis wäre ich dankbar
MfG

Bild

Betrifft: die Idee ist gar nicht so doof....
von: MCO
Geschrieben am: 04.11.2015 08:00:37
Moin!
Nimm mal diesen code:


 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value = "x" Then
            Application.EnableEvents = False
            Target.Offset(0, 1 - IIf(Target.Column = 7, 2, 0)).ClearContents
            Application.EnableEvents = True
    End If
    
 End Sub
Der wohl wichtigste Unterschied ist die Abschaltung des auslösenden Ereignisses, bevor du die Nebenstehende Zelle änderst. Daher die Schleife.
Außerdem wird mit "target" schon auf die eben geänderte Zelle Bezug genommen, daher fehlen jetzt feste Zellbezüge. Fast jedenfalls.
Um die Zelle rechts bzw. links von "target" zu löschen muß geprüft werden ob gerade in Spalte (links) oder Spalte (rechts) gearbeitet wird. Das passiert mit target.column = 7.
Bei 7 wird offset(0,1-2) also auf die Zelle links neben target verweisen, ansonsten mit offset(0,1-0) auf die Zelle rechts neben target.
Ich hoffe, das bring dich weiter.
Gruß, MCO

Bild

Betrifft: AW: die Idee ist gar nicht so doof....
von: Andreas Ellwardt
Geschrieben am: 04.11.2015 08:43:49
Vielen Dank für die rasche Antwort.
Funktioniert grundsätzlich super, auch wenn mir der code nicht ganz einleuchtet. Woher weiß Excel in welcher Spalte ich mich gerade befinde??
Die Zahlenfolge nach offset versteh ich auch nicht richtig :-)
Nun gibt es folgendes Problem:
Nach den ersten 4 Zeilen Ja oder Nein Abfrage kommt eine (verbundene) Zelle, die eine Ergebnisprüfung der obigen 4 Zeilen enthält.
Wenn in diese gesprungen wird hält die Prozedur an, auch wenn ich das Blatt schütze und die Zelle übersprungen wird.
Habe einen Screeshot angehangen
Userbild

Bild

Betrifft: AW: Mit Doppelklick.
von: hary
Geschrieben am: 04.11.2015 08:58:39
Moin
Hier mal mit Doppelklick(einfacher) in Zelle. X wird automatisch eingetragen.
Bei verbunden Zellen nix.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("F7:G51")) Is Nothing Then
Cancel = True
  If Target.MergeCells Then Exit Sub'--wenn Verbund dann beenden
      Cells(Target.Row, 6).Resize(1, 2).ClearContents'--Inhalte loeschen
        Target = "X" '--X setzen
  End If
End Sub

gruss hary

Bild

Betrifft: AW: die Idee ist gar nicht so doof....
von: Andreas Ellwardt
Geschrieben am: 04.11.2015 09:32:32
@hary
auch erstmal Danke. Nach einfügen deines Codes tut sich leider nix.
Dieser hier funktioniert bis zur der Verbundenen Zelle. Habe auch grade gemerkt das nicht nur die Ergebniszelle verbunden ist, sondern auch diverse Zellen in denen Ja oder Nein angeXt werden sollen.
Kann ich das mit dem Code hier relaisieren, dass er die verbundenen Zellen auch behandelt wie eine Normale?

  Private Sub Worksheet_Change(ByVal Target As Range)
 
     If Target.Value = "x" Then
             Application.EnableEvents = False
             Target.Offset(0, 1 - IIf(Target.Column = 7, 2, 0)).ClearContents
             Application.EnableEvents = True
     End If
     
  End Sub


Bild

Betrifft: AW: Bsp.-Mappe
von: hary
Geschrieben am: 04.11.2015 10:39:04
Moin
Lad eine Bsp.-Mappe hoch.
gruss hary

Bild

Betrifft: AW: Bsp.-Mappe
von: Andreas Ellwardt
Geschrieben am: 04.11.2015 10:45:29
Im Anhang die Mappe
https://www.herber.de/bbs/user/101244.xlsm

Bild

Betrifft: AW: Bsp.-Mappe
von: hary
Geschrieben am: 04.11.2015 11:40:22
Moin
Code in den Code vom Blatt "Checkliste". Startet bei Doppelklick.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("F7:G51")) Is Nothing Then
Cancel = True
   If Target.Columns.Count <> 1 Then Exit Sub '--wenn Verbundspaltenanzahl <> 1 dann beenden
      Cells(Target.Row, 6).Resize(Target.Rows.Count, 2).ClearContents
        Target = "X" '--X setzen
 End If
End Sub

solltest du im Blatt "AS nicht Eigentümer der Fläche" auch die Spalten F ung G nutzen koenntest du auch
den Code ins Workbook setzen.
Workbook_SheetBeforeDoubleClick
gruss hary

Bild

Betrifft: AW: Bsp.-Mappe
von: Andreas Ellwardt
Geschrieben am: 04.11.2015 11:55:39
Klasse, das funktioniert! Vielen Dank dafür
Die Zelle jetzt für eine Eingabe sperren, aber das Doppelklicken erlauben geht wahrscheinlich nicht?

Bild

Betrifft: AW: Bsp.-Mappe
von: hary
Geschrieben am: 04.11.2015 12:42:09
Moin

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("F7:G51")) Is Nothing Then
Cancel = True
   If Target.Columns.Count <> 1 Then Exit Sub '--wenn Verbundspaltenanzahl <> 1 dann beenden
      Cells(Target.Row, 6).Resize(Target.Rows.Count, 2).ClearContents
        Target = "X" '--X setzen
 End If
 ActiveSheet.Protect Password:="passwort", UserInterfaceOnly:=True
End Sub

Nimm fuer die Datenueberpruefung die Formel Bsp.: =F25:G25=""
gruss hary

Bild

Betrifft: AW: Bsp.-Mappe
von: Andreas Ellwardt
Geschrieben am: 04.11.2015 12:53:51
Haut nicht ganz hin.
Doppelklick in F7. X wird eingetragen, Blatt wird geschützt. Danach passiert durch Doppelklicken auf andere Zellen nichts mehr.
Müssen die Zellen unter /formatieren/Schutz den Haken bei gesperrt haben oder nicht?

Bild

Betrifft: AW: Schutz
von: hary
Geschrieben am: 04.11.2015 15:14:10
Moin
Bei den Zellen wo der Doppelklick wirken soll, kein Haken.
gruss hary

Bild

Betrifft: AW: Schutz
von: Andreas Ellwardt
Geschrieben am: 04.11.2015 15:29:28
Auch auf den Verdacht hin, dass ich nerve.
Die Zellen in denen der Doppelklick wirken soll haben keine Haken bei gesperrt.
Das Blatt ist vor dem ersten Doppelklick ungeschützt:
Mit Doppelklick in F7 wird das Blatt geschützt. Aber ich kann danach trotzdem noch in die Zelle schreiben

Bild

Betrifft: AW: Schutz
von: hary
Geschrieben am: 04.11.2015 16:37:51
Moin
Nerven,nein.
Hab mal fuer die Datenueberpruefung eine neue Formel genommen. Es sind noch nicht alle geaendert.
https://www.herber.de/bbs/user/101251.xlsm
Falls das nicht reicht, ueberleg ich mir noch was. Geht aber erst Morgen.
gruss hary

Bild

Betrifft: AW: Schutz
von: Andreas Ellwardt
Geschrieben am: 05.11.2015 07:45:46
Moin,
funktioniert so weit gut, aber jetzt kann ich zwar kein "x" per hand in die Zelle eintragen, dafür jeden anderen Buchstaben. :-)

Bild

Betrifft: AW: Schutz
von: hary
Geschrieben am: 05.11.2015 10:02:25
Moin
Hab mich verhauen, Datenueberpruefung muss lauten:
statt <>"" dieses =""
gruss hary

Bild

Betrifft: Läuft
von: Andreas Ellwardt
Geschrieben am: 05.11.2015 14:48:08
Ich dreh durch. Das Klappt! Vielen Vielen Dank dafür

Bild

Betrifft: Noch eine Frage
von: Andreas Ellwardt
Geschrieben am: 06.11.2015 09:20:02
Hast du die Mappe noch?
ein winziges Problem habe ich noch.
ich möchte folgendes überprüfen:
Wenn in D24 steht "Weiter mit Schritt 6" dann soll F25:G25 und F27:G28 gesperrt sein und eine MsgBox mit einem Hinweis erscheinen.
(Das mit der MsgBox bekomm ich hin)

Bild

Betrifft: AW: Nur ein X
von: hary
Geschrieben am: 04.11.2015 08:01:00
Moin
Eine Moeglichkeit.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
  If Not Intersect(Target, Range("F7:G51")) Is Nothing Then
    Application.EnableEvents = False '--Event ausschalten wegen Endlosschleife
      Cells(Target.Row, 6).Resize(1, 2).ClearContents '--loescht beide Zellen
        Target = "X" '--traegt X ein
  End If
End If
Application.EnableEvents = True '--Event einschalten
End Sub

gruss hary

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Wenn A1 = "x" dann B1 ="" und umgekehrt"