Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Verlassen der aktiven Spalte/Bereich verhindern
#1
Hallo, ich habe wieder ein ungewöhnliches Thema.

Wenn ich mein gesetzten, selektierten Bereich verlasse ...
dann MsgBox "Sie haben den gesetzten Bereich verlassen"...
Springe in den selektierten Bereich zurück.
und erst wenn in aktiven Spalte, Zeile 4 ein Datum eingetragen wird dann darf man den selektierten Bereich wieder verlassen.

Danke schon mal im Voraus!

Das Makro fängt so an.

Code:
Sub EingangBuchen()
'
msg = MsgBox("Sie Möchten ein EINGANG buchen?" & Chr(10) & Space$(8) & vbNewLine & "bitte auswählen:", vbYesNo)

If msg = vbYes Then
    Range("F4").Select
    Selection.End(xlToRight).Offset(0, 1).Select 

'Inputbox Bestell Nr. eingeben

Dim LiefTxt As String
LiefTxt = InputBox("Bitte Lieferschein Nummer eingeben:")

'Wenn nichts steht oder wert in der DATB nicht gefunden wird

If LiefTxt = "" Then
    MsgBox "Sie haben nichts eingegeben!" & Chr(10) & "Buchung wird abgebrochen!", 64, "FEHLER"
    ActiveCell.Offset(-1, 0).ClearContents
    ActiveCell.Offset(-2, 0).ClearContents
    Sheets("WAWI").Protect password:="0", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True  'Blattschutz aktivieren

    Exit Sub

Else

    Sheets("WAWI").Unprotect password:="0"
    ActiveCell.Value = LiefTxt
    MsgBox "Zellen für Buchungswerte sind freigegeben." & Chr(10) & Space$(2), 64, "INFO"
    Range(ActiveCell.Offset(3, 0), ActiveCell.Offset(100, 0)).Select      'Mein selektierter Bereich
    Selection.Locked = False
    Sheets("WAWI").Protect password:="0", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True  'Blattschutz aktivieren

End If
End Sub
Antworten Top
#2
Hallöchen,

im Codemodul vom Tabellenblatt gibt es Ereignismakros. Dort nimmst Du das Ereignis Selection_Change und prüfst, ob das Datum da steht. Wenn nicht, gehst Du zurück in eine bestimmte Zelle.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hi, ich habe es ausprobiert nur komme nicht weiter.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If ActiveCell.Column ?wie definiert man verlasse?? Then
MsgBox "Spalte verlassen"
End Sub
Antworten Top
#4
Hallo,

ich hatte einen ähnlichen Fall nur über das Tabellenblatt verteilt mit mehreren Zellen
Ich habe dies mit einem Worksheet_Change gelöst

Beispiel:
Private Sub Worksheet_Change(ByVal Target As Range)
' Eintragsänderung in Spalte C
    If Target.Column = 3 Then
        If UCase(Target.Value) = "E" Then


... oder mit einer CASE-Abfrage.

Die Bedingung ist bei mir die Abfrage eines großen "E", bei Dir wäre es dann ein gültiges Datum und/oder die Zellposition mit Rücksprung zur Zelle..

Das kombiniert es meines Erachtens und ist anwendungsflexibler, als ein Selection_Change - was natürlich mehr Deiner Frage entspricht..

Ich hoffe, ich konnte etwas helfen.

Opa Oli
Antworten Top
#5
Hallöchen,
Wenn z. B. die Spalte C gesetzt wird dann prüfe, ob Du noch drin bist.
If Target.Column <> 3 Then...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
Hi, ich denke das ich den Bereich zuerst als Variable setze und dann die SelectionChange anwende. Wäre das nicht besser doch leider finde ich nicht den Wurm???

Makro:EingangBuchen
Sub AusgangBuchen()

ActiveCell.Offset(2, 0).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Locked = False



Dim BuchungsBereich As Range
Set BuchungsBereich = Selection.Address


Makro: Tabellenblatt6
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Adress = BuchungsBereich Then Exit Sub
    Application.EnableEvents = False
    Target.BuchungsBereich.Select
    Application.EnableEvents = True
End Sub
Antworten Top
#7
Hi, ich habe mein Vorhaben etwas falsch beschrieben.
Mein Makro soll folgendes machen...
Range.("A1").select
Cells(ActiveCell.Row, ActiveCell.Column + 1).Select
Range("ActiveCell").End(xlDown)).Select
Dim strBereich As range / string (weiß nicht was richtig wäre)
Set strBereich = Application.Selection (Aktuelken Bereich als Variable definieren, dieser verändert sich jedoch ständig)
strBereich.Locked = False

Im Tabelle6(WAWI) habe ich das Ereignis Worksheet_SelectionChange eingegeben 
If strBereich <> Selection Then
InputBox "Sie hab den Bereich verlassen. Soll der Bereich geschützt werden?, vbYesNo
If yes Then 
strBereich.Locked = True
StrBereich soll inaktiv bleiben (bis zum nächsten neuen Bereich)
Else
weiter überwachen (ob ich mich im strBereich befinde)

Kannst du mir bitte bei der Lösung helfen?
Antworten Top
#8
Hallöchen,

im SelectionChange kannst Du den Target nutzen.

Du prüfst dann mit INTERSECT ob sich die Bereiche überschneiden

If Intersect(Target, strBereich) is Nothing ...

oder je nachdem ...

If not Intersect(Target, strBereich) is Nothing ...

Da Deine Variable strBereich ein Bereich ist und nicht die Zelladresse das Bereichs würde ich sie übrigens rngBereich nennen. Muss man nicht, aber man sieht anhand rng gleich, was es sein müsste Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
Hallo shauan, danke für die schnelle Rückmeldung!

Meinst du das so? Irgend wie funktioniert es nicht Huh

Tabelle6(WAWI)

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngBuchungsBereich As Range
If Not Intersect(Target, Range(rngBuchungsBereich)) Is Nothing Then

    Dim Meldung As String
    Meldung = MsgBox("Sie haben den Buchungsbereich verlassen! Möchten Sie die Buchung abschließen?" & Chr(10) & Space$(8) & vbNewLine & "Bitte wählen:", vbYesNo)

    If Meldung = vbYes Then rngBuchungsBereich.Locked = True

End If
End Sub



MODUL /mein Makro

Public Sub CommandButton1_Click()

Range("A1").End(xlToRight).Offset(0, 1).Select "(Springe in Zelle A1 und rechts in nächste leere Zelle)"
ActiveCell.End(xlDown).Offset(3, 0).Select "(Springe nach unten)"
Range(Selection, Selection.End(xlDown)).Select "(Selektiere den Bereich nach unten)"

Dim rngBuchungsBereich As Range "(Selektierten Bereich definieren)"
Set rngBuchungsBereich = Application.Selection "(Aktuelle Auswahl/Selektion ist gleich rngBuchungsBereich)"
rngBuchungsBereich.Locked = False "(rngBuchungsBereich entsperren)"



End Sub
Antworten Top
#10
Hallöchen,

wenn Du in Deinem WorksheetChange die Variable rngBuchungsBereich nur dimensionierst, aber nix rein packst, was soll da passieren?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


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