Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
804to808
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
804to808
804to808
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Geschwindigkeitsprobleme

Geschwindigkeitsprobleme
25.09.2006 13:24:43
Peter
Guten Tag
Nachfolgender Code beschert mir Geschwindigkeitsprobleme. Ich importiere ca. 150 Zeilen aus anderen geschlossenen Dateien. Das Prozedere dauert etwa 3-4 Minuten.
Sieht jemand einen Anhaltspunkt, wie optimiert werden könnte?
Danke für eine Rückmeldung.
Peter
Option Explicit
Sub DatenEintragen()
ThisWorkbook.Activate
GetMoreSpeed
On Error GoTo ErrExit
Dim Bereich As Range, Feld As Range
Dim QArea As Range, QCell As Range
Dim p$, f$, r$, n%, s$, m%, zeile$
Dim Anzahl$
s = "Export"
n = Cells(65536, 1).End(xlUp).Row 'ermittelt letzten Eintrag in Spalte A (Pfad)
m = Cells(2, 256).End(xlToLeft).Column 'ermittelt letzten Eintrag in Zeile 2 (Ref zu Import)
r = Range("E4") 'legt ersten Eintrag in Zeile 3 fest (Ref zu Import)
Set Bereich = Range("A4:A" & n) 'Bereich = alle Zellen mit Pfadangabe
Set QArea = Range(Cells(2, 5), Cells(2, m)) 'Bereich K2 : ?2 = alle Zellen mit Ref Angabe zu Import
Anzahl = 0
For Each Feld In Bereich
p = Feld.Value
f = Feld.Offset(0, 1)
zeile = Feld.Offset(0, 2)
Debug.Print zeile
For Each QCell In QArea
r = QCell.Value & zeile
Debug.Print r
Cells(Feld.Row, QCell.Column) = getvalue(p, f, s, r)
Application.StatusBar = "Daten werden importiert aus " & p & f & " - Eintrag in Zeile " & Anzahl + 5
Next
Anzahl = Anzahl + 1
Next
Application.StatusBar = "Import abgeschlossen"
ErrExit:
GetMoreSpeed 0
End Sub

Private Function getvalue(path, File, sheet, ref)
'retrieves a value from a closed workbook
Dim arg As String
'make sure the file exists
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & File) = "" Then
getvalue = "File not found"
Exit Function
End If
'create the argument
arg = "'" & path & "[" & File & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
''Debug.Print arg
'execute an xlm macro
getvalue = ExecuteExcel4Macro(arg)
End Function

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

Betreff
Datum
Anwender
Anzeige
AW: Geschwindigkeitsprobleme
25.09.2006 14:02:19
Dan
Hi, versuch alle die 'Debug.Print' Anweisungen auskomentieren, und versuch auch Application.StatusBar calls auskomentieren. Dann teste es noch mal. Hat das geholfen? Gruss Dan cz.
AW: Geschwindigkeitsprobleme
25.09.2006 14:41:57
ingUR
Hallo, Peter,
es ist wohl nicht notwendig, jedesmal aufs Neue die Existenz der Datei, aus der Du lesen wilst, abzufagen.
Führe die Abfrage, ob die Datei existiert, im Haubptprogramm vor dem Start der Schelifen durch und blide dann die festen String-Teile von arg, aus denen Du dann mit der Adresse in der Schleife nur noch die Referenz bildest. Die Berechtigung der Funktion selbst wird dann zu prüfen sein.
Gruß,
UWe
Anzeige
AW: Geschwindigkeitsprobleme
25.09.2006 15:07:41
Peter
Vielen Dank.
Werde ich - nach meinen Ferien - umstellen und ausprobieren.
Freundlicher Gruss
Peter
AW: Geschwindigkeitsprobleme
25.09.2006 15:23:47
Luschi
Hallo Peter,
ich glaube nicht, daß Du damit wesentliche Fortschritte bei der Erhöhung der Geschwindigkeit erzielst.
Da Microsoft ja auch nicht zaubern kann, muß also auch beim Excel4Macro eine Verbindung zur geschlossenen Datei hergestellt werden.
Dies geschieht per DDE-Datenzugriffstechnik. Dies geshieht über eine einzigen Kanal.
Da Du in der Schliefe jedesmal neu die Informationen (Dateinamen, Tabellenname, Zellenname) losschickst, wird auch jedesmal der Kanal neu aufgebaut und dann der Datenwert gelesen. Das ist so, als ob man jedes Brötchen einzeln vom Bäcker holt.
Was für das holen von einem Wert aus 1 geschlossenen Datei gut und richtig ist, muß also bei der Verarbeitung von "Massendaten" nicht unbedingt falsch sein; aber schnell ist es auf keinen Fall.
Mache Dich also doch lieber mit dem Gedanken vertraut, die Datei, aus der man Daten holen will, per Vba zu öffnen, dann die Daten auslesen und die Datei wieder zu schließen.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Geschwindigkeitsprobleme
25.09.2006 21:41:33
Peter
Hallo Luschi
Vielen Dank für die Rückmeldung und die fundierte Hintergrundinformation (von dir nicht das erste Mal !!). Schlussendlich war der Import dann doch noch recht ordentlich schnell. Ich habe nämlich die Dateien vom Server auf meinen lokalen PC gezügelt und das hast gewirkt (vielleicht auch nur zufällig ...?).
A propos Geschwindigkeit: Kannst du mir sagen, ob meine Vermutung richtig ist, dass bei "Summewenn-Abfragen" mit mehreren Bedingungen gemäss Link ( http://excelformeln.de/formeln.html?welcher=61 ) diejenige ohne Matrixformel die schnellste ist?
Auf was ist es zurückzuführen, wenn die Formeln erst nach einer Weile (z.T. mehr bis eine Minute) neu gerechnet werden und trotzdem in der Statuszeile "Berechnen" nicht angezeigt wird?
Herzlichen Dank für alle Unterstützung!
Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige