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

Viele Datensätze schnell importieren

Viele Datensätze schnell importieren
26.05.2009 15:23:23
Markus
Hallo zusammen,
ich habe ein kleines (eigentlich großes) Problem. Tino war so nett und hat mir ein funktionierenden Code zum importieren von Exceldaten geschrieben. Dieser ist hier https://www.herber.de/bbs/user/61337.xls einsehbar. Lediglich das Modul wurde von mir etwas angepasst (der Modul-Code kommt am Ende). Beim ursprünglichen Code bin ich vom importieren der Datensätze von A2:AK2 ausgegangen. Dies hat sich geändert und ist nun von A2:EA2. Dies habe ich soweit angepasst. Nur dauert der Import für ~60 Dateien rund 6 Minuten. Habe das ganze mal mit 3.000 Dateien getestet und nach 2 1/2 Stunden warten abgebrochen. Die Dateien sind alle gleich aufgebaut und befinden sich im gleichen Ordner. Importiert werden die Daten aus dem Tabellenblatt "Schlüsseldaten". Hat jemand eine Idee was ich evtl. falsch gemacht habe oder dauert es wirklich so lange? Gibt es Alternativen?
angepasster Modul-Code:
Option Explicit

Sub Start()
UserForm_Anzeige.Show
End Sub



Sub TestLeseDaten()
Dim sFiles As String
Dim strPfad As String, Listbox
Dim strFormel As String
Dim A As Long, AA As Long
Dim iCalc As Integer
'hier den Pfad angeben *****************************
strPfad = "H:\Aufträge\" & Application.InputBox("Bitte den Importmonat eingeben!", _
"Importieren", Format(Date - Day(Date), "MMMM")) & "\"
UserForm_Anzeige.Repaint
sFiles = Dir$(strPfad & "*.xls")
With Application
.ScreenUpdating = False
.EnableEvents = False
iCalc = .Calculation
.Calculation = xlCalculationManual
On Error GoTo ErrFehler:
AA = 2
Do While sFiles  ""
For A = 1 To 131
strFormel = "'" & strPfad & "[" & sFiles & "]Schlüsselnummern'!R2C" & A
Cells(AA, A).Value = ExecuteExcel4Macro(strFormel)
Next A
AA = AA + 1
sFiles = Dir$()
Loop
ErrFehler:
.ScreenUpdating = True
.EnableEvents = True
.Calculation = iCalc
End With
Unload UserForm_Anzeige
If Err.Number  0 Then MsgBox Err.Number & Chr(13) & Chr(13) & Err.Description, vbCritical, " _
Fehler"
End Sub


Danke fürs schauen!
Gruß Markus

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Viele Datensätze schnell importieren
26.05.2009 16:23:00
Rudi
Hallo,
ich würde einfach die entsprechenden Formeln in die Zellen schreiben und dann umwandeln.
Ungetestet:

Sub TestLeseDaten()
Dim sFiles As String
Dim strPfad As String, Listbox
Dim strFormel As String
Dim A As Long, AA As Long
Dim iCalc As Integer
Dim iCounter As Integer
Dim arrFormulas()
'hier den Pfad angeben *****************************
strPfad = "H:\Aufträge\" & Application.InputBox("Bitte den Importmonat eingeben!", _
"Importieren", Format(Date - Day(Date), "MMMM")) & "\"
UserForm_Anzeige.Repaint
sFiles = Dir$(strPfad & "*.xls")
Do While sFiles  ""
iCounter = iCounter + 1
sFiles = Dir
Loop
If iCounter > 0 Then
ReDim arrFormulas(1 To iCounter, 1 To 131)
With Application
.ScreenUpdating = False
.EnableEvents = False
iCalc = .Calculation
.Calculation = xlCalculationManual
On Error GoTo ErrFehler:
sFiles = Dir$(strPfad & "*.xls")
AA = 1
Do While sFiles  ""
For A = 1 To 131
strFormel = "'" & strPfad & "[" & sFiles & "]Schlüsselnummern'!R2C" & A
arrFormulas(AA, A) = strFormel
Next A
AA = AA + 1
sFiles = Dir$()
Loop
With Cells(2, 1).Resize(iCounter, 131)
.FormulaR1C1 = arrFormulas
.Value = .Value
End With
ErrFehler:
.ScreenUpdating = True
.EnableEvents = True
.Calculation = iCalc
End With
End If
Unload UserForm_Anzeige
If Err.Number  0 Then MsgBox Err.Number & Chr(13) & Chr(13) & Err.Description, vbCritical, " _
Fehler "
End Sub


Gruß
Rudi

Anzeige
AW: Viele Datensätze schnell importieren
26.05.2009 16:53:16
Markus
Hallo Rudi,
habe den Code mal eingesetzt, es kommt aber ein Syntaxfehler bei folgender Passage:
If Err.Number 0 Then MsgBox Err.Number & Chr(13) & Chr(13) & Err.Description, vbCritical, " _
Fehler "
Grüße Markus
AW: Zeilenumbruch rausnehmen
26.05.2009 16:58:36
Daniel
Hi
mach den Zeilenumbruch in der Zeile raus (Leerzeichen - Unterstrich - Zeilenumbruch) und füge die getrennte Befehlszeile zu einer zusamen.
der VBA-Editor kann mit den Zeilenumbrüchen, die von der Herber-Forensoftware automatisch erzeugt werden, nicht umgehen.
Gruß, Daniel
AW: Datein zum Importieren öffnen
26.05.2009 16:56:19
Daniel
Hi
das Problem ist, daß der Zugriff auf geschlossene Dateien ziemlich langsam ist.
daher dürfte es am schnellsten sein, die Datei zu öffnen, die Daten zu kopieren und dann die Datei wieder zu schließen:

Sub TestLeseDaten()
Dim sFiles As String
Dim strPfad As String, Listbox
Dim iCalc As Integer
Dim iCounter As Integer
Dim shZiel As Worksheet
Dim wbQuelle As Workbook
'hier den Pfad angeben *****************************
strPfad = "H:\Aufträge\" & Application.InputBox("Bitte den Importmonat eingeben!", _
"Importieren", Format(Date - Day(Date), "MMMM")) & "\"
UserForm_Anzeige.Repaint
Set shZiel = ActiveSheet
shZiel.Cells.ClearContents
With Application
.ScreenUpdating = False
.EnableEvents = False
iCalc = .Calculation
.Calculation = xlCalculationManual
On Error GoTo ErrFehler:
sFiles = Dir$(strPfad & "*.xls")
Do While sFiles  ""
Set wbQuelle = Workbooks.Open(strPfad & sFiles, UpdateLinks:=False, ReadOnly:=True)
wbQuelle.Sheets("Schlüsselnummern").Range("A2").Resize(1, 131).Copy
shZiel.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
wbQuelle.Saved = True
wbQuelle.Close
sFiles = Dir$()
Loop
ErrFehler:
.ScreenUpdating = True
.EnableEvents = True
.Calculation = iCalc
End With
Unload UserForm_Anzeige
If Err.Number  0 Then MsgBox Err.Number & Chr(13) & Chr(13) & Err.Description, vbCritical, " _
Fehler "
End Sub


Gruß, Daniel
ps. mangels geeigneter Beispieldaten nicht getestet

Anzeige
AW: Datein zum Importieren öffnen
26.05.2009 17:33:06
Markus
@ Rudi
So, habe mal getestet. Also, wenn ich den Unterstrich weg mache, dann wenn die Zellbezüge aber nicht deren Inhalt importiert. Das geht ratzfatz, aber so bekomme ich den Inhalt leider nicht.
@Daniel
Ich werde nun jedesmal gefragt, aber der kopierte Inhalt für spätere Zwecke gespeichert werden soll. Diese Frage erscheint bei jeder Excel-Datei die geöffnet und geschlossen wird. Wenn ich ja sage, werden die Daten importiert. Bei ~ 3000 + X Daten .......oje........
AW: Datein zum Importieren öffnen
26.05.2009 18:03:19
Daniel
HI
dann schau dir mal die Funktion "Application.DisplayAlerts = False/True" in der Hilfe an.
damit kannst du die Meldung unterdrücken.
Gruß, Daniel
Anzeige
AW: vor dem Schließen mit CutCopyMode = False
26.05.2009 22:29:52
Daniel
HI
oder probier mal alternativ zu meinem ersten Vorschlag vor dem Schließen der Datei den Befehel

Application.CutCopyMode = False 


einzubauen. Das könne auch helfen, die Meldung zu unterdrücken.
gruß, Daniel

AW: Datein zum Importieren öffnen
26.05.2009 23:55:56
Rudi
Hallo,
vor eine Formel gehöt natürlich noch ein =

For A = 1 To 131
strFormel = _
"='" & strPfad & "[" & sFiles & "]Schlüsselnummern'!R2C" & A
arrFormulas(AA, A) = strFormel
Next A


Gruß
Rudi

AW: Datein zum Importieren öffnen
27.05.2009 10:26:27
Markus
Guten Morgen zusammen,
wollte mich schon mal melden und Danke für die Hilfe sagen. Leider ist das Laufwerk mit den gespeicherten Datensätzen abgeschmiert, zumindest der Zugriff darauf. Sobald es läuft werde ich es gleich testen und Info geben.
Grüße
Markus
Anzeige
AW: Datein zum Importieren öffnen
27.05.2009 15:23:42
Markus
So, habe mal die Ergänzungen eingefügt und getestet.
@Rudi beim importieren wird mir jetzt in jedem Feld folgendes angezeigt: #NAME?
@Daniel habe jetzt Application.CutCopyMode = False eingefügt und die Aufforderung zum behalten der gespeicherten Daten wird nicht mehr angezeigt und die Daten werden importiert. Dauer ca. 100 Datensätze pro Minute. Besteht die Möglichkeit, dass das Öffnen und Schließen der Datei im Hintergrund erfolgt. Es wird mir immer auf der Taskleiste die Datei ein- und ausgeblendet.
Aber schonmal DANKE für die Hilfe!
Markus
Öffnen mit GetObject
27.05.2009 15:31:41
Daniel
Hi
wenn du die Datei mit

Set WB = GetObject(Pfad und Dateiname.xls)


anstelle von .Workbook.Open() öffnest, sollte das Öffnen im Hintergrund geschehen.
bei GetObject werden außder dem Pfadnamen keine weitern Parameter angegeben.
Gruß, Daniel

Anzeige
AW: Öffnen mit GetObject
27.05.2009 16:31:50
Markus
Hi Daniel,
bitte sehs mir nach, aber ich bin wirklich in Sachen VBA ne kleine Leuchte......
Ich habe das Workbook.Open wie folgt ersetzt:
Set wbQuelle = GetObject(strPfad, "*.xls")
Wahrscheinlich stimmt dies nicht, da ich jetzt eine Fehlermeldung erhalte. Was habe ich falsch gemacht?
Grüße
Markus
AW: Öffnen mit GetObject
27.05.2009 17:09:01
Daniel
Hi
das war nur ein schnelles Beispiel von mir, die Variablenbenennungen und Parameter musst du schon noch richtig anpassen:
Set wbQuelle = GetObject(strPfad & sFiles)
Gruß, Daniel
AW: Öffnen mit GetObject funktioniert
27.05.2009 18:22:54
Markus
Hallo Daniel,
naja, dann war ich ja halbwegs auf der richtigen Spur...........
Es funktioniert und es werden mir die Datensätze beim öffnen nicht mehr eingeblendet. Bei 3000 Datensätzen wird es zwar zeitmäßig etwas dauern, aber ist besser als einzeln abgetippt.
Danke für die Hilfe auch an Rudi!
Grüße, Markus
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige