Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1008to1012
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

Makro an der markierten zelle beginnen

Makro an der markierten zelle beginnen
22.09.2008 15:32:12
Werner

Hallo,
ich habe ein kleine Makro aufgezeichnet und dazu 2 Fragen.
Hier erst einmal das makro:
Sub Doppelpass()
' Doppelpass Makro
' Makro am 22.09.2008 von gf aufgezeichnet
' Tastenkombination: Strg+d
Range("G5:G8").Select
Selection.Copy
Application.CutCopyMode = False
Selection.ClearContents
Range("G9:G12").Select
Selection.Copy
Application.CutCopyMode = False
Selection.ClearContents
Range("G13").Select
End Sub
1. Die Position des Makros soll nicht festgeschrieben sein, sondern es soll in der zelle  _
beginnnen welche gerade markiert ist. Also von dort aus sollen 2 4er-Blöcke (nach unten) von Zellen kopiert und gelöscht werden. Diese verwende ich über meine erweiterete Zwischenablage weiter.
2- Zwischen der Kopie des ersten und des zweiten Blocks soll eine kurze Pause (1sec.) eingefügt  _
werden. Wie kann ich dies tun.
Ich freue mich über jede Hilfe.
Bitte in "Deutsch" da ich Anfänger bin.
Mfg
Werner


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

Betreff
Datum
Anwender
Anzeige
AW: Makro an der markierten zelle beginnen
22.09.2008 16:03:00
Beate
Hallo Werner,
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Doppelpass2()
    Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + 3, ActiveCell.Column)).Copy
    Application.CutCopyMode = False
    Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + 3, ActiveCell.Column)).ClearContents
    
    'dadurch wartet das Makro 1 Sek. mit dem weiterlaufen - dieser Wert kann verändert werden:
    Sleep 1000
    
    Range(Cells(ActiveCell.Row + 4, ActiveCell.Column), Cells(ActiveCell.Row + 7, ActiveCell.Column)).Copy
    Application.CutCopyMode = False
    Range(Cells(ActiveCell.Row + 4, ActiveCell.Column), Cells(ActiveCell.Row + 7, ActiveCell.Column)).ClearContents
End Sub


Gruß,
Beate
Anzeige
AW: Makro an der markierten zelle beginnen
22.09.2008 17:12:47
werner
Hallo und herzlichen Dank,
ich habe aber noch zwei hoffentlich kleine Probleme:
1. Wenn ich in der Exceltabele die Zellen manuell markiere und dannach entfernen drücke, so liegen diese Zellen dann in meiner erweitereten Zwischenablage.
Mit dem Makro funktioiniert dies leider nicht. Woran kann dies liegen ?
2. Wenn das Makro fertig durchgelaufen ist, soll möglichst die Zelle markiert sein die unter der letzten entfernten Zelle liegt.
Kann man da was machen ?
Danke nochmlas, das ist wirklich nett das Sie mir helfen.
MfG
Werner
Bereiche in Zwischenablage kopieren
22.09.2008 17:56:57
Beate
Hallo Werner,
dann so:
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Doppelpass3()
    Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + 3, ActiveCell.Column)).Copy
    Application.CutCopyMode = True
    Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + 3, ActiveCell.Column)).ClearContents
    
    'dadurch wartet das Makro 1 Sek. mit dem weiterlaufen - dieser Wert kann verändert werden:
    Sleep 1000
    
    Range(Cells(ActiveCell.Row + 4, ActiveCell.Column), Cells(ActiveCell.Row + 7, ActiveCell.Column)).Copy
    Application.CutCopyMode = True
    Range(Cells(ActiveCell.Row + 4, ActiveCell.Column), Cells(ActiveCell.Row + 7, ActiveCell.Column)).ClearContents
    
    Cells(ActiveCell.Row + 8, ActiveCell.Column).Select
End Sub


Wichtig ist das: Application.CutCopyMode = True
Gruß,
Beate
Anzeige
Vielleicht auch so
22.09.2008 18:26:00
Beate
Sollte obiger Code nicht funktionieren, dann so:
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Doppelpass3()
    Application.DisplayClipboardWindow = True 'Zwischenablage einblenden
    Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + 3, ActiveCell.Column)).Copy
    Application.CutCopyMode = True
    Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + 3, ActiveCell.Column)).ClearContents
    
    'dadurch wartet das Makro 1 Sek. mit dem weiterlaufen - dieser Wert kann verändert werden:
    Sleep 1000
    
    Range(Cells(ActiveCell.Row + 4, ActiveCell.Column), Cells(ActiveCell.Row + 7, ActiveCell.Column)).Copy
    Application.CutCopyMode = True
    Range(Cells(ActiveCell.Row + 4, ActiveCell.Column), Cells(ActiveCell.Row + 7, ActiveCell.Column)).ClearContents
    
    Cells(ActiveCell.Row + 8, ActiveCell.Column).Select
End Sub


Gruß,
Beate
Anzeige
AW: Vielleicht auch so
22.09.2008 20:16:00
werner
Hallo,
ich muss leider nochmals nerven.
Es funktioniert alles außer mit der Zwischenablage.
Dazu muss ich noch etwas erklären.
Die erweiterete Zwischenablage (EZA) ist ein Extra-Programm (nicht von Microsoft).
Dieses Programm überwacht die normale Windows Zwischenablage und speichert diese Inhalte zwischen. So dass ich diese Inhalte auch in nicht Microsoftsoftware weiter verwenden kann.
Zum zwischenspeichern benötigt die EZA aber etwas Zeit.
Also zwischen der Funktion KOPIEREN und dem LÖSCHEN.
Ich nehme nun an, dass die EZA ncit so schnell nachkommt.
Das Programm (PhraseExpress) ist übrigens Spitze für jeden Anwender (Sie können damit Textbausteine verwalten, Programme mit Parametern starten, haben die EZA uvm).
Leider weiß ich nun auch nicht warum es mit dem Makro nicht funktioniert. Wenn ich aber normal im Ecxel einen Bereich markiere und dann STRG-C drücke und danach ENTF, dann ist dies in der EZA gespeichert.
Nur per Makro leider noch nicht.
Gruss Werner
Anzeige
erweiterte Zwischenablage
22.09.2008 21:18:58
Beate
Hallo Werner,
probiere mal, ob dies in der EZA landet (bei mir kriege ich das bisher nur für einen 4er-Bereich hin):
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'Sie benötigen einen Verweis auf die
'Microsoft Forms 2.0 Objektlibrary
'(Sollte Sie diese nicht so einfach finden, einfach eine Userform einfügen und dann wieder entfernen)

Sub Doppelpass4()
    Dim oData As New DataObject
    Dim sText As String
    Dim rng As Range
    sText = ""
    For Each rng In Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + 3, ActiveCell.Column))
        sText = sText & IIf(sText = "", "", " ") & rng.Value
    Next
    With oData
        .SetText sText
        .PutInClipboard
    End With
    Application.CutCopyMode = True
    'dadurch wartet das Makro 1 Sek. mit dem weiterlaufen - dieser Wert kann verändert werden:
    Sleep 1000
    Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + 3, ActiveCell.Column)).ClearContents
    Cells(ActiveCell.Row + 4, ActiveCell.Column).Select
    'Application.DisplayClipboardWindow = True 'Zwischenablage einblenden
End Sub

Hilfreiche Links:
https://www.herber.de/forum/archiv/812to816/t812431.htm#812431 (Lösung von Nepumuk)
Guckst du: Zugriff auf die Zwischenablage (Clipboard)
Gruß,
Beate
Anzeige
AW: erweiterte Zwischenablage
23.09.2008 09:25:44
Werner
Hallo Beate,
irgendwie ist meine Antwort von gestern Abend nicht im Forum, darum nochmals.
Bei diesem Vorschlag erhalte ich leider die Fehlermeldung "Fehler beim Kompilieren" und danach ist die Zeile oData As New DataObject markiert.
Die Lösung von Kuwe ist sowiet i.O.. jedoch habe ich nach dem Makro nur den obersten 4er-Block in der EZW.
Gruss Werner
AW: erweiterte Zwischenablage
23.09.2008 09:29:20
Werner
Hallo nochmals,
leider verstehe ich die Beiträge unter den Links gar nicht.
Ist einfach nicht mein Gebiet.
Gruss Werner
AW: Vielleicht auch so
22.09.2008 23:54:19
Kuwe
Hallo Werner,
so funktioniert es bei mir:

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Doppelpass4()
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + 3, ActiveCell.Column) _
).Copy
Sleep 500
DoEvents
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + 3, ActiveCell.Column) _
).ClearContents
Range(Cells(ActiveCell.Row + 4, ActiveCell.Column), Cells(ActiveCell.Row + 7, ActiveCell. _
Column)).Copy
Sleep 500
DoEvents
Range(Cells(ActiveCell.Row + 4, ActiveCell.Column), Cells(ActiveCell.Row + 7, ActiveCell. _
Column)).ClearContents
Cells(ActiveCell.Row + 8, ActiveCell.Column).Select
End Sub

Gruß Uwe

Anzeige
AW: Vielleicht auch so
23.09.2008 09:31:00
Werner
Hallo Uwe,
so funktioniert alles, jedoch wird nur der oberste Zahlenblock erscheint dann aauch in der EZA.
Woran kann dies liegen ?
Gruss Werner
PhraseExpress - Zwischenablagespeicher
23.09.2008 10:44:00
Beate
Hallo Werner,
habe mir PhraseExpress installiert und Uwe's Code getestet. Bei mir landen damit zwei 4-er-Blöcke im Zwischenablagespeicher des Programms.
Gruß,
Beate
ES GEHT !!!
23.09.2008 16:03:00
Werner
Hallo Beate und Uwe,
es geht in der Tat. Keine Ahnung warum es heute früh nicht wollte.
Ich möchte mich nochmals herzlich für die nette Hilfe bedanken.
Ich hätte es nei allein gesschafft.
DANKE.
Vieleicht ist ja wenigstens PhraseExpress eine gute Empfehlung.
Liebe Grüsse und Danke...
Werner
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige