Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

was ist falsch??

Betrifft: was ist falsch?? von: Andy81
Geschrieben am: 17.08.2004 12:53:06

an die Könner..
was ist an der Schleife im folgendem Code falsch? Eigentlich funtioniert der Vergleich der Dateinamen (siehe If..) aber sobald i=1 und die Datei gespeichert ist, sollte im nächsten Durchlauf i=2 werden. Das Problem ist, dass i=1 bleibt und Excel immer wieder fragt ob die Datei mit dem Zusatz 1 überschrieben werden soll. Was läuft da schief?

Wie könnte man die Schleife ändern, damit sie nur solange durchläuft bis der vorhandenen Dateiname ungleich dem neuen Dateinamen ist?

Sub Datei_Speichern()

Dim sFile As String
Dim SPath As String
Dim i As Integer

ActiveWorkbook.Sheets("PKR blanko").Copy
Destination = NewWorkbook

i = 0
Do Until i = 3
ActiveWorkbook.Sheets("PKR blanko").Range("D1").Value = "Rev_" & i
sFile = ActiveWorkbook.Sheets("PKR blanko").Range("A1").Value & "_" & Range("D1").Value
sFile = Format(sFile) & ".xls"  'Format der Datei: .xls
SPath = "o:\...\fertig\"
If Dir("o:\...\fertig\*.xls") = sFile _
Then i = i + 1 _
Else: ActiveWorkbook.SaveAs SPath & sFile
Loop

ActiveWorkbook.Close SaveChanges = False
MsgBox "PKR abgeschlossen und gespeichert!"

End Sub

Vielen Dank
Andy81
  


Betrifft: AW: was ist falsch?? von: Andreas Walter
Geschrieben am: 17.08.2004 12:58:16

Du erhöhst i nicht.
Do Until i = 3
ActiveWorkbook.Sheets("PKR blanko").Range("D1").Value = "Rev_" & i
sFile = ActiveWorkbook.Sheets("PKR blanko").Range("A1").Value & "_" & Range("D1").Value
sFile = Format(sFile) & ".xls" 'Format der Datei: .xls
SPath = "o:\...\fertig\"
If Dir("o:\...\fertig\*.xls") = sFile Then
i = i + 1
Else
ActiveWorkbook.SaveAs SPath & sFile
i=i+1
end if
Loop

oder
...
If Dir("o:\...\fertig\*.xls") <> sFile Then
ActiveWorkbook.SaveAs SPath & sFile
end if
i=i+1
Loop

Do Until i=3
Loop
wird NIE fertig.

For i=1 to 3
Next
läuft dreimal durch


  


Betrifft: Danke. Aber.. von: Andy81
Geschrieben am: 17.08.2004 13:30:35

Vielen Dank.
Jetzt habe ich aber noch ein Problem mit der Schleife.. Da der zu prüfende Dateinamen an letzter stelle eine Zahl (y) enhält, soll die Schleife nur solange laufen bis i grösser y ist.

Sub()
...

i = 0
Do Until i grösser y
ActiveWorkbook.Sheets("PKR blanko").Range("D1").Value = "Rev_" & i
sFile = ActiveWorkbook.Sheets("PKR blanko").Range("A1").Value & "_" & Range("D1").Value
sFile = Format(sFile) & ".xls" 'Format der Datei: .xls
SPath = "o:\...\fertig\"
If Dir("o:\...\fertig\*")& y & ".xls" <> sFile Then
ActiveWorkbook.SaveAs SPath & sFile
end if
i=i+1
Loop
...
End Sub

DAnke
Andy81


  


Betrifft: AW: Danke. Aber.. von: Andreas Walter
Geschrieben am: 17.08.2004 14:22:08

Sub()
...

i = 0
Do Until i grösser y
ActiveWorkbook.Sheets("PKR blanko").Range("D1").Value = "Rev_" & i
sFile = ActiveWorkbook.Sheets("PKR blanko").Range("A1").Value & "_" & Range("D1").Value
sFile = Format(sFile) & ".xls" 'Format der Datei: .xls
SPath = "o:\...\fertig\"
If Dir("o:\...\fertig\*")& y & ".xls" <> sFile Then
ActiveWorkbook.SaveAs SPath & sFile
end if
i=i+1
Loop
...
End Sub

Jetzt habe ich es ein bisschen näher angesehen.
Irgendwie bis Du hier auf einem falschen Weg, glaube ich.
Hast Du angesehen, was
Dir("o:\...\fertig\*")
zurückbringt? Die Antwort ist eine Dateiname, z.B.
mappe1.xls
Aber dann addierst Du
& y & ".xls"
dazu um mit sfile zu vergleichen. Ist das richtig?
Du vergleichst mappe1.xls4711.xls mit was in sfile ist?
Und was ist "y" sowieso überhaupt?

Vermutlich willst Du die Datei unter einer Laufenden-Nummer ablegen oder? Und willst zuerst feststellen, welche die höchste Nummer ist? DIR() bringt Dir aber genau eine Datei zurück.

Folgendes ist ungetestet
Sub()
...

i = 0
Do
ActiveWorkbook.Sheets("PKR blanko").Range("D1").Value = "Rev_" & i
sFile = ActiveWorkbook.Sheets("PKR blanko").Range("A1").Value & "_" & Range("D1").Value
sFile = Format(sFile) & ".xls" 'Format der Datei: .xls
SPath = "o:\...\fertig\" ---------- muss EIN Vereichnis sein oder
If Dir(SPath & sfile) ="" Then
ActiveWorkbook.SaveAs SPath & sFile
exit do
end if
i=i+1
Loop
...
End Sub


  


Betrifft: AW: Danke. Aber.. von: Andy81
Geschrieben am: 17.08.2004 14:50:21

Super... Genau das hab ich gebraucht.
..und ich sitz den halben Tag und überleg..
Vielen, Vielen Dank

gruß
Andy


  


Betrifft: AW: was ist falsch?? von: Günter
Geschrieben am: 17.08.2004 13:54:52

Hallo Andy,

hier eine Lösung die funktionieren muss:

Sub Schleife_Test()

Dim sFile As String
Dim SPath As String
Dim i As Integer

ActiveWorkbook.Sheets("PKR blanko").Copy
Destination = NewWorkbook

i = 0
Do Until i = 3
ActiveWorkbook.Sheets("PKR blanko").Range("D1").Value = "Rev_" & i
sFile = ActiveWorkbook.Sheets("PKR blanko").Range("A1").Value & "_" & Range("D1").Value
sFile = Format(sFile) & ".xls"  'Format der Datei: .xls
SPath = "c:\Allgemeines\"
If Dir("c:\Allgemeines\*.xls") <> sFile Then
   ActiveWorkbook.SaveAs SPath & sFile
End If
i = i + 1
Loop

ActiveWorkbook.Close SaveChanges = False
MsgBox "PKR abgeschlossen und gespeichert!"

End Sub



Gruss,
Günter


  


Betrifft: AW: was ist falsch??_Günter von: Andy81
Geschrieben am: 17.08.2004 14:00:28

Hallo Günter!
der Vorschlag von Andreas hat einwandfrei funtioniert. Nun möchte ich die Schleife noch
ändern, so dass sie beendet wird wenn i größer y. siehe Antwort "Danke. Aber.."

Andy81


 

Beiträge aus den Excel-Beispielen zum Thema "was ist falsch??"