ist es im Rahmen einer VBA möglich, die Adresse der aktuellen Zelle irgendwo/irgendwie als Fixwert zu hinterlegen, um später auf genau diese Zelle zugreifen zu können?
Gruß, Rolf
Private Sub Worksheet_Change(ByVal Target As Range)
Dim UrlPlan As String 'Eingabebereich
Dim maxUrlauber As String 'max. Anzahl Urlauber pro Tag
Dim start1 As Long, start2 As Long 'Startzeile Block1 bzw. Block2
Dim sum1 As Long, sum2 As Long 'Summenzeile Block1 bzw. Block2
Dim AZ As String, spB As String 'aktuelle Zelle, aktuelle Spalte
Dim Bereich As Range 'Datenbereich im aktuellen Block (Teil-Spalte)
Dim zelle As Range 'Zelle(n) in "Bereich"
Dim i As Integer 'Anzahl gefüllter Zellen in "Bereich"
Dim WS As String 'Name dieses Worksheets
UrlPlan = Range("UrlPlan").Address
maxUrlauber = Range("maxUrlauber").Address
start1 = Range("start1").Row
start2 = Range("start2").Row
sum1 = Range("sum1").Row
sum2 = Range("sum2").Row
WS = ActiveSheet.Name
If Intersect(Target, Range(UrlPlan)) Is Nothing Then
Exit Sub
Else
'aktive Zelladresse und Spaltenbuchstabe(n) in Variablen hinterlegen, _
getrennt nach "Block1" und "Block2"
AZ = ActiveCell.Address
spB = Mid(AZ, 2, InStr(2, AZ, "$") - 2)
'Löscht den Eintrag "Urlaubswunsch", wenn genehmigt
With Target
If .Interior.ColorIndex = 36 And .Offset(1, 0).Value "" Then
.Offset(1, 0).ClearContents
.Offset(1, 0).Interior.ColorIndex = 2
.Offset(1, 0).Font.ColorIndex = 3
End If
End With
'Anzahl Zelleinträge ermitteln und in der Variablen "i" hinterlegen
If za "" Then i = i + 1
Next zelle
Else
Set Bereich = Range(spB & start2 & ":" & spB & sum2 - 1)
For Each zelle In Bereich
If zelle.Value "" Then i = i + 1
Next zelle
End If
'Warnmeldung, wenn i > maximal erlaubte Anzahl Urlauber pro Tag
If i > Range(maxUrlauber).Value Then
MsgBox _
"Die Anzahl Ur-Wünsche überschreitet das zulässige Maximum!" & _
vbLf & vbLf & "Bitte sprich dich mit deinen Kolleginnen / " & _
"Kollegen ab, " & vbLf & "oder wähle einen anderen " & _
"Zeitraum.", vbOKOnly + vbExclamation, "Warnhinweis"
'Ändert die Hintergrundfarbe der Zelle in rot und die Schriftfarbe in blau
With Target
.Interior.ColorIndex = 3
.Font.ColorIndex = 5
End With
End If
End If
End Sub
Gruß, Rolf
Private Sub Worksheet_Change(ByVal Target As Range)
Dim UrlPlan As String 'Eingabebereich
Dim maxUrlauber As String 'max. Anzahl Urlauber pro Tag
Dim start1 As Long, start2 As Long 'Startzeile Block1 bzw. Block2
Dim sum1 As Long, sum2 As Long 'Summenzeile Block1 bzw. Block2
Dim AZ As String, spB As String 'aktuelle Zelle, aktuelle Spalte
Dim Bereich As Range 'Datenbereich im aktuellen Block (Teil-Spalte)
Dim zelle As Range 'Zelle(n) in "Bereich"
Dim i As Integer 'Anzahl gefüllter Zellen in "Bereich"
Dim WS As String 'Name dieses Worksheets
UrlPlan = Range("UrlPlan").Address
maxUrlauber = Range("maxUrlauber").Address
start1 = Range("start1").Row
start2 = Range("start2").Row
sum1 = Range("sum1").Row
sum2 = Range("sum2").Row
WS = ActiveSheet.Name
If Intersect(Target, Range(UrlPlan)) Is Nothing Then
Exit Sub
Else
'aktive Zelladresse und Spaltenbuchstabe(n) in Variablen hinterlegen, _
getrennt nach "Block1" und "Block2"
AZ = ActiveCell.Address
spB = Mid(AZ, 2, InStr(2, AZ, "$") - 2)
'Löscht den Eintrag "Urlaubswunsch", wenn genehmigt
With Target
If .Interior.ColorIndex = 36 And .Offset(1, 0).Value "" Then
.Offset(1, 0).ClearContents
.Offset(1, 0).Interior.ColorIndex = 2
.Offset(1, 0).Font.ColorIndex = 3
End If
End With
'Anzahl Zelleinträge ermitteln und in der Variablen "i" hinterlegen
If za "" Then i = i + 1
Next zelle
Else
Set Bereich = Range(spB & start2 & ":" & spB & sum2 - 1)
For Each zelle In Bereich
If zelle.Value "" Then i = i + 1
Next zelle
End If
'Warnmeldung, wenn i > maximal erlaubte Anzahl Urlauber pro Tag
If i > Range(maxUrlauber).Value Then
MsgBox _
"Die Anzahl Ur-Wünsche überschreitet das zulässige Maximum!" & _
vbLf & vbLf & "Bitte sprich dich mit deinen Kolleginnen / " & _
"Kollegen ab, " & vbLf & "oder wähle einen anderen " & _
"Zeitraum.", vbOKOnly + vbExclamation, "Warnhinweis"
'Ändert die Hintergrundfarbe der Zelle in rot und die Schriftfarbe in blau
With Target
.Interior.ColorIndex = 3
.Font.ColorIndex = 5
End With
End If
End If
End Sub
Gruß, Rolf
With Target
.Interior.ColorIndex = 3
.Font.ColorIndex = 5
End With
Dieser kleine Code-Schnipsel funktioniert bei RETURN und ENTER sowie den Pfeiltasten {RIGHT} und {DOWN} einwandfrei; nicht jedoch beim Betätigen der Pfeiltasten {LEFT} und {UP}. Das gleiche Problem habe ich bei Mausklick links bzw. oberhalb der Zelle, die formatiert werden soll. Kann mir jemand sagen, woran das liegt und, wenn ja, was ich ändern muss?
With Target
.Interior.ColorIndex = 3
.Font.ColorIndex = 5
End With
Dieser kleine Code-Schnipsel funktioniert bei RETURN und ENTER sowie den Pfeiltasten {RIGHT} und {DOWN} einwandfrei; nicht jedoch beim Betätigen der Pfeiltasten {LEFT} und {UP}. Das gleiche Problem habe ich bei Mausklick links bzw. oberhalb der Zelle, die formatiert werden soll. Kann mir jemand sagen, woran das liegt und, wenn ja, was ich ändern muss?
Öffne den VBA-Editor: Drücke ALT + F11
, um den Visual Basic for Applications (VBA) Editor zu öffnen.
Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf VBAProject (DeineArbeitsmappe)
, wähle Einfügen
und dann Modul
.
Schreibe den Code: Verwende folgenden VBA-Code, um die Adresse der aktiven Zelle als Fixwert zu speichern:
Dim AZ As String
AZ = ActiveCell.Address
Mit diesem Code speicherst Du die Adresse der aktuell aktiven Zelle in der Variablen AZ
.
Implementiere die Logik: Je nach Anforderung kannst Du den gespeicherten Wert von AZ
in Deiner Logik verwenden, um beispielsweise eine Warnmeldung anzuzeigen oder die Zelle zu formatieren.
Problem: Adresse ändert sich beim Wechsel der Zelle
Problem: Zelle wird nicht korrekt eingefärbt
Worksheet_Change
-Ereignisse, um auf Änderungen zu reagieren.Eine andere Möglichkeit, um die maximale Anzahl an Einträgen in einer Spalte zu beschränken, ohne VBA zu verwenden, ist die Datenüberprüfung:
Markiere die Spalte, in der du die Eingaben beschränken möchtest.
Gehe zu Daten
-> Datentools
-> Datenüberprüfung
.
Wähle unter Zulassen
die Option Benutzerdefiniert
und füge folgende Formel ein:
=ANZAHL2(A:A)<10
Setze eine Fehlermeldung, um die Benutzer zu informieren, wenn das Limit erreicht ist.
Hier ist ein Beispiel für einen VBA-Code, der die letzte eingetragene Zelle einfärbt, wenn das Limit überschritten wird:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim AZ As String
Dim maxEintraege As Integer
maxEintraege = 9 ' Maximal erlaubte Einträge
AZ = ActiveCell.Address
If Application.WorksheetFunction.CountA(Range("A:A")) > maxEintraege Then
MsgBox "Maximale Anzahl erreicht!"
Range(AZ).Interior.ColorIndex = 3 ' Rot einfärben
End If
End Sub
Public
-Variablen, wenn Du die Zelladresse in mehreren Modulen verwenden möchtest.Debug.Print
in Deinem Code, um den Wert von Variablen während der Ausführung zu überwachen.1. Kann ich die Adresse der Zelle auch in einer anderen Zelle speichern?
Ja, Du kannst den Wert von AZ
in eine andere Zelle schreiben, indem Du z.B. Range("B1").Value = AZ
verwendest.
2. Was mache ich, wenn der Code nicht funktioniert?
Überprüfe, ob Du das richtige Arbeitsblatt und die richtigen Zellreferenzen verwendest. Debugge den Code schrittweise mit F8
, um Fehler zu finden.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen