2016-06-01 3 views
0

Ich bereite Excel-Makro vor, um Daten aus der Eingabedatei zu lesen und sie je nach Bedingung in zwei verschiedene Dateien auszugeben.Schreiben in die Dateien gleichzeitig in Excel Makro

Code Snippet wie unten

fileName1="test1.txt" 
    fileName2="test2.txt" 
    file1 = FreeFile() 
    file2 = FreeFile() 

    Open fileName1 For Output As file1 
    Open fileName2 For Output As file2 

    If Condition1=true Then 
     sWrite1="Write to file 1" 
     print #file1,sWrite1 
    Else 
     sWrite2="Write to file 2" 
     print #file2,sWrite2 
    End If 

    Close #file1 
    Close #file2 

Erwartete Ausgabe ist "Write 1 in Datei" sollte file1 und "Write 2 in Datei" gehen sollte Datei2 sein.

Aber nach dem Ausführen des Makros, sowohl "In Datei 1 schreiben" und "In Datei 2 schreiben" wurden in Datei2 geschrieben und Datei1 ist leer.

Kann mir bitte jemand helfen, wie man gleichzeitig in zwei Dateien schreibt.

+0

Schauen Sie sich die Zeile 'FileName1 öffnen für Ausgabe als Datei1' genauer an und darunter haben Sie wieder' Open fileName1', was zu Problemen führen kann. –

Antwort

3

FreeFile() gibt die nächste Dateinummer zum Öffnen zur Verfügung. Wenn Sie es wie Sie zweimal hintereinander aufrufen, wird in beiden Fällen der gleiche Wert (wahrscheinlich 1) zurückgegeben, da Sie die Dateinummer noch nicht verwendet haben, sodass sie immer noch zum Öffnen verfügbar ist.

Stattdessen müssen Sie diese Dateinummer verwenden, bevor Sie erneut FreeFile() aufrufen.

ändern

file1 = FreeFile() 
file2 = FreeFile() 

Open fileName1 For Output As file1 
Open fileName2 For Output As file2 

zu

file1 = FreeFile() 
Open fileName1 For Output As file1 

file2 = FreeFile() 
Open fileName2 For Output As file2 

und es wird erwartet funktionieren.

1

Autsch, das ist ein Fehler in Excel, und einer, der repliziert werden kann. Ich bekomme Datei öffnen Fehler auf der Open-Anweisung.

Wechseln Sie zur Verwendung der Microsoft Scripting Runtime-Bibliothek, um simultane Schreibvorgänge auszuführen.

Sub Test2() 
    'Requires Tools->References->Microsoft Scripting Runtime 
    Dim fso As Scripting.FileSystemObject 
    Set fso = New Scripting.FileSystemObject 


    Dim txtOut(1 To 2) As Scripting.TextStream 
    Set txtOut(1) = fso.CreateTextFile("c:\temp\test1.txt") 
    Set txtOut(2) = fso.CreateTextFile("c:\temp\test2.txt") 

    txtOut(1).WriteLine "Hello 1" 
    txtOut(2).WriteLine "Hello 2" 

    txtOut(1).Close 
    txtOut(2).Close 

    Set txtOut(1) = Nothing 
    Set txtOut(2) = Nothing 
End Sub 
+0

Es ist kein Fehler (siehe meine Antwort), obwohl Ihr Rat zur Verwendung der Scripting Runtime immer noch gut ist. –