19 votos

¿Cómo al mismo tiempo, cambiar el nombre un archivo en MS Office y borrar una versión antigua?

En Microsoft Office, al querer guardar un archivo con un nombre de archivo diferente, sin guardar una copia de la anterior de nombre de archivo, para ello se requiere de dos pasos:

  • En primer lugar, Archivo -> Guardar Como... y seleccione el nuevo nombre. Una copia del archivo se hace.
  • A continuación, vaya al Explorador de Windows y elimine el archivo antiguo con el nombre antiguo.

Me gustaría simplificar estos pasos por "cambiar el nombre de" el archivo, desde la propia Oficina, en un solo paso. ¿Cómo podría hacer esto?

Para un más entretenido y críptico de ver la versión de la Revisión 1.

12voto

enderland Puntos 628

El "más fácil" manera de responder a esta parece ser significativamente en la construcción de esta respuesta.

  1. Inserte el código siguiente en normal.dotm plantilla (que se encuentra en C:\Documents and Settings\user name\Application Data\Microsoft\Templates para Windows 7 por Palabra)
  2. Guardar normal.dotm
  3. Agregar esto al inicio rápido de la barra de herramientas en Word.
  4. Opcional - reasignación de un método abreviado de teclado para esta
  5. Opcional - firmar digitalmente su plantilla (recomendado)

Nota esta realidad se mueve el antiguo archivo a la Papelera de Reciclaje en lugar de tirarlos a la basura por completo y también se establece el nuevo nombre de archivo en una ubicación muy cómoda a la moda.


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

11voto

iAsk Puntos 118

Usted no puede hacer esto con el construido en la funcionalidad. Como la oficina de los estados en que la documentación de

Cambiar el nombre de un archivo cambia el nombre de archivo de un archivo existente. Usted puede cambiar el nombre de un archivo, mientras que alguien tiene que abrir en cualquier programa. El archivo debe ser cerrado, y si es un archivo compartido, debe ser facturado. Puede guardar un archivo con un nombre nuevo, pero una copia del archivo con el nombre original todavía existe.

Parece que algo como esto podría ser construido por la creación de una costumbre "cambiar el nombre Como..." función con VSTO o VBA (como en Oliver respuesta). Sólo tendría que programa es para guardar una nueva copia, a continuación, eliminar el antiguo.

6voto

OGP Puntos 101

Aquí es una poco la macro de VBA lanzaron juntos que hace casi exactamente lo que quieres:

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

4voto

No, no es una función integrada.

Sería un trabajo alrededor guardar el archivo con el nuevo nombre. Luego ir a archivo, guardar como y borrar el archivo viejo que sería más eficiente que cierre su documento, explorador, cambiar el nombre, reapertura.

3voto

Kevin Fegan Puntos 2429

Aquí está una ligera variación en @Travis respuesta.

De nuevo, no es una función integrada.

  1. En Word, cierre el archivo de confirmación para guardar los cambios si es necesario.
  2. Todavía en Word, haga clic en para Abrir un archivo.
  3. Navegue hasta el archivo si es necesario, haga clic en el archivo y cambiarle el nombre.
  4. Mientras que todavía en el cuadro de diálogo Abrir Archivo, Abra el archivo renombrado.

Esta solución:

  1. Elimina las largas y solitarias de la unidad en el Explorador de Windows para eliminar el archivo antiguo.
  2. Es sólo un viaje a Abierto el Archivo/Guardar Como cuadro de diálogo.
  3. Completa la operación con sólo unos pocos clics de ratón que acaba de Guardar-Como operación.
  4. También se completa la operación con sólo unos pocos clics de ratón de una VBA o solución similar.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: