PDA

Vollständige Version anzeigen : VBA alle Dateien auslesen


NikeGT
26.09.2016, 11:42
Hallo,

ich hoffe, Ihr könnt einen VBA Neuling helfen.

Folgendes:
Ich möchte aus einem Ordner alle Excel Dateien (.xlsx) auslesen
Jedoch gibt es in dem Ordner zwei Testfälle, die ins eins zusammengefasst werden müssen, sprich ich muss zwei Excel Dateien öffnen, um die Daten zu kopieren und später in ein Word Dokument einfügen. Diese Dateien unterscheiden sich in ihrer Endung folgendermaßen:

Ich habe schon etwas zusammen gebastelt und hoffe, ihr könnt mir dabei helfen:

Dim ExcelTestfallFL As Object
Dim ExcelTestfallRR As Object
Dim PfadTestfall As String
Dim Auslesen As String

PfadTestfall = "C:\...\"
Auslesen1 = Dir(PfadTestfall & "*FL*ger.xlsx")
Auslesen2 = Dir(PfadTestfall & "*RR*ger.xlsx")

Do While Auslesen1 <> ""

Set ExcelTestfallFL = CreateObject("Excel.Application")
With ExcelTestfallFL
.Visible = True
.Workbooks.Open (PfadTestfall & Auslesen1)
End With

Set ExcelTestfallRR = CreateObject("Excel.Application")
With ExcelTestfallFL
.Visible = True
.Workbooks.Open (PfadTestfall & Auslesen2)
End With

With ExcelTestfallFL
.ActiveWorkbook.Close savechanges:=False
.Quit
End With

With ExcelTestfallRR
.ActiveWorkbook.Close savechanges:=False
.Quit
End With

Auslesen1 = Dir
Auslesen2 = Dir

Loop

Ich habe ein Problem mit dem Auslesen. Das Kopieren von Daten habe ich aus Übersichtlichkeit mal weggelassen. Das funktioniert aber ohne Probleme. Ich bekomme es nur nicht hin zwei Dateien gleichzeitig offen zu haben.

Vielen Dank für eure Hilfe :)

Fennek11
26.09.2016, 12:02
Hallo,

versuche es ohne "with":

(ungeprüft)


sub test()
dim WB1 as workbook
dim WB2 as workbook

set wb1 = workbooks.open(Pfad & Datei)

set wb2 = workbooks.open(Pfad & Datei)

'kopieren, nur ein Beispiel

wb1.sheets(1).cells(1,1) = wb2.sheets(1).cells(2,3)


mfg

NikeGT
26.09.2016, 12:18
Hallo,

vielen Dank für die schnelle Antwort.
Es geht mir darum, dass ich alle Dateien der Reihe nach aus einem Ordner öffne. Hierbei sollen verschiedene Dateien (in meinem Code mit FL und RR bei der Name gekennzeichnet) geöffnet werden. Ich bekomme sie nicht in meine Schleife hin.

haklesoft
26.09.2016, 12:25
Auslesen1 = Dir
Auslesen2 = Dir
Das geht so nicht. Erstelle Dir eine Liste mit den Treffern der einen Suchart, bevor Du Dich durch die Treffer der anderen Suchart hangelst.

NikeGT
26.09.2016, 13:25
Ja, das habe ich mitbekommen.

Aber ich habe glaube eine Lösung gefunden. Ich führe zuerst die erste Schleife aus und anschließend kommt die andere Schleife.
Aber ich wette es geht auch anders. Ich habe nur leider bisher nichts dazu gefunden.

NikeGT
26.09.2016, 16:20
Hey,

ich wollte nicht noch ein extra Thema aufmachen und hoffe, dass trotzdem wer diese Nachricht liest:

Ich habe das Problem, dass VBA den Wert aus der Zelle als Variable falsch abspeichert.
Zum Beispiel: Zahl in der Zelle: 0,0966666...67
als Variable: 9,666666....67

Es wird im Prinzip die ersten zwei Nullen weggelassen. Ich habe bisher die Datentypen String und Double probiert aber ohne Erfolg. Hat jemand noch einen Tipp?

Vielen Dank im voraus. :)

haklesoft
26.09.2016, 16:37
Wenn der Wert eine Prozentzahl darstellt, dann dividiere die Variable durch 100.

NikeGT
26.09.2016, 16:53
Ich habe das Problem gefunden:

Folgendes:
manche Zahlen haben unendlich viele Nachkomma Stellen.
Sie werden folgendermaßen abgekürzt: 9,3333333333333333E-02

Nun die Frage, wie kann ich diese Zahl anders ausgeben lassen. Ich möchte die Zahl in Word wiedergeben. :)

Hat sich erledigt. Vielen Dank für die schnelle Antwort. :)

rastrans
26.09.2016, 17:11
Hallo,

nochmal kurz zur Dir-Funktion (https://msdn.microsoft.com/de-de/library/office/gg278779(v=office.15).aspx)

Diese Funktion funktioniert global, d.h. du kannst diese nicht unabhänig in zwei separaten Prozeduren aufrufen! Einmal irgendwo DIR mit Parametern aufgerufen, dann gilt das nächste DIR ohne Parameter für das letzte DIR mit Parametern, egal wo es aufgerufen wurde!

Wenn du gleichzeitig mit mehreren Datein hantieren möchtest, dann solltest du das Scripting.FileSystemObject nutzen. Mit diesem kannst du dir mehrere Objekte in verschiedenen Variablen speichern und separat daruf zugreifen.

Viele Grüße
rastrans