AW: Makro Bereich definieren
22.11.2021 19:15:43
Yal
Hallo zusammen,
dann erkäre ich, was ich verstehe, dann kann Denis noch korrigieren.
Jeder Kollege/Kollegin muss jeden Tag (bis zu 31 Tage) einstempeln (Marko A) und ausstwmpeln (Makro B).
Das "Ein" wird im Bereich "D4:D34" eingetragen und das "Aus" ... wahrscheinlich in E4:E34.
Also: entweder ein Zeile ein Tag, dann muss man ermitteln welche Zeile, oder es kommt alles nacheinander, dann muss die erste leere Zeile ermittelt werden, sowohl beim Einstempeln als auch bei Ausstempeln.
@Denis: auf einem "Bereich" kann man nicht schreiben. Nur auf Zelle, also entweder auf jede oder eine Zelle dieses Bereiches. Es ist wichtig, um eine Vorhaben verständlicher zu beschreiben.
Da ich die Version 1-31 für wahrscheinlicher halte (und weil die andere Variante wackeliger ist), den Code dazu:
Sub Anmelden()
Dim Zeile As Integer
Zeile = Day(Now) + 3 '1->4, 31->34
If Tabelle1.Cells(Zeile, "D") "" Then
MsgBox "Anmeldezeit für heute (Zelle D" & Zeile & ") ist bereit belegt.", vbExclamation
Else
Tabelle1.Cells(Zeile, "D") = Format(Now, "hh:mm:ss")
End If
End Sub
Sub Abmelden()
Dim Zeile As Integer
Zeile = Day(Now) + 3 '1->4, 31->34
If Tabelle1.Cells(Zeile, "E") "" Then
MsgBox "Abmeldezeit für heute (Zelle E" & Zeile & ") ist bereit belegt.", vbExclamation
Else
Tabelle1.Cells(Zeile, "E") = Format(Now, "hh:mm:ss")
End If
End Sub
Ein etwa vollständigere Version wäre:
Sub Anmelden()
Zeit_eintragen "An"
End Sub
Sub Abmelden()
Zeit_eintragen "Ab"
End Sub
Private Sub Zeit_eintragen(AnAb As String)
Dim Zelle As Range
Dim Spalte As Integer
Select Case AnAb
Case "An": Spalte = 4 ' 4. Spalte ist D
Case "Ab": Spalte = 5 '5. Spalte ist E
End Select
Set Zelle = Tabelle1.Cells(Day(Now) + 3, Spalte)
If Zelle.Value "" Then
If MsgBox(AnAb & "meldezeit für heute (Zelle " & Zelle.Address & ") ist bereit belegt." & vbCr & "Eintrag ersetzen?", vbYesNo + vbExclamation) = vbYes Then
Zelle.ClearContents
End If
End If
If Zelle.Value = "" Then Zelle = Format(Now, "hh:mm:ss")
End Sub
VG
Yal