Wie kann ich eine Datei in MS Office gleichzeitig umbenennen und die alte Version löschen?

19

Wenn Sie in Microsoft Office eine Datei unter einem anderen Dateinamen speichern möchten, ohne eine Kopie des vorherigen Dateinamens zu behalten, sind zwei Schritte erforderlich:

  • Öffnen Sie zunächst Datei -> Speichern unter ... und wählen Sie den neuen Namen aus. Eine Kopie der Datei wird erstellt.
  • Rufen Sie dann den Windows Explorer auf und löschen Sie die alte Datei mit dem alten Namen.

Ich möchte diese Schritte vereinfachen, indem ich die Datei von Office aus in einem Schritt "umbenenne". Wie könnte ich das machen?

Für eine unterhaltsamere und kryptischere Version siehe Revision 1 .

Enderland
quelle
@Ramhound Ich schätze, ich kann nicht erkennen, dass dies kein Problem mit einer Lösung ist (Travis hat eine bessere Lösung als das, was ich tue, und Roviuser lässt es so erscheinen, als wäre die beste Antwort entweder ein VBA-Makro - was ich vielleicht tue Ich habe aus irgendeinem Grund nicht daran gedacht, dies zu tun - oder ein aktuelles, von VSTO kompiliertes Add-On)
enderland
Gleichzeitig ? Nun, wenn Sie die Antwort bekommen, sagen Sie mir, wie ich an zwei Orten gleichzeitig sein soll :-)
MDMoore313
Sie können nicht, weil die EU die Integration, die MS zwischen ihren Produkten vornehmen darf, eingeschränkt hat. Das Erlauben von Office, eine Datei umzubenennen, würde gegen diese Regeln verstoßen und sie monoply machen
Tschad,
@Chad machst du Witze hier? Ich meine, OpenOffice könnte auch einfach eine Umbenennungsfunktion hinzufügen.
heinrich5991

Antworten:

12

Der "einfachste" Weg, dies zu beantworten, scheint wesentlich auf dieser Antwort aufzubauen .

  1. Fügen Sie folgenden Code in die Vorlage "normal.dotm" ein (in C:\Documents and Settings\user name\Application Data\Microsoft\TemplatesWindows 7 für Word)
  2. Speichern Sie normal.dotm
  3. Fügen Sie dies der Schnellstartleiste in Word hinzu.
  4. Optional - ordnen Sie diesem eine Tastenkombination zu
  5. Optional - Unterschreiben Sie Ihre Vorlage digital (empfohlen)

Beachten Sie, dass dadurch die alte Datei in den Papierkorb verschoben und nicht vollständig in den Papierkorb verschoben wird. Außerdem wird der neue Dateiname auf praktische Weise festgelegt.


Option Explicit

 'To send a file to the recycle bin, we'll need to use the Win32 API
 'We'll be using the SHFileOperation function which uses a 'struct'
 'as an argument. That struct is defined here:
Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As Long
End Type

 ' function declaration:
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

 'there are some constants to declare too
Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
Private Const FOF_NOCONFIRMATION = &H10
Private Const FOF_SILENT = &H4

Function RecycleFile(FileName As String, Optional UserConfirm As Boolean = True, Optional HideErrors As Boolean = False) As Long
     'This function takes one mandatory argument (the file to be recycled) and two
     'optional arguments: UserConfirm is used to determine if the "Are you sure..." dialog
     'should be displayed before deleting the file and HideErrors is used to determine
     'if any errors should be shown to the user

    Dim ptFileOp As SHFILEOPSTRUCT
     'We have declared FileOp as a SHFILEOPSTRUCT above, now to fill it:
    With ptFileOp
        .wFunc = FO_DELETE
        .pFrom = FileName
        .fFlags = FOF_ALLOWUNDO
        If Not UserConfirm Then .fFlags = .fFlags + FOF_NOCONFIRMATION
        If HideErrors Then .fFlags = .fFlags + FOF_SILENT
    End With
     'Note that the entire struct wasn't populated, so it would be legitimate to change it's
     'declaration above and remove the unused elements. The reason we don't do that is that the
     'struct is used in many operations, some of which may utilise those elements

     'Now invoke the function and return the long from the call as the result of this function
    RecycleFile = SHFileOperation(ptFileOp)

End Function


Sub renameAndDelete()

    ' Store original name
    Dim sOriginalName As String
    sOriginalName = ActiveDocument.FullName

    ' Save As
    Dim sFilename As String, fDialog As FileDialog, ret As Long
    Set fDialog = Application.FileDialog(msoFileDialogSaveAs)

    'set initial name so you don't have to navigate to
    fDialog.InitialFileName = sOriginalName

    ret = fDialog.Show

    If ret <> 0 Then
        sFilename = fDialog.SelectedItems(1)
    Else
        Exit Sub
    End If

    Set fDialog = Nothing

    'only do this if the file names are different...
    If (sFilename <> sOriginalName) Then
        'I love vba's pretty code
         ActiveDocument.SaveAs2 FileName:=sFilename, FileFormat:= _
            wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
            :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
            :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
            SaveAsAOCELetter:=False, CompatibilityMode:=14

        ' Delete original (don't care about errors, I guess)
        Dim hatersGonnaHate As Integer
        hatersGonnaHate = RecycleFile(sOriginalName, False, True)

    End If

End Sub
Enderland
quelle
Gute Arbeit. Fragen und Antworten wie diese sind das, worum es bei SuperUser geht.
Xdumaine
Ich habe dies ausgiebig genutzt. Danke Superuser!
Enderland
11

Mit der integrierten Funktionalität ist dies nicht möglich. Wie Büro in seiner Dokumentation feststellt

Durch das Umbenennen einer Datei wird der Dateiname einer vorhandenen Datei geändert. Sie können eine Datei nicht umbenennen, solange sie in einem Programm geöffnet ist. Die Datei muss geschlossen werden und wenn es sich um eine freigegebene Datei handelt, muss sie eingecheckt werden. Sie können eine geöffnete Datei unter einem neuen Namen speichern, aber eine Kopie der Datei mit dem ursprünglichen Namen bleibt bestehen.

Es scheint, als könnte so etwas eingebaut werden, indem eine benutzerdefinierte Funktion "Umbenennen als ..." mit VSTO oder VBA erstellt wird (wie in Olivers Antwort). Sie müssen es nur programmieren, um eine neue Kopie zu speichern, und dann die alte löschen.

Xdumaine
quelle
6

Hier ist ein kleines VBA-Makro, das ich zusammengefügt habe und das ziemlich genau das macht, was Sie wollen:

Sub Macro1()
    ' Store original name
    Dim sOriginalName As String
    sOriginalName = ActiveDocument.FullName

    ' Save As
    Dim sFilename As String, fDialog As FileDialog, ret As Long
    Set fDialog = Application.FileDialog(msoFileDialogSaveAs)
    ret = fDialog.Show
    If ret <> 0 Then
        sFilename = fDialog.SelectedItems(1)
    Else
        Exit Sub
    End If
    Set fDialog = Nothing

    ' Don't replace the original file
    If sFilename = sOriginalName Then Exit Sub

     ActiveDocument.SaveAs2 FileName:=sFilename, FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False, CompatibilityMode:=14

    ' Delete original
    Kill sOriginalName
End Sub
Der Hochstapler
quelle
1
Gutschrift, wo es fällig ist. Ich war nicht bereit, das zu versuchen. VBA ist so hässlich.
Xdumaine
4

Nein, es ist keine eingebaute Funktion.

Eine Möglichkeit wäre, die Datei unter dem neuen Namen zu speichern. Kehren Sie dann zu Datei, Speichern unter zurück und löschen Sie die alte Datei, was effizienter wäre, als das Dokument zu schließen, den Explorer zu öffnen, umzubenennen oder erneut zu öffnen.

Travis
quelle
2
Dies ist bei weitem eine bessere Option, als sich in diesen Explorer zu begeben, um zu fahren.
Enderland
3

Hier ist eine kleine Variation der Antwort von @Travis.

Auch hier ist es keine eingebaute Funktion.

  1. Schließen Sie in Word die Datei und bestätigen Sie, dass die Änderungen bei Bedarf gespeichert werden sollen.
  2. Klicken Sie noch in Word auf, um eine Datei zu öffnen.
  3. Navigieren Sie bei Bedarf zu der Datei, klicken Sie mit der rechten Maustaste auf die Datei und benennen Sie sie um.
  4. Öffnen Sie die umbenannte Datei, während Sie sich noch im Dialogfeld "Datei öffnen" befinden.

Diese Lösung:

  1. Beseitigt das lange einsame Laufwerk in Windows Explorer, um die alte Datei zu löschen.
  2. Ist nur eine Reise in den Dialog Datei Öffnen / Speichern unter.
  3. Beendet den Vorgang mit nur wenigen Mausklicks als nur dem Speichern unter-Vorgang.
  4. Beendet den Vorgang auch mit nur wenigen Mausklicks als eine VBA-Lösung oder eine ähnliche Lösung.
Kevin Fegan
quelle