'**************************************************
'* KALENDER *
'* 06.07.2015 *
'**************************************************
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim RaBereich As Range ' Varable Bereich Wirksamkeit
' von Nepumuk Anzahl der ausgewählten Zellen
If CallByName(Selection, IIf(Val( _
Application.Version) > 11, "CountLarge", "Count"), VbGet) = 1 Then
' Bereich der Wirksamkeit
Set RaBereich = Range("G6:H5000")
' noch mehr Bereiche
'Set RaBereich = Union(Range("C11:AG11 , C13:AG13, C15:AG15 , C17:AG17"), _
Range("C35:AE35, C37:AE37, C43:AG43, C45:AG45 , C47:AG47 , C49:AG49"), _
Range("C67:AF67 , C69:AF69 , C75:AG75 , C77:AG77 , C79:AG79 , C81:AG81"), _
Range("C99:AF99 , C101:AF101, C107:AG107 , C109:AG109 , C111:AG111"), _
Range("C127:AG127 , C129:AG129 , C131:AG131 , C133:AG133 , C139:AF139"), _
Range("C155:AG155, C157:AG157 , C159:AG159 , C161:AG161 , C163:AG163"), _
Range("C179:AF179 , C181:AF181, C187:AG187 , C189:AG189 , C191:AG191"))
'ActiveSheet.Unprotect ("Passwort") ' Schutz der Tabelle aufheben
' prüfen ob Zelle im Bereich, dann Userform starten
If Not Intersect(Target, RaBereich) Is Nothing Then
'ActiveSheet.unprotect ("Passwort") ' Schutz auf Tabelle setzen
If IsDate(ActiveCell) Then
frm_Kalender.Tag = ActiveCell
ElseIf InStr(ActiveCell, "/") > 0 Then
DaDatumUe = DateSerial(Mid(ActiveCell, InStr(ActiveCell, "/") + 1), 1, 1) _
+ Left(ActiveCell, InStr(ActiveCell, "/") - 1) * 7 _
- Weekday(DateSerial(Mid(ActiveCell, InStr(ActiveCell, "/") + 1), 1, 1), 2)
If Weekday(DateSerial(Mid(ActiveCell, InStr(ActiveCell, "/") + 1), 1, 1), 2) > 4 Then
DaDatumUe = DaDatumUe + 1
Else
DaDatumUe = DaDatumUe - 6
End If
frm_Kalender.Tag = DaDatumUe
ElseIf ActiveCell = "" Then
If IsDate(Range("D2")) Then
frm_Kalender.Tag = Range("D2")
Else
frm_Kalender.Tag = Date
End If
End If
frm_Kalender.Show
'ActiveSheet.protect ("Passwort") ' Schutz auf Tabelle setzen
End If
Set RaBereich = Nothing ' Variable löschen
End If
'**************************************************
'* EINGABE ERZWINGEN *
'* Danke an King *
'* 06.07.2015 *
'**************************************************
If Not myOldCell Is Nothing Then
If myOldCell.Row <> Target.Row Then
Application.EnableEvents = False
CheckChange
Application.EnableEvents = True
End If
End If
Set myOldCell = ActiveCell
End Sub
Friend Function CheckChange() As Boolean
'Prüft ob alle Pflichtfelder ausgefüllt sind
myRange = Me.Range(Cells(2, 3), Cells(Me.UsedRange.Rows.Count + Me.UsedRange.Row - 1, 3)).Value
If IsArray(myRange) Then
Z = 1
For Each M In myRange 'Durchläuft die Datensatzzeilen
Z = Z + 1
If M <> "" Then 'Wenn Auftragsnr vorhanden
'Prüft die Anzahl der Einträge nach Auftragsnr.
If Application.CountA(Me.Range(Cells(Z, 3), Cells(Z, 22))) < 19 Then
If Me.Name <> ActiveSheet.Name Then
Application.EnableEvents = False
Me.Activate 'Wechselt zum Aktuellen Blatt zurück
Application.EnableEvents = True
End If
For Each leer In Me.Range(Cells(Z, 3), Cells(Z, 22))
If leer = "" Then 'sucht die Leere Zelle im Datensatz
If leer.Address <> ActiveCell.Address Then
leer.Select
MsgBox "Bitte geben Sie hier einen Wert ein."
End If
Exit Function
End If
Next leer
End If
End If
Next M
End If
CheckChange = True
End Function
------------------------------------------------------------------------------------------------------------------------------
Die Formulare, Module und Klassenmodule habe ich erstmal weggelassen. Falls du die auch brauchst kannst du gerne
bescheid sagen. Ich kann dir auch die ganze Datei schicken... Ist vllt. einfacher?