Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1312to1316
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Markierung verschieben - nicht in ausgebl. Zeilen

Markierung verschieben - nicht in ausgebl. Zeilen
30.05.2013 11:20:26
Peter
Guten Tag
Mit diesem Code verschiebe ich die die aktuelle Markierung um einen Schritt nach oben.
In gefilterten Listen (resp. bei teilweise ausgeblendeten Zeilen) wäre es sinnvoll, wenn die Markierung bis zur nächsten nicht ausgeblendeen Zeile (relevant ist die erste Zelle links) verschoben würde.
Ich habe versucht, das mit Do ... Loop Until Selection.EntireRow.Visible zu bewerkstelligen. Das funktioniert jedoch nicht.
Wie muss der Code ergänzt werden?
Gruss, Peter
Sub OffsetToUp()
'' Tastenkombination: Strg+Umschalt+U
Dim AktiveZelle As Range
Set AktiveZelle = ActiveCell
'Do
If Selection.Row > 1 Then
Selection.Offset(-1, 0).Select
AktiveZelle.Offset(-1, 0).Activate 'bewirkt, dass xte-Zelle innerhalb der Markierung ausgewählt  _
_
bleibt
'Loop Until Selection(1).Visible = True
End If
End Sub

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

Betreff
Datum
Anwender
Anzeige
Application.SendKeys "{up}" reicht schon oT
30.05.2013 11:39:38
Matthias

AW: Application.SendKeys "{up}" reicht schon oT
31.05.2013 07:34:23
Peter
Hallo Matthias
Danke für den Hinweis. Allerdings wäre ich froh, wenn du das noch etwas konkretisieren könnest. Wie muss ich Application.SendKeys "{up}" genau einsetzen?
Gruss, Peter

einfach den Code tauschen ...
31.05.2013 08:01:22
Matthias
Hallo Peter
Einfach diese Zeile gegen Deinen Code austauschen.
Zitat:
... wäre es sinnvoll, wenn die Markierung bis zur nächsten nicht ausgeblendeen Zeile (relevant ist die erste Zelle links) verschoben würde.
Ich gehe also davon aus das Du die Markierung immer eine Zeile nach oben verschieben willst und dabei die ausgeblendeten Zeilen auslassen willst(evt. durch Filter)
Dein geposteter Code setzt aber die Markierung auch in die ausgeblendeten Zellen.
Application.SendKeys "{up}" macht nichts anderes als den Tastendruck auf "Pfeil hoch" zu benutzen.
Probiers aus Setze einen Filter, den Cursor au dei letzte Zelle und klicke immer weiter auf "Pfeil hoch". Su wirst bemerken das die ausgeblendeten Zeilen übersprungen werden. Diese Codezeile macht also genau das Gleiche.
https://www.herber.de/bbs/user/85590.xls
Gruß Matthias

Anzeige
AW: einfach den Code tauschen ...
31.05.2013 09:44:10
Peter
Hallo Matthias
Vielen Dank für deine Antwort.
Allerdings hat mein Code schon noch etwas mehr "Inhalt", insbesondere verschiebt er eie Selektion, die mehrere Zellen, zusammenhängend oder nicht zusammenhängend, möglicherweise auch auf mehreren Zellen.
Zudem verbleibt die aktive Zelle immer die gleiche innerhalb der Markierung.
Mit dem SendKey wird nur noch eine Zelle angewählt.
Beispiel meines Codes:
Markierung A10:E10; aktive Zelle D10 wird verschoben nach
Markierung A9:E9; aktive Zelle D9
Markierung A10:E10;G12; aktive Zelle G12 wrid verschoben nach
Markierung A9:E9;G11; aktive Zelle G11
Deshalb habe ich den Eindruck, dass mich hier SendKeys nicht weiter bringt. Oder gibt es das auch modifiziert?
Gruss, Peter

Anzeige
Ich hab da keinen Plan, deshalb offen ... kwT
31.05.2013 12:03:38
Matthias

AW: Markierung verschieben - nicht in ausgebl. Zeilen
01.06.2013 13:51:55
Flock
Hallo Peter,
Da sind ein paar Kleinigkeiten zu korrigieren:
1. Das End If muss vor das Loop Until
2. Ausgeblendete Zeilen/Spalten werden nicht mit .visible sondern .hidden abgefragt und
3. geht das nur für ganze Zeilen/Spalten, also Loop Until Selection(1).EntireRow.Hidden = False
Vielleicht hast du das ja alles schon mal ausprobiert :-). Der eigentliche Grund, warum es nicht geht:
Du schiebst zwar deine Selection und deine aktive Zelle immer um eins hoch, aber deine Variable Aktivezelle wandert nicht mit. Nach der Verschiebung der aktiven Zelle muss sie neu gesetzt werden.
So gehts (getestet):
Sub OffsetToUp()
'' Tastenkombination: Strg+Umschalt+U
Dim AktiveZelle As Range
Set AktiveZelle = ActiveCell
Do
If Selection.Row > 1 Then
Selection.Offset(-1, 0).Select
AktiveZelle.Offset(-1, 0).Activate 'bewirkt, dass xte-Zelle innerhalb der Markierung _
'ausgewählt bleibt
Set AktiveZelle = ActiveCell       ' Jetzt wandert die Variable auch mit
Loop Until Selection(1).EntireRow.Hidden = False
End Sub
Beste Grüße
Flock

Anzeige
wirklich getestet ?
01.06.2013 16:15:08
Matthias
Hallo
1. Das End If muss vor das Loop Until
So gehts (getestet!!!):
Und wo ist es denn, das: End IF ?
Gleich wenn ich die fehlende Zeile einfüge,ist die Frage:
  • In gefilterten Listen (resp. bei teilweise ausgeblendeten Zeilen) wäre es sinnvoll, wenn die Markierung bis zur nächsten nicht ausgeblendeen Zeile (relevant ist die erste Zelle links) verschoben würde.

  • Das is mE mit diesem Code nicht realisiert.
    Auch die Aussage:
    aber deine Variable Aktivezelle wandert nicht mit ist falsch.
    Sie wandert mit, nur gehts eben hier um die gefilterten Zeilen
    Gruß Matthias

    Anzeige
    AW: wirklich getestet ?
    02.06.2013 01:21:09
    Flock
    Hallo Matthias,
    Mea culpa, in meinem Testfile ist das End If natürlich drin. Nach dem Kopieren in den Post hatte ich noch den Kommentar in die Zeile "Set AktiveZelle..." hinzugefügt und dabei versehentlich die End If -Zeile gelöscht. Noch mal Komplett:
    Sub OffsetToUp()
    '' Tastenkombination: Strg+Umschalt+U
    Dim AktiveZelle As Range
    Set AktiveZelle = ActiveCell
    Do
    If Selection.Row > 1 Then
    Selection.Offset(-1, 0).Select
    AktiveZelle.Offset(-1, 0).Activate 'bewirkt, dass xte-Zelle innerhalb der Markierung  _
    ausgewählt bleibt
    Set AktiveZelle = ActiveCell ' Jetzt wandert die Variable auch mit
    End If
    Loop Until Selection(1).EntireRow.Hidden = False
    End Sub
    

    Stimmt, meine Aussage bez. AktiveZelle ist nur teilweise richtig, allerdings genau da, wo es wehtut:
    Die Variable AktiveZelle wandert nur scheinbar mit, solange man sich im ungefilterten Bereich bewegt, weil dann OffsetToUp ja ohne Loop nur einmal ausgeführt wird. So fällt erst mal nicht auf, daß mit AktiveZelle.Offset(-1, 0).Activate der Inhalt von AktiveZelle und activecell danach nicht mehr identisch sind. Erst beim nächsten Aufruf von OffsetToUp wird AktiveZelle noch vor dem Do...Loop-Teil wieder nachgeführt!
    Erreicht die Verschiebung aber eine ausgefilterte Zeile, schlägt der Loop zu. Die Selection wird nochmal verschoben, aber da jetzt Aktivezelle nicht nachgeführt wurde, zeigt AktiveZelle.Offset(-1, 0) wieder auf die gleiche Zelle wie vorher und hinkt daher der Selection relativ um eine Zeile hinterher. Brauchts n Loops wg. n ausgefilterter Zeilen, wird der Abstand immer größer, Aktivezelle ändert sich ja nicht. Trifft jetzt AktiveZelle.Offset(-1, 0) nicht mehr in den Bereich der verschobenen Selection, wird sie die die neue Selection!
    Wenn z.B Selection nur eine Zelle oder ein einzeiliger Bereich ist, passiert das schon im ersten Loop und man landet im Nirwana, weil diese neue Selection ja immer noch in der ersten ausgefilterten Zeile hängt.
    Nur wenn die urspüngliche Selection mindestens 2mal mehr Zeilen +1 als die ausgefilterte Lücke hat und activecell im Mittelfeld war, kanns gutgehen.
    Mein Code führt Aktivezelle immer sofort im Anschluss an die Verschiebungen nach, somit trifft AktiveZelle.Offset(-1, 0).Activate auch im Loop-Fall immer in die verschobene Selection und diese bleibt somit erhalten.
    Zitat: Das is mE mit diesem Code nicht realisiert.
    Was passiert denn mit diesem Code bei dir ?
    Bei mir funktioniert er, wie in der Beschreibung gewünscht!
    Gruß
    Flock

    Anzeige
    wir denken in 2 verschiedene Richtungen ...
    02.06.2013 10:59:17
    Matthias
    Hallo
    Klar funktioniert Dein Code.
    Ich habe es wahrscheinlich nur anders verstanden.
    Ich bin der Meinung das wenn 3 Zeilen markiert sind das es nach dem Verschieben wieder 3 Zeilen sein sollen.
    Nur als Bsp.
    Nehmen wir mal an die Zeilen (5,9,13) sind durch Filter ausgeblendet.
    Markiere nun bitte A10:C12,
    dann bei gedrückter Strg-Taste B11
    Es sind so nun 3 Zeilen im Bereich(A:C) markiert.
    Userbild
    Beim ersten Ausführen des Codes sind nur noch 2 sichtbare Zeilen markiert.
    Userbild
    Ich habe es so verstanden. Es sollen dann gleichbleibend 3 Zeilen markiert bleiben.
    wobei die aktive Zelle nur zufällig von mir in der Mitte dargestellt wird.
    Userbild
    Ich denke also wir haben nur in verschiedene Richtungen gedacht :-)
    Gruß Matthias

    Anzeige
    AW: wir denken in 2 verschiedene Richtungen ...
    02.06.2013 19:51:59
    Flock
    Hallo Matthias,
    die Richtung war schon die gleiche, nur das gewünschte Ergebnis war mir in der Form nicht präsent.
    Wär ja auch zu einfach gewesen :-)
    Da wird es wirklich komplex, aber eine schöne Herausforderung. Die Idee ist, bei einer Mehrfachauswahl über nehrere Zeilen diese in einzelne Zeilen zu zerlegen und sie beim Durchschieben durch einen beliebig gefilterten Bereich immer wieder dynamisch zusammenzubauen. Ich versuch es mal.
    Gruß
    Flock

    AW: wirklich getestet ?
    03.06.2013 06:54:41
    Peter
    Hallo Flock, halle Matthias
    Da ich in den letzten Tagen unterwegs war, konnte ich mich nicht in die Diskussion einschalten. Die vorliegende Lösung ist die von mir gesuchte Lösung. Relevant ist, dass immer die erste Zelle der Markierung sichtbar ist. Ob ausgeblendet oder nicht, die Anzahl selektierter Zellen soll immer gleich bleiben.
    Vielen Dank für die Lösung und die interessanten Beiträge.
    Gruss, Peter

    Anzeige
    Danke für die Rückmeldung, da...
    03.06.2013 23:09:34
    Flock
    ..klappe ich doch sofort den VBA-Editor zu.
    Gruß
    Flock

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige