Erste "saveas-Methode von Objekt _workbook ist fehlgeschlagen" Fehler beim speichern als CSV-Datei XLSM
Ich versuche zu speichern (mit aktivierten Makros) excel-Arbeitsmappe als csv-Datei über das makro überschreiben Sie dabei die alte (unten hatte ich die ändern den Namen des Ordners, und das Blatt, aber das scheint nicht das Problem sein!):
Sub SaveWorksheetsAsCsv()
Dim SaveToDirectory As String
Dim CurrentWorkbook As String
Dim CurrentFormat As Long
CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
SaveToDirectory = "\MyFolder\"
Application.DisplayAlerts = False
Application.AlertBeforeOverwriting = False
Sheets("My_Sheet").Copy
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
ActiveWorkbook.Close SaveChanges:=False
ThisWorkbook.Activate
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
Application.AlertBeforeOverwriting = True
End Sub
Seltsam genug, manchmal, aber nicht immer, es schlägt fehl, und die Fehlermeldung des Titels (Laufzeitfehler 1004: die Methode saveas von Objekt _workbook ist fehlgeschlagen), erscheint der debugger verweist mich aus dieser Zeile:
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
Ich es gegoogelt und anscheinend nicht viel passieren, um Menschen, und einige von den Lösungen, die ich versucht wurden:
- Angabe, dass das Verzeichnis ein string
- Vermeiden Sie jegliche Sonderzeichen in den Namen der Datei oder des Ordners (gesehen hier)
- Kopieren Sie das Arbeitsblatt als Wert vor dem speichern als .csv-Datei (gesehen hier)
- Die Angabe der Dateiformat mit der .csv-code-Nummer (gesehen hier)
- Deaktivieren/Re-enabling einige der Warnungen
- Das hinzufügen weiterer Felder in das ActiveWorkbook.SaveAs-Zeile, in Bezug auf Passwörter, das erstellen von backups etcetc
Immer noch, es möglicherweise korrekt ausgeführt, bis zu 50-60 mal in einer Reihe, und dann an einem gewissen Punkt scheitern immer wieder an der Reihe.
Jede suggetion oder Dinge, die könnte ich nachschlagen, um dieses problem zu lösen (außer halt mit VBA/Excel für diese Aufgabe, und das wird bald passieren, aber ich kann nicht für jetzt).
Dank im Voraus für Ihre Zeit.
EDIT: Gelöst Dank Degustaf Vorschlag. Ich habe nur zwei änderungen Degustaf vorgeschlagene code:
- "ThisWorkbook".Blätter statt CurrentWorkbook.Blätter
- FileFormat:=6 statt FileFormat:=xlCSV (anscheinend ist robuster
auf differente Versionen von excel),
Sub SaveWorksheetsAsCsv() Dim SaveToDirectory As String Dim CurrentWorkbook As String Dim CurrentFormat As Long Dim TempWB As Workbook Set TempWB = Workbooks.Add CurrentWorkbook = ThisWorkbook.FullName CurrentFormat = ThisWorkbook.FileFormat SaveToDirectory = "\\MyFolder\" Application.DisplayAlerts = False Application.AlertBeforeOverwriting = False ThisWorkbook.Sheets("My_Sheet").Copy Before:=TempWB.Sheets(1) ThisWorkbook.Sheets("My_Sheet").SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=6 TempWB.Close SaveChanges:=False ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat ActiveWorkbook.Close SaveChanges:=False Application.DisplayAlerts = True Application.AlertBeforeOverwriting = True End Sub
Ich kann nicht abstimmen, bis Sie beide sich aufgrund meines rep Ebene, trotzdem danke für deine Hilfe. Degustaf Lösung aussieht, es hat den trick! Getestet habe ich es über 100 mal, und es ist nicht zu Versagen. Ich fügte hinzu, auf die Frage über das bearbeitete und readapted code von Degustaf Antwort. Aus irgendeinem Grund JMMach war noch das problem verursacht.
InformationsquelleAutor Riccardo | 2015-03-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich generell finde, dass
ActiveWorkbook
ist das problem in diesen Fällen. Damit meine ich, dass Sie irgendwie nicht haben, dass die Arbeitsmappe (oder jede andere) ausgewählt ist, und Excel nicht weiß, was zu tun ist. Leider, dacopy
nichts zurückgibt (das kopierte Arbeitsblatt wäre schön), dies ist ein standard-Weg der Annäherung an dieses problem.Also, wir können dieses Konzept, wie können wir kopieren Sie dieses Blatt in eine neue Arbeitsmappe, und einen Verweis auf die Arbeitsmappe. Was wir tun können ist, erstellen Sie die neue Arbeitsmappe, und kopieren Sie dann das Blatt:
Oder gibt es einen noch besseren Ansatz in einer situation wie dieser:
WorkSheet
unterstützt dieSaveAs
Methode. Keine Kopie nötig.Werde ich Sie warnen, speichern Sie die Arbeitsmappe auf Ihren ursprünglichen Namen afterwarsd, wenn es offen bleiben, aber das haben Sie ja schon in deinem code.
InformationsquelleAutor Degustaf
Diese ist ein Jahr alt, aber ich werde etwas hinzufügen, für die zukünftigen Leser
Werden Sie nicht finden, eine Menge an Dokumentation in der Excel-Hilfe für die Run-time error 1004 wie Microsoft nicht der Auffassung, dass es sich um eine Excel-Fehler.
Den oben genannten Antworten sind zu 100% gültig, aber manchmal hilft es, zu wissen, was das problem verursacht, so dass Sie es vermeiden können, fixieren Sie es früher oder fixieren Sie es leichter.
Die Tatsache, dass dies ist ein sporadisch auftretender Fehler, und es ist behoben, die durch die Einsparung mit der vollständige Pfad und der Dateiname sagt mir, dass entweder dein makro kann versuchen zu speichern .xlsb-Datei, um die AutoWiederherstellen-Verzeichnis nach einer automatischen Datei-recovery.
Alternativ können Sie das editieren der Datei Pfad oder im Dateinamen selbst.
Können Sie überprüfen Sie den Pfad und Dateinamen mit:-
MsgBox ThisWorkbook.FullName
Sollten Sie etwas wie dies in der message-box.
C:\Users\Mike\AppData\Roaming\Microsoft\Excel\DIARY(version 1).xlxb
Wenn also die Lösung ist (wie oben erwähnt von anderen) zum speichern der Datei in den richtigen Pfad und Datei-Namen. Diese kann getan werden, mit VBA oder manuell.
Ich bin jetzt in der Gewohnheit der das manuelle speichern der Datei mit den korrekten Pfad-und Dateinamen als selbstverständlich, nachdem eine AutoWiederherstellen-Aktion, wie es dauert Sekunden, und ich finde auch das es schneller (wenn das nicht täglich vorkommen). Damit werden die Makros nicht auftreten dieses Fehlers führen Sie es. Denken Sie daran, dass, während meine Gewohnheit, manuell zu speichern .xlxb-Dateien .xlsm Dateien sofort nach einer Wiederherstellung wird nicht helfen, ein Anfänger, geben Sie das Arbeitsblatt an.
Ein Hinweis auf Hyperlinks
Nachdem dieser Fehler: Wenn Sie hyperlinks in Ihr Arbeitsblatt erstellt mit Strg+k in alle Wahrscheinlichkeit, Sie haben so etwas wie "AppData\Roaming\Microsoft\", "\AppData\Roaming\", "../../AppData/Roaming/"oder "....\Meine Dokumente\Meine Dokumente\" in mehrere hyperlinks nach file recovery. Diese können Sie vermeiden durch das anbringen von hyperlinks zu einem Textfeld oder generieren Sie mit dem HYPERLINK-Funktion.
Identifizieren und diese zu Reparieren ist ein wenig komplizierter,
Erste, prüfen Sie die hyperlinks, und ermitteln Sie die fehlerhafte Saiten und den richtigen string für jeden Fehler. Im Laufe der Zeit, die ich gefunden habe, mehrere.
Excel nicht, eine Einrichtung, die in der 'Besondere' - Menü, um die Suche für die hyperlinks erstellt mit Strg+k.
Können Sie automatisieren die Identifikation von fehlerhaften hyperlinks in einer hilfsspalte, sagen wir Spalte Z und mit Hilfe der Formel
wo Link2Text ist die UDF
Funktion Link2Text(rng As Range) As String
"NICHT deaktivieren.
'Sucht hyperlinks mit 'roaming' in der Spalte Z.
Meine VBA zu korrigieren der Fehler ist wie folgt
Sub Replace_roaming()
' Wählen Sie das richtige Blatt
Sheets("TAGEBUCH").Wählen Sie
Ich auch empfehlen, die Sie erhalten Sie in die Gewohnheit zu tun, regelmäßige sicherungen und nicht unter Berufung auf AutoWiederherstellen-allein. Wenn es fehlschlägt, haben Sie nichts seit dem letzten voll-backup.
Während das Material wird brüchig backup oft wie jede Stunde oder nach jeder wesentlichen den import von neuen Daten.
Folgende Tastenkombinationen ein backup von Ihrem Arbeitsblatt in Sekunden: Strg+O, [highlight die mit dem Namen], Strg+C, Strg+V, [ X ]. Regelmäßige backups erlauben Ihnen, gehen Sie sofort zu Ihrem zuletzt gesicherten backup ohne Wiederherstellung von der letzten Nacht, die backup-Datei, vor allem, wenn Sie eine Anfrage von einer anderen person, dies zu tun.
InformationsquelleAutor Mike Benstead
Kombinieren Sie den Pfad und den CSV-Datei-namens in eine string-variable und drop die .csv; , erfolgt durch den An. Pfad muss absolut sein, beginnend mit einem Laufwerksbuchstaben oder Servernamen:
Dim strFullFileName as String
strFullFileName = "C:\My Folder\My_Sheet"
Wenn auf einem Server, dann würde es so Aussehen:
strFullFileName = "\\ServerName\ShareName\My Folder\My_Sheet"
Substiture Sie ServerName durch den Namen Ihres Servers und ersetzen Sie ShareName mit dem Sie Ihre Netzwerk-Freigabenamen z.B.
\\data101\Accounting\My Folder\My_Sheet
ActiveWorkbook.SaveAs Filename:=strFullFileName,FileFormat:=xlCSVMSDOS, CreateBackup:=False
InformationsquelleAutor JMMach