1.7k Aufrufe
Gefragt in Tabellenkalkulation von florian1010 Mitglied (754 Punkte)
Hallo zusammen,

ich benötige bitte mal wieder eure Hilfe.

Und zwar möchte ich per Doppelklick das Datum des letzten Arbeitstage anzeigen lassen. (Arbeitstage sind von Mo-Fr.)
Es soll jedoch so sein, dass dieses Makro nur in Spalte "L" funktionieren darf, da sonst andere Makros per Doppelklick nicht mehr funktionieren.

Mein Ansatz dafür ist:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With ActiveCell.Column 12
.WrapText = True
.Value = Date - 1
End With


Leider klappt der nicht. Wenn ich Column 12 weg lasse, dann funktioniert es zwar, aber damit habe ich das Problem, dass die Eingrenzung auf Spalte "L" fehlt, andere Makros mit Doppelklick "gestört" werden und dann eben der gestrige Tag angezeigt wird. (An einem Montag wäre das dann der Sonntag, und nicht wie gewünscht der Freitag)

Gruß
Florian

8 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Florian,

probiere mal das folgende Makro:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If ActiveCell.Column <> 12 Then Exit Sub
ActiveCell.Value = WorksheetFunction.WorkDay(Now, -1)

End Su


Dazu muss allerding unter Optionen - Add-Ins die Analyse-Funktionen - VBA aktiviert sein.

Gruß

M.O.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

muss natürlich

End Sub
heißen und nicht End Su.

Gruß

M.O.
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo M.O.

Danke für die schnelle Antwort.

Wie kann ich hier noch das Format unter bringen "DD.MM.YYYY", da es das Datum als Zahl, nicht aber als Datum bringt.

Gruß
Florian
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo M.O.,

letzte zusätzliche Frage:

ich habe immer wieder das Problem mit UND.

Worauf muss ich achten, wenn ich mehrere Spalten (wie jetzt hier Spalte L und M) in ein Makro nehmen möchte. (z.B. Range(L:M)???

Gruß
Florian
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Florian,

willst du mehrere Spalten ansprechen, so gibt es mehrere Möglichkeiten.

Die einfachste ist eine Abfrage mit Or

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If ActiveCell.Column = 12 Or ActiveCell.Column = 13 Then
With ActiveCell
.Value = WorksheetFunction.WorkDay(Now, -1)
.NumberFormat = "dd/mm/yyyy"
End With
End If

End Sub


Etwas eleganter:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

'Falls aktive Zelle nicht in Spalten L oder M liegt, Makro beenden
If Intersect(Target, Range("L:M")) Is Nothing Then Exit Sub

With ActiveCell
.Value = WorksheetFunction.WorkDay(Now, -1)
.NumberFormat = "dd/mm/yyyy"
End With

End Sub


Mit Intersect kannst du auch mehrere nicht zusammenhängende Bereiche überprüfen:

Beispiel:
If Not Intersect(Target, Range("E12:E31,G12:G45,Z6:Z9")) Is Nothing Then

Hier wird der folgende Code nur ausgeführt, wenn die Zelle in den Bereichen der Zellen E12 bis E31 oder G12 bis G45 oder Z6 bis Z9 liegt.

Gruß

M.O.
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

Frage: weshalb With ActiveCell? Target ist doch die aktive Zelle.

Ich würde außerdem noch die Zeile
Cancel = True

ergänzen, damit nach dem Doppelklick die Zelle nicht automatisch editiert wird.


Bis später,
Karin
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Karin,

ActiveCell hatte ich wohl aus Florians Makro übernommen :(.
Klar bietet sich hier Target an.

Gruß

M.O.
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo M.O.

Danke für die Hilfe. - Auch der Tipp mit Intersect ist super.

Ich habe es zwar mit "or" schon probiert, aber blöderweise nur mit den Spalten, nicht aber mit dem ganzen Befehl.

Hier kann man halt noch richtig was lernen. Tolles Forum.

Gruß
Florian
...