Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

vba code beschleunigen
#1
Hallo zusammen,

ich erzeuge mit einem Makro eine Dateiliste in Excel.

Danach benutze ich via vba einen Code, der aus den aufgelisteten Dateien bestimmte Werte aus verschiedenen Arbeitsblättern ausliest und neben den aufgelisteten Dateinamen einträgt (in weiteren Zellen).

Das Makro funktioniert soweit fehlerfrei, allerdings dauert es eine Ewigkeit (mehr als 15 Minuten) bis die Aktion beendet ist.

Ich muss anmerken, dass es sich hier um eine Dateiliste handelt, die bis zu 4.000 Excel-Dateien umfasst.

Siehe nachfolgenden Code. Lässt sich das beschleunigen?


Code:
Private Function GetValue(pfad, datei, blatt, zelle)
'** Daten aus geschlossener Arbeitsmappe auslesen

'*** Dimensionierung der Variablen
Dim Ausl As String

'Sicherstellen, dass das datei vorhanden ist
If Right(pfad, 1) <> "\" Then pfad = pfad & "\"
If Dir(pfad & datei) = "" Then
GetValue = "datei Not Found"
Exit Function
End If

'** Das Argument erstellen
Ausl = "'" & pfad & "[" & datei & "]" & blatt & "'!" & Range(zelle).Range("A1").Address(, , xlR1C1)

'** Auslesen über Excel4Macro
GetValue = ExecuteExcel4Macro(Ausl)

End Function

__________________________________________________________________________________
Sub Zellelesen()

'Beschleunigung ein
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With

'** Dimensionierung der Variablen
    Dim pfad As String, datei As String, blatt As String, zelle As String
   
'** Angaben zur auszulesenden Zelle
    pfad = "X:\Ankdg\Erledigt\"
    blatt1 = "Info"
    blatt2 = "ETK"
    bezug1 = "E11"
    bezug2 = "E13"
    bezug3 = "C4"
    bezug4 = "B18"
    bezug5 = "C7"
       
    For i = 2 To Range("K1")
        datei = Range("B" & i)
        Range("C" & i).Value = GetValue(pfad, datei, blatt1, bezug1)
        Range("D" & i).Value = GetValue(pfad, datei, blatt1, bezug2)
        Range("E" & i).Value = GetValue(pfad, datei, blatt2, bezug3)
        Range("F" & i).Value = GetValue(pfad, datei, blatt1, bezug4)
        Range("G" & i).Value = GetValue(pfad, datei, blatt2, bezug5)
    Next i

'Beschleunigung aus
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With

End Sub 


Vielen Dank für die Hilfe vorab! - bleibt gesund!
Viele Grüße
Rumo0815
------------------------
Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.  19
Antworten Top
#2
Verwendung von Code Tags ist obligatoir im Forum.

Das hochladen einer repräsentative Datei sehr wünschenswert.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#3
Hallo snb,
hochladen der Datei macht wenig Sinn, weil diese auf ein spezielles auf einem Server befindliches Verzeichnis zugreift.
Die würde auf jedem anderen Rechner nur Fehler anzeigen.

Dass ich den Code nicht obligatoir gepostet habe liegt daran, dass ich keine Ahnung habe, wie das geht. SORRY!

Wenn hier dennoch jemand im Forum helfen kann, wäre ich sehr dankbar.
Viele Grüße
Rumo0815
------------------------
Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.  19
Antworten Top
#4
Hi,

...lies die Daten mit Power Query ein...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#5
Code:
hochladen der Datei macht wenig Sinn, weil diese auf ein spezielles auf einem Server befindliches Verzeichnis zugreift.

Die würde auf jedem anderen Rechner nur Fehler anzeigen.
Das stimmt doch gar nicht: nur die Links sollten nicht 'updated' werden.

Die Struktur eines Arbeitsblattes ist nicht völlig unwichtig beim beschleunigen.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#6
Hallöchen,

manchmal geht es auch schneller wenn Du einfach eine Formel setzt und diese anschließend durch das Ergebnis ersetzt ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
zur Power Query fehlen mir die Kenntnisse, leider.
Aber zum Begutachten habe ich die Excel-Datei hochgeladen. Ich glaube allerdings nicht, dass man damit so viel probieren kann.
Falls aber jemand eine zündende Idee hat, dann würde ich mich sehr freuen!
Viele Grüße, bleibt gesund!


Angehängte Dateien
.xlsm   AnkdgDispo.xlsm (Größe: 154,77 KB / Downloads: 3)
Viele Grüße
Rumo0815
------------------------
Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.  19
Antworten Top
#8
Warum gibt es so viele verschiedene Dateien ?
z.B

44546_74_Beckers__Ul.xlsm
44546_77_Beckers__Ul.xlsm
44546_83_Beckers__Ul.xlsm
44546_88_Beckers__Ul.xlsm
44546_91_Beckers__Ul.xlsm
44546_98_Beckers__Ul.xlsm

Sind sie ähnlich ?
Es wäre besser diese Daten in einer Datei zu speichern.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#9
Jede Datei beinhaltet mehrere Arbeitsblätter, die eine Datenbasis für eine Produktionssteuerung darstellen.
In diesen Dateien sind individuelle Parameter für einen einzelnen Auftrag gespeichert.
Die Struktur jeder Datei ist identisch, der Inhalt immer gleich.

Ich möchte jetzt aus diesen Dateien eine Liste erzeugen und zu jeder Datei einige Zellen gezielt auslesen.
z.B. aus unterschiedlichen Dateien aus dem jeweils gleichen Arbeitsblatt die gleiche Zelle. (Da steht z.B. ein Kundenname drin, oder ein Liefertermin oder ein Name eines Sachbearbeiters.

Das Problem ist, dass in dem Quellverzeichnis ca. 3.500 solcher Excel-Dateien liegen und das Auslesen enorm lange dauert.

Das Ganze Szenario ist eine "Datenbank für Arme"
Viele Grüße
Rumo0815
------------------------
Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.  19
Antworten Top
#10
Hallo

zum Thema Produktionsdaten in iner Tabelle erinnere ich mich an einen Thread in einem Fourm? aus der Schweiz.

Dort hatte eine Firma für die Prokuktion über 2700 verschieden Daten in einer einzigen Tabelle. Es waren mindestens 25-30 Spalten.
Ich glaube es ging um die Details von Glasherstellung, erinnere mich aber nicht mehr wann das war, welcher Thread, in welchem Foum das war?

Ich will damit nur sagen das man solche Daten, wenn sie vom Datenaufbau identisch sind, am besten in einer Tabelle speichert.
Es waren feste Daten als Text, keine Formeln!  Und viele Zahlen die sich auf die Produktion bezogen.  Mit 2700 eindeutigen ID Nummern.

mfg Gast 123
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste