Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1204to1208
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 dauert recht lange

Makro dauert recht lange
Frank
Hallo zusammen
Ich hatte letztens schon einmal gepostet (siehe Link) jedoch keine Lösung meines Problems bekommen.
https://www.herber.de/forum/archiv/1204to1208/t1204448.htm
Ich habe eine Masterdatei, von wo aus ich per Schaltfläche Daten aus 8 verschlossenen Arbeitsmappen einlese (Den Code habe ich auch aus diesem Forum entnommen). Das funktioniert soweit auch ganz gut, jedoch dauert die Ausführung des Makros über 10 min, da ich aus den 8 Arbeitsmappen insgesamt 30 x 312 Zellen abfrage. Also es wird Zelle für Zelle abgefragt.
Der Bereich der Quelldatei ist immer gleich dem Bereich der Zieldatei. Also A1 geht nach A1. Betroffen sind nur zusammenhängende Bereiche, also A1:F1 nach A1:F1 und K1:Z1 nach K1:Z1
Bei meinem letzten Posting bekam ich den Hinweis, die Sache mit FormulaArray zu lösen, dass würde die Zeit erheblich reduzieren. Dafür reichen aber meine Kenntnisse nicht aus.
Villeicht kann mir ja jemand auf die Sprünge helfen.
Die hochgeladene Datei habe ich aus Übersichtsgründen zumindest vom Bereich her gekappt.
https://www.herber.de/bbs/user/73931.xlsm
Danke im Voraus für eure Mühen
Gruß Frank

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

Betreff
Benutzer
Anzeige
AW: Makro dauert recht lange
11.03.2011 14:39:48
Andi
Ja, schau mal GetMoreSpeed.
Function Mach was()
Call GetmoreSpeed (True)
'Dein Maincode
'MainCode Ende
Call GetmoreSpeed (False)
End 

Function
Gruß Andi
Was das Teil macht, ist im Code erleutert.  Der Rest ist trivial.

Sub GetMoreSpeed(bYesNo As Boolean)
'//Ein- bzw. Ausschalten von Excel-Aktionen
'//Bildschirmaktualisierung
Application.ScreenUpdating = Not (bYesNo)
'//Excel-Aktion-Methoden
Application.EnableEvents = Not (bYesNo)
'//Zellen- /Formelberechnung
Application.Calculation = IIf(bYesNo, xlCalculationManual, xlCalculationAutomatic)
End Sub

Anzeige
AW: Makro dauert recht lange
11.03.2011 18:34:49
Frank
Hallo Andi
Danke für deinen Vorschlag.
Der Code läuft wirklich etwas schneller ab, aber es dauert trotzdem noch recht lange, bis er abgearbeitet ist.
Gruß Frank
AW: Makro dauert recht lange
11.03.2011 14:56:57
JoWE
Hallo Frank,
sind diese Annahmen korrekt und abschliessend?
bestimmte Daten einer Tabelle einer geschlossenen Arbeitsmappe sollen in eine eigene Tabelle der Mastertabelle in identische Bereiche geschrieben werden.
Bereichsangaben der Quell- und der Zieltabelle sind identisch.
Das ganze soll durch ein Makro erledigt werden.
Die Zieltabellen in der Masterarbeitsmappe sind bereits vorhanden.
Es ist unerheblich ob später die Quelle der Daten festzustellen ist.
Gruß
Jochen
Anzeige
AW: Makro dauert recht lange
11.03.2011 15:57:16
Jürgen
Hallo Frank,
mir ist nicht ganz klar, warum Du überhaupt ein Makro verwendest - reicht es nicht, wenn Du in den Zielzellen eine externe Zellverknüpfung (also eine Formel wie "=[Quelle.xls]Tabelle1!$C$14") einsetzt?
Gruß, Jürgen
AW: Makro dauert recht lange
11.03.2011 17:06:59
Frank
Hallo zusammen
Danke für die prompte Antwort.
@ Jürgen:Es sollte schon über VBA aktualisiert werden, da bei einer Formellösung jedesmal eine Aktualisierung stattfindet wenn die Datei geöffnet wird.
@ Jochen: Genauso sollte es sein. Die Quelle der Daten ist nicht ausschlaggebend.
Gruß Frank
AW: Makro dauert recht lange
11.03.2011 17:50:17
Jürgen
Hallo Frank,
dann gäbe es noch alternativ die Möglichkeit, über "Daten - externe Daten importieren" Abfragen in Deine Zieldatei einzufügen und diese dann per Makro zu aktualisieren. In den Quelldateien wären dazu benannte Bereiche für die zu importierenden Daten hilfreich.
Gruß, Jürgen
Anzeige
AW: Makro dauert recht lange
11.03.2011 18:13:30
Frank
Hallo Jürgen
Danke für die Antwort, aber das ist eigentlich nicht das, wonach ich suche. Die VBA Lösung wäre mir da schon lieber.
Gruß Frank
AW: Makro dauert recht lange
11.03.2011 19:19:02
jowe
Jürgen,
Hast Du's schon mal so probiert:
Sub sammeln()
'Voraussetzung;
'Die Pfade und Namen der auszulesenden Arbeitsmappen
'stehen in der Tabelle "Dateiliste" in der Materarbeitsmappe
'Hier erstellt das Makro die neuen Tabellenblätter
Dim wb As Workbook
Dim sh, shListe As Worksheet
Dim f As Long
Set wb = ThisWorkbook
Set sh = wb.Sheets(1)
Set shListe = wb.Sheets("Dateiliste")
For f = 2 To 9
wb.Sheets.Add After:=Worksheets(Worksheets.Count)
Workbooks.Open shListe.Cells(f, 1)
Union(Sheets(1).Range("A1:F1"), Range("K1:Z1")). _
Copy Destination:=wb.Sheets(wb.Sheets.Count).Range("A1")
ActiveWorkbook.Close savechanges = False
Next
End Sub
Gruß
Jochen
Anzeige
AW: Makro dauert recht lange
12.03.2011 10:43:22
Frank
Hallo Jochen
Danke für deine Mühen.
In deinem Code werden neue Arbeitsblätter erzeugt, was aber in meinem Fall nicht erwünscht ist.
Mein Problem ist dies, dass es 8 identische Arbeitsmappen auf 8 verschiedenen Servern gibt. Ich bin der einzige, der Zugang zu den 8 Servern hat. Daher funktioniert auch nicht die Formellösung.
Jeder Bearbeiter trägt Daten in seine Mappe ein (eben in dem bestimten Bereich) und ich könnte diese dann zusammenführen. Das heißt, ich öffne eine Mappe und per Schaltfläche frage ich die anderen Mappen ab und lasse die Daten eintragen, so dass alle Mappen auf dem selben Stand sind. Automatisch abfragen geht ja nicht, weil die anderen Mitarbeiter keinen Zugriff auf die anderen Mappen haben. Da fehlen ihnen die Netzwerkrechte.
Mit eine Abfrage kontrolliere ich auch, das nicht die Daten gegenseitig überschrieben werden.
Wie gesagt, mit meinem Code funktioniert das eigentlich, nur dauert das bei der Vielzahl der zu übertragenden Zellen recht lange.
Ich hoffe, ich konnte mich da deutlich genug ausdrücken. Ist manchmal schwierig so was zu formulieren.
Gruß Frank
Anzeige
AW: Makro dauert recht lange
12.03.2011 11:19:52
Gerd
Hallo Frank,
dann mache es halt wie vorgeschlagen mit temporär gesetzten Formeln per Code.
Beispiel:
With ActiveWorkbook.Worksheets(1).Range("A2:B2")
.FormulaArray = "='c:\temp\[Mappe1.xls]Tabelle1'!A3:B3"
.Value = .Value
End With
Gruß Gerd
AW: Makro dauert recht lange
12.03.2011 12:49:34
Frank
Hallo Gerd
Danke für den Tip
Ich habe das mal in meiner Testdatei ausprobiert und es funktioniert. Am Montag werde ich das mal an die Originaldatei anpassen, dann sehe ich weiter.
Allen hier im Forum noch einmal meinen herzlichsten Dank.
Gruß Frank

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige