FileCopy kopiert nichts und gibt auch keine Meldung?

  • Word

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    FileCopy kopiert nichts und gibt auch keine Meldung?

    Guten Tag zusammen
    Habe ein kleines Problem, also ich rufe mit einem VBA vollgemülltest Word ein Formular auf in dem ich ein Dropdown habe zu verschiedenen Images von Rechnern die man dann im Ordner sozusagen aufrufen kann oder direkt an einen Ort kopieren kann mit dem FolderBrowserDialog. Wenn nun dazu FileCopy aufrufen möchte tut sich aber gar nichts. Woran könnte das liegen? vielleicht das Netzlaufwerke nicht unterstützt werden? Das ganze habe ich so eingerichtet weil die Beschriftung der Images meist katastrophal ist. Ich lade am besten mal die gesäuberte einfache Word Datei hoch damit ihr euch ein Bild machen könnt was ich meine.
    Dateien
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Orion“ ()

    Ich hatte mal das Problem (ist zwar .Net aber vielleicht isses das selbe Problem) das bevor ich mit Path.Combine gearbeitet habe ein / hinten am Pfad zuviel da war. hast du das schonmal geprüft?
    EDIT: Hab mir dein Projekt gerade mal angesehen. Wieso schreibst du alle Pfade zu den Images per Hand in die Combobox? Die Images liegen doch alle unter \\CTNS01\Support\Images\?

    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Snaptu“ ()

    Ja, habs von Hand weil sich die Images laufend ändern/erweitern und etc.
    EDIT: Die Pfade habe ich schon mit MsgBoxen überprüft und stimmen so wie sie sind.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Orion“ ()

    die Images laufend ändern/erweitern


    Dann aktualisiere deine "Liste" bei jedem Programmstart aufs neue? Willst bei jeder Änderung an den Dateien im Quellcode rumfummeln?
    Ich würds ja an deiner Stelle in .NET schreiben (wenns in deinem Fall erlaubt ist). nur eine Word Datei mit nem Button als Pseudoprogramm verfehlt irgendwie den Sinn oder nich?
    VBA nutze ich vielleicht um mit Daten IN Word zu arbeiten aber nicht damit Dateien zu kopieren.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.
    Nein, ich mach das ganze in VBA als Übung für die Berufsschule weil ich nicht so viel zu tun habe im Moment und da dachte ich mach ich auch etwas das man brauchen kann. Also ja, Die Dateien und Beschreibung will ich fest vergeben. Es geht ja sowieso hauptsächlich um das Problem das die Images gar nicht kopiert werden. Habe jetzt noch einmal alles durch MsgBoxen ausgeben lassen und einen Fehler gefunden, kopieren tuts aber immer noch nicht :/ ich ersetze mal die Word-Datei die ich hochgeladen hab mit der jetzigen Version in der auch die MsgBoxen erscheinen mit den Pfaden...
    EDIT: Hab es jetzt mit einem DOS Befehl fertiggebracht. Ist aber ziemlich unschön, Word bleibt einfach hängen und gibt keine Rückmeldung mehr bis der Vorgang abgeschlossen ist gibt es da einen anderen Weg oder kann man das ganze mit einem Ladefensterchen bemerkbar machen das kopiert wird?
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Orion“ ()

    Visual Basic-Quellcode

    1. Public Sub FileCopy( ByVal Source As String, ByVal Destination As String)
    2. FileCopy Source, Destination
    3. End Sub
    Ist natürlich schon mutig.
    Du rufst in der Routine FileCopy die Routine FileCopy auf.
    Das rekursiert sich so lange, bis das Memory voll ist, dann kracht's.

    Die Definition von Sub FileCopy überschreibt den Befehl Filecopy.
    Gib der Sub einen anderen Namen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Frage.. Wenn ich den DOS Befehl so ausführe:

    VB.NET-Quellcode

    1. Call Shell(CopyString, vbNormalFocus)

    Sollte das Fensterchen doch sichtbar sein oder nicht?
    Ich brings nicht hin das man sieht was da gerade gemacht wird.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Ich weiß ja nicht wie dein CopyString lautet und wie groß die Datei ist, aber wahrscheinlich ist dein Auge zu träge.
    Falls du nicht ganz sicher bist, wo du das Fenster findest, kannst du auch vbMaximizedFocus testen.

    Trotzdem:
    Hier extra eine Shell aufzumachen, anstatt der Sub einen anderen Namen zu geben, ist nicht besonders elegant.
    Noch besser wäre wenn du in deinem Original-Code die überflüssige "Sub FileCopy" komplett raus löschst, dann funktioniert's nämlich auch.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ist schon gemacht, also das rauslöschen und ich glaub nicht das mein Auge zu träge ist bei Mindestgrössen von 10 GB ^^ Wenns ja mit dem DOS Befehl funktioniert aber mit FileCopy nicht warum dann nicht so?
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Orion schrieb:

    Wenns ja mit dem DOS Befehl funktioniert aber mit FileCopy nicht warum dann nicht so?
    Meinetwegen mach's wie du willst.
    Sind halt ein paar Prozesse mehr.
    Aber es funktioniert genauso mit dem internen FileCopy, wenn du deinen komischen rekursiven Aufruf rauslöschst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Okay, ja habs hingekriegt. Trotzdem bleibt alles hängen...
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Ist dir klar, dass ein Shell-Befehl asynchron startet, also nicht wartet bis der Befehl fertig ist.
    Ein interner Befehl (wie Filecopy) wartet, bis die Aufgabe ausgeführt ist.

    Das bedeutet gleichzeitig:
    Falls während der Ausführung ein Fehler auftritt, kriegst das dein Programm bei einem per Shell abgesetzten Befehl nicht mit.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich mein ich habs hingekriegt mit FileCopy... Aber bei 10 GB bleibt ja Word trotzdem hängen kann man das irgendwie umgehen und im Hintergrund verarbeiten? Ist ein bisschen doof wenn das komplette Word hängen bleibt und unbrauchbar ist.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Benötigst du den Status des Kopierbefehls oder ist es dir egal, ob das Kopieren erfolgreich verlief?
    Wenn dir der Status egal ist, kannst du den Shell-Befehl abschicken und hoffen, dass er schon das machen wird, was er soll.

    VBA kennt kein Threading um etwas in den Hintergrund zu schieben.

    Wenn du also auf einen Rückgabewert angewiesen bist, könntest du dir eine ShellAndWait-Funktion schreiben, in deren Warteschleife du andere Aufrufe oder DoEvents einbaust, um Office das Einfrieren zu verbieten.
    Du kannst dir hier die Grundlagen reinziehen:
    cpearson.com/excel/ShellAndWait.aspx

    Mir fallen zwar noch ein paar Methoden ein, aber die sind alle noch komplizierter.
    Falls du dich mal tiefer mit der Grundidee beschäftigen willst:
    excelhero.com/blog/2010/05/multi-threaded-vba.html
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --