Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Abfrage in VBA nach Wochenende wenn wahr, Zelle ab C? bis E? sperren





Frage

Hi Leutz, brauche schon wieder fachmännische Hilfe. Hab eine Art Kalender erzeugt. mit einer Schaltfläche komme ich in den nächsten Monat. Auf den Feldern, wo ich was eintragen kann, hab ich eine Gültigkeit hingelegt. Wie bekomm ich dass aber nun hin, die Zellen auszulesen, wo das Wochenende steht und die übernächste (also Spalte C) und nachfolgende für weitere Einträge zu sperren? Hab ja nicht vor, mir was am WE reinzuschreiben! wenn ihr was wisst, bitte melden

Antwort 1 von JoeKe

Hallo,

das ließe sich mit dem SelectionChange- Ereignis machen:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column < 3 Or Target.Column > 5 Then Exit Sub
If Cells(Target.Row, 1) = "" Then Exit Sub
If Application.WorksheetFunction.Weekday(Cells(Target.Row, 1), 2) = 6 Then
MsgBox "Es ist Samstag!"
Cells(Target.Row + 2, Target.Column).Select
ElseIf Application.WorksheetFunction.Weekday(Cells(Target.Row, 1), 2) = 7 Then
MsgBox "Es ist Sonntag!"
Cells(Target.Row + 1, Target.Column).Select
End If
End Sub


Der Code gehört in das VBA-Projekt der Tabelle.

Gruß

JöKe

Antwort 2 von CaroS

Hallo,

ich würde sagen, die Möglichkeiten sind sehr verschieden und reichen von (1.) sanften optischen Hinweisen, die Eintragungen trotzdem noch zulassen, bis zur absolut unüberwindlichen Verhinderung (9.).

1. Mit bedingter Formatierung die Wochenenden farblich hervorheben (Hintergrundfarbe oder Rahmen).
...
9. Die Gültigkeitsprüfung so erweitern, dass eine Eingabe am Wochenende unmöglich ist. Dazu ggf. auch Eingabemeldung und Fehlermeldung ausfüllen und aktivieren.

An welche Größenordnung hattet Du denn so gedacht?

Gruß,
CaroS

Antwort 3 von Aliba

Hi,

also nehmen wir mal an, Deine Datumswerte stehen in Spalte A.
Du schreibst ja Du hast bereits eine Gültigkeitsliste.
Markiere mal diese Einträge und dann über EINFÜGEN-NAMEN-DEFINIEREN vergibts Du für diesen Bereich den Namen Tage_1
Nun vergibst Du für eine leere Zelle den Namen
Tage_2

Nun markierst Du die Zellen mit der DATEN-Gültigkeit,
dann: DATEN - GÜLTIGKEIT - LISTE und machst hier folgenden Eintrag.

=INDIREKT("Tage_"&WAHL(WOCHENTAG($A1;2);1;1;1;1;1;2;2))

$A1 musst Du natürlich auf Deine Gegebenheiten anpassen.

CU Aliba

Antwort 4 von anrufjoker_da

Also Jöke, bei deiner Antwort bekomme ich immer einen Fehler. Vll mach ich auch was falsch.
Aber er macht es nur an den Tagen, wo Wochenende ist, dass ist schonmal gut.

CaroS
Hast vll überlesen, dass ich schon eine Gültigkeit verwendet habe. Wüsste keine Möglichkeit, noch eine zu machen.

Alibaba´s Antwort probier ich auch gleich mal.

Antwort 5 von anrufjoker_da

ich bekomm das so auch nicht hin.

Kann ich die Datei vll jemand von euch geben, und ihr baut mir das nach euren Vorstellungen und meinen o.g. Wünschen?

oder ihr habt ne Idee, was ich falsch mache

MfG
der Paul

Antwort 6 von CaroS

Hallo anrufjoker_da,

ich weiß ja nicht, ob Du Dich da beim Griff in den Farbkasten etwas vertan hast, aber ich habe jedenfalls nicht überlesen, dass Du bereits eine Gültigkeit festgelegt hattest. Deswegen haben ich auch geschrieben "die Gültigkeitsprüfung so erweitern ... "

Gegenfrage: Hast Du gelesen, dass ich "erweitern" geschrieben habe?

Ich habe natürlich gedacht, wenn einer schon eine Gültigkeitsbedingung verwendet, dann hat er wahrscheinlich ein bisschen Ahnung davon und ist in der Lage, die zu erweitern. Dass Du nun "keine Möglichkeit [wüsstest], noch eine zu machen" zeigt aber leider, dass Du schon beim Lesen nicht sehr gründlich bist, denn von einer zweiten Gültigkeitsbedingung war nicht die Rede, sondern davon, die vorhandene zu erweitern.

Übrigens, auch Aliba hat Dir (vielleicht sogar aus demselben Grund?) eine Gültigkeitsbedingung vorgeschlagen - gute Idee, wenigstens die mal auszuprobieren. Trage die Formel aber nicht unter Liste ein (geht nämlich nicht), sondern unter Benutzerdefiniert. Dann funktioniert das Ganze allerbestens!

Und wenn Du nun noch schreibst, wie Deine erste Gültigkeitsbedingung aussieht, dann erklärt Dir vielleicht auch jemand, wie Du die beiden miteinander kombiniert kriegst. (Ich muss allerdings gleich für ´ne Woche verreisen, habe dann keinen PC, ist keine böse Absicht.)

Gruß,
CaroS

Antwort 7 von JoeKe

Hallo anrufjoker_da;

Zitat:
Also Jöke, bei deiner Antwort bekomme ich immer einen Fehler. Vll mach ich auch was falsch.
Aber er macht es nur an den Tagen, wo Wochenende ist, dass ist schonmal gut.


Was denn nun? Bekommst du eine Fehlermeldung (und wenn welche) oder funktioniert es?


Zitat:
er macht es nur an den Tagen, wo Wochenende ist


War doch so gewünscht!

Gruß

JöKe

Antwort 8 von anrufjoker_da

der Fehler nennt sich:

Laufzeitfehler 1004

Die Weekday -Eigenschaft des WorksheetFunction-Objektes kann nicht zugeordnet werden.

das bringt der aber nur bei Klick auf ein Wochenende

Wenn ich auf einen anderen Tag klicke passiert dass, was soll. Vll mach ich es noch ein bissel genauer:

Spalte A = Tage (Montag,Dienstag....)
Spalte B = Datum
Spalten C bis H ist frei. Dort wird am Ende hingeschrieben, welcher Azubi, wann in welche Abteilung gehen muss.

Nur am WE wollen wir ja nun nicht arbeiten :)

Hab einen Klick mit der rechten Maustaste auf das Arbeitsblatt gemacht Code anzeigen und deinen Code eingefügt. Muss ich sonst noch was machen? Vll fällt dir ja was ein.

Und die Lösung mit der Gültigkeit:
In Spalten C bis H hab ich eine Auswahlliste für Abteilung und Abteilungsleiter aufgebaut.

Ich probiere da jetzt noch ein bissel weiter, vll funktioniert dass ja doch irgendwie mit einer Gültigkeit.

Danke aber erst mal für eure tatkräftige Hilfe.

Antwort 9 von anrufjoker_da

okay hab meinen Fehler gerade herausgefunden

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column < 3 Or Target.Column > 5 Then Exit Sub
If Cells(Target.Row, 1) = "" Then Exit Sub
If Application.WorksheetFunction.Weekday(Cells(Target.Row, 2), 2) = 6 Then
MsgBox "Es ist Samstag!"
Cells(Target.Row + 2, Target.Column).Select
ElseIf Application.WorksheetFunction.Weekday(Cells(Target.Row, 2), 2) = 7 Then
MsgBox "Es ist Sonntag!"
Cells(Target.Row + 1, Target.Column).Select
End If
End Sub

Fehlende Angaben helfen euch auch nicht weiter! Danke für die Hilfe!