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

Forumthread: VBA Code - aktive Zelle

VBA Code - aktive Zelle
23.08.2018 10:47:02
Olaf
Hallo zusammen,
ich habe eine Tabelle, die ich mit VBA sortiere. Nachdem ich in der aktiven Zelle bin und das Modul aktiv wird, springe ich in die nächste zelle, eine Zeile tiefer. Ich möchte aber in der Zeile bleiben, also mit dem sortieren, springe ich auch an die entsprechende Zeile, wo auch immer sie gerade hinsortiert wird. Ich habe keine Idee wie ich das machen soll.
aktuell heisst es:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim vCAdrRow As Integer
Dim vCAdrCol As Integer
vCAdrRow = ActiveCell.Row
vCAdrCol = ActiveCell.Column
'Beschränken der Makroausführung auf den Bereich A1 bis A100
If Not Application.Intersect(Target, Range("A1:G100")) Is Nothing Then
'Bereich, auf den sich die Sortierung auswirken soll
Range("A1:G100").Select
'Sortierkriterien
Selection.Sort Key1:=Range("D1"), Order1:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
'Zelle A1 auswählen
'Range("d15").Select
ActiveCell.Offset(1, 1).Activate
Cells(vCAdrRow, vCAdrCol).Offset(0, 0).Select
End If
End Sub
Wer hat hier eine Idee, wie ich das einbauen kann. Danke schon mal im Vorraus
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code - aktive Zelle
23.08.2018 11:05:21
Torsten
Hallo,
versuch mal die Zeile:
ActiveCell.Offset(1, 1).Activate

rauszunehmen.
AW: VBA Code - aktive Zelle
23.08.2018 11:22:04
ChrisL
Hi Olaf
Hier eine Variante. Allerdings sollte der Vergleich/Match auf einer Spalte mit eindeutigem Schlüssel erfolgen.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim varTargetValue As Variant
If Not Application.Intersect(Target, Range("D1:D100")) Is Nothing Then
varTargetValue = Target
Range("A1:G100").Sort Key1:=Range("D1"), Order1:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
Cells(Application.Match(varTargetValue, Columns(4), 0), 4).Select
End If
End Sub
cu
Chris
Anzeige
AW: VBA Code - aktive Zelle
23.08.2018 12:16:15
Olaf
HI ChrisL,
den Code habe ich jetzt eingebaut, er funktioniert, habe nur irgendwie was falsch kopiert. Allerdings sortiert er dann und springt in die erste Zeile der Zelle, die aktuell sortiert wurde (Spalte D)und nicht in die aktuell gerade geschriebene. Wenn also 5 Zeilen mit dem gleichen Wert vorhanden sind und eine 6te dazukommt, dann springt der Code in die erste Zeile/Zelle dieser Werte. Zumindest schon einmal näher als am Ende der Tabelle stehen zu bleiben
Anzeige
AW: VBA Code - aktive Zelle
23.08.2018 12:31:14
ChrisL
Hi
Ja, das ist das erwähnte Thema mit dem eindeutigen Schlüssel.
cu
Chris
AW: VBA Code - aktive Zelle
23.08.2018 11:39:20
Olaf
Beide Ideen funktionieren leider nicht, vielen Dank. Bei Torsten passiert nach löschen nur der Sortiervorgang, aber die aktive Zelle ist die, auf die ich mit der Tastatur hinweise (Enter=eine Zeile tiefer / Pfeil nach rechts=Zelle rechts / ...)
Bei ChrisL sortiert der Code gar nicht erst, aber vielleicht mache ich das was falsch
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA für die aktive Zelle in Excel


Schritt-für-Schritt-Anleitung

Um mit VBA die aktive Zelle in Excel zu verwalten, befolge diese Schritte:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Rechtsklicke im Projektfenster auf „VBAProject (DeineArbeitsmappe)“ und wähle „Einfügen“ > „Modul“.
  3. Kopiere den folgenden Code:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim varTargetValue As Variant
       If Not Application.Intersect(Target, Range("D1:D100")) Is Nothing Then
           varTargetValue = Target
           Range("A1:G100").Sort Key1:=Range("D1"), Order1:=xlDescending, _
           Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
           Orientation:=xlTopToBottom
           Cells(Application.Match(varTargetValue, Columns(4), 0), 4).Select
       End If
    End Sub
  4. Passe den Code an:

    • Ändere die Range-Angaben, wenn du einen anderen Bereich sortieren möchtest.
  5. Speichere und schließe den VBA-Editor.

  6. Teste das Makro:

    • Ändere einen Wert in Spalte D und beobachte, wie der Code die aktive Zelle korrekt auswählt.

Häufige Fehler und Lösungen

  • Fehler: Die aktive Zelle springt nicht zur erwarteten Position.

    • Lösung: Stelle sicher, dass die Sortierung auf einer Spalte mit eindeutigen Werten basiert. Nutze Application.Match, um die Position der aktuellen Zelle korrekt zu ermitteln.
  • Fehler: Der Code führt die Sortierung nicht aus.

    • Lösung: Vergewissere dich, dass der Bereich korrekt definiert ist und dass du keine Syntaxfehler im Code hast.

Alternative Methoden

  • Excel VBA aktive Zelle auslesen ohne VBA:

    • Du kannst die Formel =CELL("address") verwenden, um die Adresse der aktiven Zelle anzuzeigen, ohne VBA zu nutzen.
  • Direkte Zellenreferenzierung:

    • Anstatt über ActiveCell zu arbeiten, kannst du gezielt Zellen ansprechen, z. B. Range("A1").Value.

Praktische Beispiele

  • Beispiel 1: Aktuelle Zelle ermitteln und anzeigen:

    MsgBox "Die aktuelle Zelle ist: " & ActiveCell.Address
  • Beispiel 2: Aktive Zelle setzen:

    Range("B2").Select
    ActiveCell.Value = "Hallo, Welt!"
  • Beispiel 3: Aktive Zelle als Range verwenden:

    Dim myRange As Range
    Set myRange = ActiveCell
    myRange.Interior.Color = RGB(255, 0, 0)  ' Hintergrundfarbe rot

Tipps für Profis

  • Nutze Option Explicit, um Variablen zu deklarieren. Dies hilft, Fehler zu vermeiden.
  • Verwende With...End With, um den Code effizienter zu gestalten:
    With ActiveCell
       .Interior.Color = RGB(0, 255, 0) ' Hintergrundfarbe grün
       .Font.Bold = True
    End With
  • Halte deinen Code modular und klar strukturiert, um die Wartbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die aktive Zelle in einer anderen Arbeitsmappe ermitteln?
Um die aktive Zelle in einer anderen Arbeitsmappe zu ermitteln, musst du diese zuerst aktivieren, indem du Workbooks("DeineMappe.xlsx").Activate verwendest.

2. Gibt es eine Möglichkeit, die aktive Zelle in einer Tabelle zu speichern?
Ja, du kannst die Adresse der aktiven Zelle in einer Variablen speichern und später darauf zugreifen, z.B. Dim cellAddress As String: cellAddress = ActiveCell.Address.

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