MS Office'te bir dosyayı aynı anda nasıl yeniden adlandırabilir ve eski sürümü nasıl silebilirim?


19

Microsoft Office'te, bir dosyayı önceki dosya adının bir kopyasını tutmadan farklı bir dosya adına kaydetmek istediğinizde bunu yapmak için iki adım gerekir:

  • İlk önce, Dosya -> Farklı Kaydet ... ve yeni adı seçin. Dosyanın bir kopyası yapılır.
  • Sonra Windows Gezgini'ne gidin ve eski dosyayı eski adıyla silin.

Office'in kendisinden bir adımda dosyayı "yeniden adlandırarak" bu adımları basitleştirmek istiyorum. Bunu nasıl yapabilirim?

Daha eğlenceli ve şifreli bir sürüm için Revizyon 1'e bakınız .


@Ramhound Sanırım bunun bir çözümle nasıl bir sorun olmadığını anlayamıyorum (Travis, yaptığım şeyin ne olduğunu daha iyi bir çözüm buluyor ve roviuser bunun en iyi cevabı VBA makrosu gibi gösteriyor - ki yapabilirim, ben nedense bunu yapmayı düşünmedim - ya da gerçek bir VSTO derlenmiş eklenti)
enderland

Eşzamanlı mı? Peki, cevabı
bulduğunuzda

AB’nin, MS’in ürünleri arasında yapmasına izin verilen entegrasyonu sınırladığı için bu mümkün değildir. Ofisin bir dosyayı yeniden adlandırmasına izin vermek bu kuralları ihlal eder ve bir tekel yapar
Çad

@Cha şaka mı yapıyorsun? OpenOffice'in de sadece bir yeniden adlandırma fonksiyonu ekleyebileceğini söylüyorum.
heinrich5991

Yanıtlar:


12

Buna cevap vermenin "en kolay" yolu, bu cevabı önemli ölçüde arttırıyor gibi görünmektedir .

  1. Aşağıdaki kodu normal.dotm şablonuna ekleyin ( C:\Documents and Settings\user name\Application Data\Microsoft\TemplatesWord için Windows 7'de bulunur)
  2. Normal.dotm kaydet
  3. Bunu Word'deki hızlı başlat araç çubuğuna ekleyin.
  4. İsteğe bağlı - klavye kısayolunu buna yeniden eşleyin
  5. İsteğe bağlı - şablonunuzu dijital olarak imzalayın (önerilir)

Bunun aslında eski dosyayı tamamen çökertmek yerine Geri Dönüşüm Kutusu'na taşıdığını ve yeni dosya adını çok uygun bir şekilde ayarladığını unutmayın.


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

İyi iş. Bunun gibi sorular ve cevaplar SuperUser'ın ne hakkında olduğu ile ilgilidir.
xdumaine

Bunu yoğun olarak kullanıyorum. Teşekkürler süper kullanıcı!
enderland

11

Bunu, yerleşik işlevlerle yapamazsınız. Ofis belgelerinde belirtildiği gibi

Bir dosyayı yeniden adlandırmak varolan bir dosyanın dosya adını değiştirir. Birisi herhangi bir programda açıkken bir dosyayı yeniden adlandıramazsınız. Dosyanın kapatılması ve paylaşılan bir dosya olması durumunda işaretlenmesi gerekir. Açık bir dosyayı yeni bir adla kaydedebilirsiniz, ancak dosyanın orijinal adı olan bir kopyası yine de mevcut olacaktır.

VSTO veya VBA ile (Oliver'ın cevabında olduğu gibi) özel bir "Yeniden Adlandır ..." işlevi oluşturarak bunun gibi bir şey inşa edilebilir gibi görünüyor . Sadece yeni bir kopyasını kaydetmek ve sonra eskisini silmek için programlamanız gerekir.


6

İşte birlikte attığım küçük bir VBA makrosu.

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
Alacağı yerde kredi. Bunu denemek istemedim. VBA çok çirkin.
xdumaine

4

Hayır, yerleşik bir işlev değildir.

Bir çalışma, dosyayı yeni bir adla kaydetmek olacaktır. Sonra Dosya'ya, Farklı Kaydet'e geri dönün ve belgenizi kapatmayı, gezgini, yeniden adlandırmayı, yeniden açmayı daha etkili kılan eski dosyayı silin.


2
Bu, sürmeye gitmek için bu kaşife binmekten daha iyi bir seçenek.
enderland

3

Burada @ Travis cevabında küçük bir değişiklik var.

Yine, yerleşik bir işlev değil.

  1. Word'de, dosyayı kapatın ve gerekirse değişiklikleri kaydetmeyi onaylayın.
  2. Yine de Word'de, bir dosyayı açmak için tıklayın.
  3. Gerekirse dosyaya gidin, dosyayı sağ tıklayın ve yeniden adlandırın.
  4. Hala Dosya Aç iletişimindeyken, yeniden adlandırılmış dosyayı açın.

Bu çözüm:

  1. Eski dosyayı silmek için Windows Explorer'daki uzun süre yalnız sürücüyü ortadan kaldırır.
  2. Dosya Aç / Farklı Kaydet iletişim kutusuna yalnızca bir seyahattir.
  3. İşlemi, Farklı Kaydet işleminden yalnızca birkaç fare tıklamasıyla tamamlar.
  4. Ayrıca VBA veya benzeri bir çözümden yalnızca birkaç fare tıklamasıyla işlemi tamamlar.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.