Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1380to1384
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-Bremsen lösen (bei Kopie aus andere Datei)

Makro-Bremsen lösen (bei Kopie aus andere Datei)
11.09.2014 10:01:43
Schmitty
Hallo,
ich habe mit Hilfe von "Makro aufzeichnen" einen funktionierenden Code erzeugt (Er soll von verschiedenen Tabellenblättern einer Datei die Formatierungen einiger Zeilen kopieren).
Er funktioniert recht gut aber braucht recht lange für die Arbeit. Nun meine Frage, ob man den Vorgang beschleunigen kann, also zum Beispiel ob die die Datei "Adressen.xlsm" immer zwangsläufig geöffnet werden muss.
Hier der Code:
' Format aus der Kunden-Datenbank holen
'Schmitz GmbH
Workbooks.Open Filename:="Z:\kartei\Adressen.xlsm"
Windows("Adressen.xlsm").Activate
Worksheets("Schmitz GmbH").Rows("6:2500").Copy
Windows("Recherche.xlsm").Activate
Sheets("Schmitz GmbH").Select
Rows("6:2500").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("B4").Select
' Schmitz EK
Windows("Adressen.xlsm").Activate
Sheets("Schmitz EK").Select
Rows("6:170").Select
Selection.Copy
Windows("Recherche.xlsm").Activate
Sheets("Schmitz EK").Select
Rows("6:170").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("B4").Select
' Raiffeisen Heizöl
Windows("Adressen.xlsm").Activate
Sheets("Raiffeisen Heizöl").Select
Rows("6:192").Select
Selection.Copy
Windows("Recherche.xlsm").Activate
Sheets("Raiffeisen Heizöl").Select
Rows("6:192").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("F4").Select
' Raiffeisen Diesel
Windows("Adressen.xlsm").Activate
Sheets("Raiffeisen Diesel").Select
Rows("6:114").Select
Selection.Copy
Windows("Recherche.xlsm").Activate
Sheets("Raiffeisen Diesel").Select
Rows("6:114").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("F4").Select
' Datei "Adressen.xlsm" schließen und NICHT speichern
Windows("Adressen.xlsm").Activate
ActiveWorkbook.Close savechanges:=False
Gruß
Christian

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro-Bremsen lösen (bei Kopie aus andere Datei)
11.09.2014 11:01:55
Rudi
Hallo,
also zum Beispiel ob die die Datei "Adressen.xlsm" immer zwangsläufig geöffnet werden muss.
ja, muss.
Den größten Effekt erzielst du, indem du auf Activate und Select verzichtest.
z.B.
    Workbooks("Adressen.xlsm").Worksheets("Schmitz GmbH").Rows("6:2500").Copy
Workbooks("Recherche.xlsm").Sheets("Schmitz GmbH").Rows("6:2500").PasteSpecial _
Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Gruß
Rudi

AW: Makro-Bremsen lösen (bei Kopie aus andere Datei)
11.09.2014 11:39:34
Schmitty
Hallo Rudi,
danke für deine Antwort. Ich habe alles soweit verändert wie du es vorgeschlagen hast.
Jetzt muss ich es nur noch hinbekommen, dass im Tabellenblatt zum Schluss eine bestimmte Zelle markiert ist (damit ich dort später immer gleich etwas eintragen kann).
Der Code lautet im Moment:
    Workbooks("Adressen.xlsm").Worksheets("Schmitz GmbH").Rows("6:2500").Copy
Workbooks("Recherche.xlsm").Sheets("Schmitz GmbH").Rows("6:2500").PasteSpecial Paste:= _
xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Workbooks("Recherche.xlsm").Sheets("Schmitz GmbH").Range("B4").Select

Leider versteht Excel wohl .Range("B4").Select nicht...
Gruß
Christian

Anzeige
AW: Makro-Bremsen lösen (bei Kopie aus andere Datei)
11.09.2014 12:19:08
Rudi
Hallo,
Select kannst du nur auf ein aktives Blatt ausführen.
Deshalb sicherheitshalber alle Objekte nacheinander.
Workbooks("Recherche.xlsm").Select
Sheets("Schmitz GmbH").Select
Range("B4").Select
Gruß
Rudi

AW: Makro-Bremsen lösen (bei Kopie aus andere Datei)
11.09.2014 12:19:19
Rudi
Hallo,
Select kannst du nur auf ein aktives Blatt ausführen.
Deshalb sicherheitshalber alle Objekte nacheinander.
Workbooks("Recherche.xlsm").Select
Sheets("Schmitz GmbH").Select
Range("B4").Select
Gruß
Rudi

AW: Makro-Bremsen lösen (bei Kopie aus andere Datei)
11.09.2014 14:29:25
Daniel
Hi
man kann die Zelle auch direkt mit Appliation.Goto aktivieren, Application.goto funktioniert auch Blatt- und Dateiübergreifend:
Application.Goto Workbooks("Recherche.xlsm").Sheets("Schmitz GmbH").Range("B4")
Gruß Daniel

Anzeige
AW: Makro-Bremsen lösen (bei Kopie aus andere Datei)
11.09.2014 14:52:16
Schmitty
Hallo Rudi,
hallo Daniel,
danke nochmals. Es funktioniert nun mit Daniels Lösungsvorschlag wie gewünscht!
Gruß
Christian

AW: Makro alle 15 Minuten ausführen
11.09.2014 15:04:42
Schmitty
So,
jetzt habe ich ein fertiges VBA, was wie folgt aussieht:
' Format aus der Kunden-Datenbank holen
Sub Aktualisieren()
' Datei "Adressen.xlsm" öffnen
Workbooks.Open Filename:="Z:\kartei\Adressen.xlsm"
'Schmitz GmbH
Workbooks("Adressen.xlsm").Worksheets("Schmitz GmbH").Rows("6:2500").Copy
Workbooks("Recherche.xlsm").Sheets("Schmitz GmbH").Rows("6:2500").PasteSpecial Paste:= _
xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Application.Goto Workbooks("Recherche.xlsm").Sheets("Schmitz GmbH").Range("B4")
' Schmitz EK
Workbooks("Adressen.xlsm").Worksheets("Schmitz EK").Rows("6:170").Copy
Workbooks("Recherche.xlsm").Sheets("Schmitz EK").Rows("6:170").PasteSpecial Paste:= _
xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Application.Goto Workbooks("Recherche.xlsm").Sheets("Schmitz EK").Range("B4")
' Raiffeisen Heizöl
Workbooks("Adressen.xlsm").Worksheets("Raiffeisen Heizöl").Rows("6:192").Copy
Workbooks("Recherche.xlsm").Sheets("Raiffeisen Heizöl").Rows("6:192").PasteSpecial Paste:= _
xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Application.Goto Workbooks("Recherche.xlsm").Sheets("Raiffeisen Heizöl").Range("F4")
' Raiffeisen Diesel
Workbooks("Adressen.xlsm").Worksheets("Raiffeisen Diesel").Rows("6:114").Copy
Workbooks("Recherche.xlsm").Sheets("Raiffeisen Diesel").Rows("6:114").PasteSpecial Paste:= _
xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Application.Goto Workbooks("Recherche.xlsm").Sheets("Raiffeisen Diesel").Range("F4")
' Datei "Adressen.xlsm" schließen und NICHT speichern
Windows("Adressen.xlsm").Activate
ActiveWorkbook.Close savechanges:=False
End Sub
Jetzt möchte ich, dass dieses Makro, egal auf welchem Tabellenblatt ich gerade bin (gibt ja wie euch vielleicht aufgefallen ist vier Stück), nach 15 Minuten Inaktivitiät automatisch ausgeführt wird.
Ich habe

Application.OnTime Now + TimeValue("00:15:00"), "Aktualisieren"
probiert, jedoch startet das Makro dann auch nach 15 Minuten, nur hört es dann nicht mehr auf und läuft in einer Schleife immer und immer wieder durch...
Jemand eine Idee, wo der Denkfehler liegt?
Gruß
Christian

Anzeige
AW: Makro alle 15 Minuten ausführen
11.09.2014 15:37:31
Daniel
Hi
bei Ontime merkt sich Excel auch die Datei und führt das Makro auch dann aus, wenn die Datei geschlossen ist, dazu öffnet es dann die Datei wieder.
um das zu verhindern musst du den gestarteten OnTime-Aufruf beim Schließen der Datei wieder zurücknehmen.
das geht so:
1. in einem allgemeinen Modul oberhalb der Makros eine Variable für die Startzeit deklarieren, diese ist für alle Makros innerhalb der Datei gültig und sie behält ihren Wert auch beendigung der Makros:
Option Explict
Public Startzeit as Date
2. beim Starten des Makros befüllst du diese Startzeit:
Startzeit = Now + TimeSerial(0, 15, 0)
Application.Ontime Startzeit, "Aktualisieren"
3. die Rückname beim Schließen erfolgt mit diesem Code im Modul "DieseArbeitsmappe"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Startzeit > Now Then Application.OnTime Startzeit, "Aktualisieren", schedule:=False
End Sub

hierbei wird im Ontime der Parameter "Schedule" auf FALSE gesetzt.
Die Startzeit muss die gleiche sein wie beim normalen Aufruf, sonst gibt es einen Fehler
(das ist so erforderlich, weil du ja das Makro zu unterschiedlichen Zeiten starten könntest und von diesen Mehrfachaufrufen nicht alle sondern nur bestimmte zurücknehmen willst).
Gruß Daniel

Anzeige
AW: Makro alle 15 Minuten ausführen
12.09.2014 07:15:39
Schmitty
Hallo Daniel,
verstehe ich das richtig, dass bei diesem Code nach dem öffnen der Datei alle 15 Minuten das Makro ausgeführt wird, egal, was ich gerade in der Arbeitsmappe mache?
Das ist für meine Zwecke unpraktisch. Ich dachte da eher an eine Ausführung nach 15 Minuten Nichtbenutzung des Arbeitsblattes (oder alternativ eines der Autofilter auf den vier Tabellenblättern)...
Gruß
Christian

AW: Makro alle 15 Minuten ausführen
12.09.2014 08:07:17
Daniel
Hi
Wenn du mit Application.OnTime Startzeit, Makroname ein Makro aufrufst, wird dieses zur angegebenen Startzeit ausgeführt.
Wenn du ein Makro willst, dass nach 15 min Inaktivität läuft, dann musst du im SheetChange oder SheetSelectionChange-Event im Modul "Diese Arbeitsmappe" folgende Aktionen ausführen:
1. Mit Application.OnTime letzte Startzeit, Makroname, Schedule:=False den letzten Aufruf widerrufen.
2. Mit Application.OnTime neue Startzeit, Makroname das Makro zu einem späteren Zeitpunkt erneut starten.
Desweitern musst du beachten, dass das Makro auch dann ausgeführt wird, wenn du die Datei geschlossen hast, weswegen du beim Schließen ebenfalls den letzten Aufruf zurücknehmen solltest.
Gruß Daniel

Anzeige
AW: Makro alle 15 Minuten ausführen
12.09.2014 14:11:15
Schmitty
Hallo Daniel,
danke, ich werde dass nachher mal testen...
Gruß
Christian

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige