Come rinominare contemporaneamente un file in MS Office ed eliminare la vecchia versione?


19

In Microsoft Office, quando si desidera salvare un file con un nome file diverso senza conservare una copia del nome file precedente, è necessario eseguire due passaggi:

  • Innanzitutto, File -> Salva con nome ... e seleziona il nuovo nome. Viene creata una copia del file.
  • Quindi, vai in Esplora risorse ed elimina il vecchio file con il vecchio nome.

Vorrei semplificare questi passaggi "rinominando" il file, dallo stesso Office, in un solo passaggio. Come potrei farlo?

Per una versione più divertente e criptica vedi Revisione 1 .


@Ramhound Immagino che non riesca a vedere come questo non sia un problema con una soluzione (Travis ha una soluzione migliore di quello che sto facendo e roviuser sembra che la risposta migliore sia una macro VBA - cosa che potrei fare, io non pensavo di farlo per qualche motivo - o un vero componente aggiuntivo compilato VSTO)
enderland

Simultaneo ? Bene, quando ottieni la risposta dimmi come essere in due posti contemporaneamente :-)
MDMoore313

Non è possibile perché l'UE ha limitato l'integrazione che gli Stati membri possono effettuare tra i suoi prodotti. Consentire a Office di rinominare un file violerebbe quelle regole e lo renderebbe un monopolio
Chad,

Hai scherzato qui? Voglio dire, OpenOffice potrebbe semplicemente aggiungere anche una funzione di ridenominazione.
heinrich5991,

Risposte:


12

Il modo "più semplice" per rispondere a questo sembra basarsi in modo significativo su questa risposta .

  1. Inserisci il codice seguente nel modello normal.dotm (disponibile C:\Documents and Settings\user name\Application Data\Microsoft\Templatesper Windows 7 per Word)
  2. Salva normal.dotm
  3. Aggiungi questo alla barra degli strumenti di avvio rapido in Word.
  4. Opzionale: rimappa una scorciatoia da tastiera a questo
  5. Opzionale: firma digitale il modello (consigliato)

Nota che in realtà questo sposta il vecchio file nel Cestino invece del cestino e imposta anche il nuovo nome del file in modo molto conveniente.


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

Buon lavoro. Domande e risposte come questa sono le caratteristiche di SuperUser.
xdumaine,

L'ho usato ampiamente. Grazie superutente!
Enderland,

11

Non puoi farlo con la funzionalità integrata. Come afferma l'ufficio nella sua documentazione

La ridenominazione di un file modifica il nome del file di un file esistente. Non è possibile rinominare un file mentre qualcuno lo ha aperto in qualsiasi programma. Il file deve essere chiuso e, se si tratta di un file condiviso, deve essere archiviato. È possibile salvare un file aperto con un nuovo nome, ma esiste ancora una copia del file con il nome originale.

Sembra che qualcosa del genere possa essere integrato creando una funzione personalizzata "Rinomina come ..." con VSTO o VBA (come nella risposta di Oliver). Dovresti solo programmarlo per salvare una nuova copia ed eliminare quella precedente.


6

Ecco una piccola macro VBA che ho messo insieme che fa praticamente esattamente quello che vuoi:

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

1
Credito dove è dovuto. Non ero disposto a provare questo. VBA è così brutto.
xdumaine,

4

No, non è una funzione integrata.

Una soluzione sarebbe quella di salvare il file con il nuovo nome. Quindi torna a File, Salva con nome ed elimina il vecchio file che lo renderebbe più efficiente della chiusura del documento, dell'esploratore, della ridenominazione, della riapertura.


2
Questa è di gran lunga un'opzione migliore che entrare in quell'esploratore per andare alla guida.
enderland,

3

Ecco una leggera variazione sulla risposta di @Travis.

Ancora una volta, non è una funzione integrata.

  1. In Word, chiudere il file, confermando di salvare le modifiche, se necessario.
  2. Sempre in Word, fai clic su Apri un file.
  3. Passare al file se necessario, fare clic con il pulsante destro del mouse sul file e rinominarlo.
  4. Mentre sei ancora nella finestra di dialogo Apri file, Apri il file rinominato.

Questa soluzione:

  1. Elimina la lunga unità solitaria in Esplora risorse per eliminare il vecchio file.
  2. È solo un viaggio alla finestra di dialogo Apri / Salva-come file.
  3. Completa l'operazione con solo pochi clic del mouse in più rispetto all'operazione Salva con nome.
  4. Completa anche l'operazione con solo pochi clic del mouse rispetto a un VBA o una soluzione simile.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.