Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

aktuelle Zelladresse als Fixwert speichern

Forumthread: aktuelle Zelladresse als Fixwert speichern

aktuelle Zelladresse als Fixwert speichern
03.02.2013 18:32:21
Rolf
Hallo alle miteineind,
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

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
schreib die Adresse in eine String-Variable kwT
03.02.2013 18:38:32
Matthias

AW: aktuelle Zelladresse als Fixwert speichern
03.02.2013 18:39:18
Hajo_Zi
Hallo Rolf,
ja das ist möglich.
Benutze eine Variable.

AW: aktuelle Zelladresse als Fixwert speichern
03.02.2013 18:39:37
Hajo_Zi
Hallo Rolf,
ja das ist möglich.
Benutze eine Variable.

Anzeige
AW: aktuelle Zelladresse als Fixwert speichern
04.02.2013 06:22:15
Rolf
Guten Morgen Hajo,
das hab' ich schon versucht mit
Dim AZ As String
AZ = ActiveCell.Address
Nur: Die Adresse in AZ ändert sich natürlich, sobald ich eine andere Zelle aktiviere:(
Das Scenario ist wie folgt.
In jeder Spalte einer Tabelle dürfen maximal nur n Einträge vorgenommen werden. Sobald das Limit überschritten ist, soll die Zelle mit dem letzten Eintrag rot eingefärbt und eine Warnmeldung (MsgBox) erzeugt werden.
So lange die Eingabe mit RETURN oder ENTER bestätigt wird, kein Problem. Betätigt man statt dessen jedoch eine der Pfeiltasten, oder benutzt die Maus, um zur nächsten Zelle zu gelangen, wird diese mit rotem Hintergrund dargestellt. Sie ist ja jetzt die aktuelle Zelle (AZ). Schöne Scheiße!
Ich habe auch schon mal die Pfeiltasten per Makro gesperrt. Aber das ist ätzend. Da wird man beklopft im Kopf!
Hast du vielleicht noch eine andere Idee? Ich habe schon darüber gegrübelt, ob - und wenn ja, wie - es möglich ist, den Variablen-Wert von AZ (= Zelladresse) als absoluten Wert in eine "Hilfs"-Zelle zu kopieren. Bislang ergebnislos. Momentan überlege ich, ob ich evtl. mit der excel-Funktion ZELLE(Infotyp;Bezug) irgendwie weiter komme. Bislang sind meine Versuche allerdings gescheitert.
Gruß, Rolf

Anzeige
AW: aktuelle Zelladresse als Fixwert speichern
04.02.2013 07:23:11
firmus
Hallo Rolf,
ich habe mal unter "Scheiße" in der Onlinehilfe nachgesehen - nichts gefunden.
Vielleicht schreibt man es ja mit "ss".
Zum eigentlichen Problem:
Der Wert in AZ bleibt nach der Zuweisung erhalten - es sei denn Du läufst in Deiner Logik erneut über diese Instruktion. Dann wird natürlich AZ wieder erneut gesetzt.
Damit Dir geholfen werden kann, kannst Du
a) Schrittweise durch Deinen Code gehen (F8)
vermutlich entdeckst Du das Problem selbst
oder
b) Deinen VBA-Code mal hochladen, dann kann der Ablauf verifiziert werden.
Gruß
Firmus

Anzeige
AW: aktuelle Zelladresse als Fixwert speichern
04.02.2013 14:17:51
Hajo_Zi
Hallo Rolf,
ich sehe nichtr Deinen Gesamten Code darum kann ich dazu nichts schreiben. Soll die Variable nur in einem Modul bekannt sein ist Dim korrekt, ansonsten Public.

AW: aktuelle Zelladresse als Fixwert speichern
04.02.2013 17:27:09
Rolf
Hallo Hajo,
habe zwischenzeitlich etwas anderes ausprobiert. Siehe meinen Thread vom 03.02.2013 18:32:21. Bereitet aber immer noch Probleme in puncto Pfeiltasten. Hier der Code:
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

Anzeige
AW: aktuelle Zelladresse als Fixwert speichern
04.02.2013 17:29:26
Rolf
Hallo Hajo,
habe zwischenzeitlich etwas anderes ausprobiert. Siehe meinen Thread vom 03.02.2013 18:32:21. Bereitet aber immer noch Probleme in puncto Pfeiltasten. Hier der Code:
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

Anzeige
AW: aktuelle Zelladresse als Fixwert speichern
04.02.2013 10:59:25
Rolf
@alle,
bin zwischenzeitlich auf eine - wenngleich nicht gänzlich zufriedenstellende - Lösung gestoßen:
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?
Gruß, Rolf

Anzeige
AW: aktuelle Zelladresse als Fixwert speichern
04.02.2013 11:00:45
Rolf
Sorry, ich vergaß das "Häkchen"
@alle,
bin zwischenzeitlich auf eine - wenngleich nicht gänzlich zufriedenstellende - Lösung gestoßen:
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?
Gruß, Rolf

Anzeige
AW: aktuelle Zelladresse als Fixwert speichern
04.02.2013 12:56:36
Daniel
Hi
also wenn dein Ansinnen ist, daß in einer Spalte nur eine Maximale Anzahl von Werten eingegeben wird, würde ich nicht über VBA gehen, sondern über DATEN - DATENTOOLS - DATENÜBERPRÜFUNG und dort eine entsprechende Regel anlegen:
Beispiel für max 9 Einträge pro Spalte:
- alle Spalten markieren
- Obige Menüfunktion auswählen mit den Einstellungen:
Zulassen: Benutzerdefinert
Formel: =Anzahl2(A:A)<10 (die Formel wird immer für die aktive Zelle geschrieben)
- bei Fehlermeldung kannst du dann deine Fehlermeldung eintragen
Gruß Daniel

Anzeige
AW: aktuelle Zelladresse als Fixwert speichern
05.02.2013 04:16:06
Rolf
Hallo Daniel,
Danke! Nach kleiner Anpassung an meine Belange ist das eine Alternative.
Gruß, Rolf
;
Anzeige
Anzeige

Infobox / Tutorial

Aktuelle Zelladresse als Fixwert speichern in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf VBAProject (DeineArbeitsmappe), wähle Einfügen und dann Modul.

  3. 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.

  4. 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.


Häufige Fehler und Lösungen

  • Problem: Adresse ändert sich beim Wechsel der Zelle

    • Lösung: Stelle sicher, dass Du die Adresse in einer Variablen speicherst, bevor Du die Zelle wechselst. Die Adresse bleibt dann konstant.
  • Problem: Zelle wird nicht korrekt eingefärbt

    • Lösung: Überprüfe, ob Dein VBA-Code nach der Zellenänderung korrekt ausgeführt wird. Nutze Worksheet_Change-Ereignisse, um auf Änderungen zu reagieren.

Alternative Methoden

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:

  1. Markiere die Spalte, in der du die Eingaben beschränken möchtest.

  2. Gehe zu Daten -> Datentools -> Datenüberprüfung.

  3. Wähle unter Zulassen die Option Benutzerdefiniert und füge folgende Formel ein:

    =ANZAHL2(A:A)<10
  4. Setze eine Fehlermeldung, um die Benutzer zu informieren, wenn das Limit erreicht ist.


Praktische Beispiele

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

Tipps für Profis

  • Nutze Public-Variablen, wenn Du die Zelladresse in mehreren Modulen verwenden möchtest.
  • Verwende Debug.Print in Deinem Code, um den Wert von Variablen während der Ausführung zu überwachen.
  • Vermeide unnötige Zellenänderungen im Code, um die Ausführungsgeschwindigkeit zu erhöhen.

FAQ: Häufige Fragen

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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige