Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Files in ein Verz kopieren (Fehler wenn Verz. vorhanden)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Files in ein Verz kopieren (Fehler wenn Verz. vorhanden) (991 mal gelesen)
thewolff
Mitglied



Sehen Sie sich das Profil von thewolff an!   Senden Sie eine Private Message an thewolff  Schreiben Sie einen Gästebucheintrag für thewolff

Beiträge: 140
Registriert: 03.06.2003

erstellt am: 30. Nov. 2009 20:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,

habe nachstehenden Code um ein Verzeichnis im Datumsformat zu erstellen und anschl. werden dort alle Files hineinverschoben. Das funktioniert ganz gut solange das Zielverz. nicht existiert.

--------------------------------------------------------------
Dim OName$
    VZ01 = "C:\Kunden\Anfragen\"
    bName = Format(Date, "yyyymmdd")
    MkDir VZ01 & bName
    Dim objFSO2 As Object, objFile As Object
    Set objFSO2 = CreateObject("Scripting.FileSystemObject")
    For Each objFile In objFSO2.GetFolder(VZ01).Files
        objFile.Move VZ01 & bName & "\"
    Next
--------------------------------------------------------------

Wie muss ich den Code abändern damit mein Makro nicht abbricht wenn das Verz. bereits vorhanden ist?

------------------
Gruß
    Marco

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 30. Nov. 2009 20:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für thewolff 10 Unities + Antwort hilfreich

Hallo Marco,

habs nicht 1:1 probiert und deswegen die Hochkommas, aber das Prinzip sollte rüberkommen:

Code:

Sub y()
    Dim objFSO2 As Object, objFile As Object
    Set objFSO2 = CreateObject("Scripting.FileSystemObject")
    If Not objFSO2.folderexists("d:\cad\1") Then
        Debug.Print "nö, gibts nich"
        'MkDir VZ01 & bName
    Else
        Debug.Print "mich gibts bereits"
'    For Each objFile In objFSO2.GetFolder(VZ01).Files
'        objFile.Move VZ01 & bName & "\"
'    Next
    End If
End Sub

HTHHope this helps (Hoffe, es hilft weiter) Nancy

[trekkedi: Eigentlich brauchst du nur die IF-Abfrage, ohne then-else. In obigen Code legt er zwar ein Verzeichnis an, kopiert wird aber erst ab else. Blödes Beispiel gewählt.
Also kurz so:

Code:

if not folderexists then mkdir folder

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

thewolff
Mitglied



Sehen Sie sich das Profil von thewolff an!   Senden Sie eine Private Message an thewolff  Schreiben Sie einen Gästebucheintrag für thewolff

Beiträge: 140
Registriert: 03.06.2003

erstellt am: 30. Nov. 2009 21:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Nancy,

sorry, aber wenn ich das so einfüge, dann klappt es nicht.
Ich habe auch zu wenig Wissen in VBA um da einen Fehler zu erkennen.

Fehlermeldung:
Fehler beim Kompilieren
Else ohne If

------------------
Gruß
    Marco

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thomas Harmening
Moderator
Arbeiter ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2897
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 30. Nov. 2009 22:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für thewolff 10 Unities + Antwort hilfreich

Nun wäre es u.U. wichtig zu sehen wie dein eingefügter Text aussieht...
ansonsten bleibt nur Rätselraten...

Unter der Vorraussetzung das <C:\Kunden\Anfragen\> 'im Quelltext hart verdrahtet' immer gleich bleibt und das MkDir immer nur ein Verzeichnis aufbauen kann und nicht eine Teil-Struktur -think i so...

Ungeprüft meine Zusammenschnippelung .debug.print habe ich mal in msgbox geändert, falls man das Direktfenster nicht kennt.

Code:
Sub yy()
    Dim OName$
    VZ01 = "C:\Kunden\Anfragen\"
    bname = Format(Date, "yyyymmdd")
    'MkDir VZ01 & bname
    Dim objFSO2 As Object, objFile As Object
    Set objFSO2 = CreateObject("Scripting.FileSystemObject")
    If Not objFSO2.folderexists(VZ01 & bname) Then
        MsgBox "nö, gibts nich"
        ChDir VZ01
        MkDir bname
    Else
    MsgBox "atschebärschegäbele "& VZ01 & bname & " mich gibts bereits"
    End If
    For Each objFile In objFSO2.GetFolder(VZ01).Files
        objFile.Move VZ01 & bname & "\"
    Next
End Sub

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 30. Nov. 2009 22:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für thewolff 10 Unities + Antwort hilfreich

Hallo Marco,

Else ohne IF: If-Then geht als Einzeiler durch, ohne Else und End If

Code:

if 1<2 then debug.print "ja"


Sobald ein Zweizeiler draus wird, ist End If oder else oder je nachdem gefordert
Code:

if 1<2 then
  debug.print "ja"
  msgbox "noch mehr Anweisungen?"
else
  msgbox "Else kommt"
end if

Irgendwo ist also deine IF-Abfrage nicht korrekt.

Aber hier nochmal getestet, musst aber die Pfade noch anpassen:

Code:

Sub y()
    Dim objFSO2 As Object, objFile As Object
    Set objFSO2 = CreateObject("Scripting.FileSystemObject")
    If Not objFSO2.folderexists("d:\test\1\") Then MkDir "d:\test\1\"
    For Each objFile In objFSO2.GetFolder("d:\test\").Files
      objFile.Move "d:\test\1\"
    Next
End Sub

HTHHope this helps (Hoffe, es hilft weiter) Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

thewolff
Mitglied



Sehen Sie sich das Profil von thewolff an!   Senden Sie eine Private Message an thewolff  Schreiben Sie einen Gästebucheintrag für thewolff

Beiträge: 140
Registriert: 03.06.2003

erstellt am: 01. Dez. 2009 07:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Moin Excel-Profis,

hier meine kompletten Infos aus dem "Makro"

Private Sub CommandButton1_Click()
    CommandButton1.Visible = False
VZ00 = "C:\Daten\Dummy\"
VZ01 = "C:\Kunden\Anfragen\"
    Sheets("Testblatt1").Select
    Columns("I:K").Select
    Selection.EntireColumn.Hidden = True
    Columns("Q:W").Select
    Selection.Delete Shift:=xlToLeft
    Range("L3:L7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D1:E1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.DisplayAlerts = False
    Sheets("P").Select
    ActiveWindow.SelectedSheets.Delete
    Application.DisplayAlerts = True
    If Worksheets("Testblatt1").Range("L1").Value = "" Then
    Worksheets("Testblatt1").Range("L1").Value = "=NOW()"
    End If
Dim OName$
    bName = Format(Date, "yyyymmdd")
    MkDir VZ01 & bName
    Sheets("Testblatt1").Select
    Range("N1").Select
    ActiveCell.FormulaR1C1 = "Info !"
    Range("N2").Select
    Dim dName$
    eName = "tw_" & Format(Date, "yyyymmdd") & ".XLS"
    dName = "C:\Kunden\Anfragen\" & bName & "\" & _
            eName
    ActiveWorkbook.SaveAs dName
End Sub

Ich stehe im Verz. C:\Kunden\Anfragen und starte meine Exceldatei, anschl. Trage ich die aktuellen Werte ein. Wenn alles eingetragen starte ich das "Makro" und möchte diese Datei im Ordner C:\Kunden\Anfragen\"AKTUELLES-DATUM-IM-FORMAT-YYYYMMDD" speichern.
Das funktioniert auch so mit dem Makro solange ich es nur einmal am Tag ausführ. Wenn es das zweite Mal gestartet wird kommt eine Fehlermeldung und in VBA wird die Zeile:
MkDir VZ01 & bName
hervorgehoben.

Wenn ich eure Vorschläge eingebracht habe, habe ich es trotzdem nicht hinbekommen. Es kann sein das der Fehler auch zwischen Bürostuhl und Tastatur liegt.....

Könnt Ihr mir bitte nochmal einen Tipp geben wie ich diese Thematik abstellen kann?

------------------
Gruß
    Marco

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thömu
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Thömu an!   Senden Sie eine Private Message an Thömu  Schreiben Sie einen Gästebucheintrag für Thömu

Beiträge: 283
Registriert: 09.04.2003

SolidWorks 09 SP3
Catia V5 R18
Pro/E WF3
Hardeware, je nach PC...
Zuhause das gute alte OSM PE und OSD 15.5D als Demo

erstellt am: 01. Dez. 2009 08:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für thewolff 10 Unities + Antwort hilfreich

Meinst du soetwas???

 

Zitat:
Original erstellt von thewolff:

....

Dim OName$
    bName = Format(Date, "yyyymmdd")
    If Dir(VZ01 & bName, vbDirectory) = "" then
    MkDir VZ01 & bName
    End If

    Sheets("Testblatt1").Select
    Range("N1").Select
    ActiveCell.FormulaR1C1 = "Info !"
    Range("N2").Select
     Dim dName$
    eName = "tw_" & Format(Date, "yyyymmdd") & ".XLS"
    dName = "C:\Kunden\Anfragen\" & bName & "\" & _
            eName
    ActiveWorkbook.SaveAs dName
End Sub



Wenn ich den Code richtig sehe, überschreibst du dir aber eine bestehende Datei, da diese ja auch immer nach dem Datum benannt wurde -> tw_20091201.xls

Ohne die Funktion genau zu kennen, würde ich mal behaupten, da braucht es noch einen "Tages-Zähler" ;-)

------------------
mfg Thömu

[Diese Nachricht wurde von Thömu am 01. Dez. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 01. Dez. 2009 14:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für thewolff 10 Unities + Antwort hilfreich

Hallo zusammen,
Zitat:
Das funktioniert auch so mit dem Makro solange ich es nur einmal am Tag ausführ.
Bei der ersten Ausführung wird Dein Verzeichnis via MkDir erstellt - Code: MkDir VZ01 & bName, wobei in bName das Datum enthalten ist.

Beim zweiten ausführen am gleichen Tag wird erneut versucht, das gleiche Verzeichnis zu erstellen ;) . Am nächsten Tag klappt es wieder, denn - oh Wunder: Anderes Datum = anderer Verzeichnisname.

So etwas klappt nicht einmal im Windows-Explorer, da kommt dann auch der Warnhinweis: "Datei (Verzeichnis) namens... ist bereits vorhanden" o. ä.

Was Du tun musst - wie trekki schon mehrfach angedeutet hat: Prüfe vor dem Erstellen des Verzeichnisses, ob es vorhanden ist. Entweder, Du machst das mit dem Einzeiler von oben oder dem (geänderten) Mehrzeiler von Thömu.

Code:

'1. startrek
If Not objFSO2.folderexists("d:\test\1\") Then MkDir "d:\test\1\"
'nur Erstellen, falls nicht vorhanden


'2. Thömu
If Dir(VZ01 & bName, vbDirectory) = "" then MkDir VZ01 & bName
'via Dir, sonst gleichwertig


Fazit: Ändere Deine Zeile
MkDir VZ01 & bName --> If Not objFSO2.folderexists("d:\test\1\") Then MkDir "d:\test\1\"

Alles ungetestet - HTH.

------------------
DIN1055.de  |  Lastannahmen für Anwender NEU: Foren zu DIN 1055

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 01. Dez. 2009 21:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für thewolff 10 Unities + Antwort hilfreich

Hallo,

einfach so:

Code:
Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
    ByVal DirPath As String) As Long

Public Sub Test()
    If MakeSureDirectoryPathExists(VZ01 & bName) = 0 Then
        MsgBox "Fehler beim erstellen des Ordners: " & VZ01 & bName & vbLf & _
            "Prüen Sie die Zugriffsrechte für das Laufwerk " & _
            "und den übergeordneten Ordner.", vbCritical, "Zugriffsfehler"
        Exit Sub
    End If
   
    'Hier gehts mit deinem Code weiter.
   
End Sub



Der DLL ist es nämlich schnurtzpiep, ob das Verzeichnis schon besteht oder nicht.
Wenn's schon da ist, macht sie nix, wenn's noch nicht da ist, wird's angelegt.
Einziges Hindernis: Keine Schreibrechte im übergeordneten Verzeichnis, oder das entsprechende
Netzlaufwerk ist nicht verbunden. Wenn du willst, können wir vorher auslesen, ob das Laufwerk
ansprechbar und Schreibrechte vorhanden sind. Schreibrechte prüfen kann aber durch restriktive
Maßnahmen des Admins verhindert werden. Dann hilft nur noch Try and Error.

------------------
Gruß
Nepumuk 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 01. Dez. 2009 22:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für thewolff 10 Unities + Antwort hilfreich

Hallo Marco,

erstmal vorweg, Frederik hat das auf den Punkt gebracht.

irgendwie versuchst du da irgendwelche Codeparts in einen
reinen Makrorecordercode einzubasteln.
Oder ist dieser ganze Rattenschwanz an 'selects' nur zufällig entstanden?

Beschränke dich erstmal auf das wesentliche,
nämlich die paar Zeilen Code zu anfangs ans Laufen zu bringen.
Wie prüfe ich, ob ein Ordner vorhanden ist oder nicht,
wenn nicht > erstellen und dann umschaufeln und wenn nicht > gleich nur umschaufeln.
Entweder mit dem Filesystemobject oder klassisch ohne FSO nur mit (Mk)Dir.
Beides funktioniert unabhängig voneinander, aber dieser Einzeiler (von Paulchen) ist unerlässlich.

Versuche das bitte erstmal als Standalone-Sub, ohne Recordermüll drumrum
ZB (WDH von gestern) Ergänzungen von heute:

Code:

Sub y()
    dim vz01 as string, vz02 as string
    Dim objFSO2 As Object, objFile As Object
    vz01="string01" 'der ohne Date
    vz02="string02" 'der mit dem Date
    Set objFSO2 = CreateObject("Scripting.FileSystemObject")
    If Not objFSO2.folderexists(vz02) Then MkDir vz02
    For Each objFile In objFSO2.GetFolder(vz01).Files
      objFile.Move vz02
    Next
End Sub

Und mache mal im VB-Editor unter Extras > Optionen nen Haken bei 'Variablendeklaration erforderlich',
damit steht dann immer 'Option explicit' obendrüber, soll aber nicht stören.
Hilft dem 'wüsten querbeet-einfachmalso-Dim irgendwas' vorzubeugen und du bist auf der sichereren Seite.

lg Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 01. Dez. 2009 23:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für thewolff 10 Unities + Antwort hilfreich

Hallo Nepumuk,

par excellent wie immer :-)

Mir stellt sich nur alleine die Frage, ob er das hinbekommt?
Ich meine, das Reinbasteln in Recordercode scheint schon schwer zu fallen alleine nur mit dem FSO oder MkDir bzw. mit simplen If-then Abfragen gibts Probleme beim Einbinden.
Keeeene Ahnung, was bei rauskommt, wenn er das mit API erschlagen soll? ;-)

Aber wurschti, egal - schön dich zu lesen!

Liebe Grüße,
Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

thewolff
Mitglied



Sehen Sie sich das Profil von thewolff an!   Senden Sie eine Private Message an thewolff  Schreiben Sie einen Gästebucheintrag für thewolff

Beiträge: 140
Registriert: 03.06.2003

erstellt am: 02. Dez. 2009 06:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Moin, moin,

jetzt hab ich es verstanden. Ich habe ein "zusammengebasteltes Makro" was auch bislang funktioniert hat und dieses wollte ich um diese Option erweitern. Ich muus dann mit einigen Zeilen die neue Möglichkeit testen und nicht immer mit dem kompletten Makro alles versuchen.
Ich gelobe Bessreung.

Vielen Dank.

------------------
Gruß
    Marco

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz