จะเปลี่ยนชื่อไฟล์ใน MS Office พร้อมกันและลบเวอร์ชันเก่าได้อย่างไร


19

ใน Microsoft Office เมื่อต้องการบันทึกไฟล์เป็นชื่อไฟล์ที่แตกต่างกันโดยไม่เก็บสำเนาของชื่อไฟล์ไว้ก่อนหน้าการทำเช่นนั้นต้องใช้สองขั้นตอน:

  • ก่อนอื่นไฟล์ -> บันทึกเป็น ... และเลือกชื่อใหม่ สำเนาของไฟล์ที่จะทำ
  • จากนั้นไปที่ Windows Explorer และลบไฟล์เก่าด้วยชื่อเก่า

ฉันต้องการทำให้ขั้นตอนเหล่านี้ง่ายขึ้นโดย "เปลี่ยนชื่อ" ไฟล์จาก Office ในขั้นตอนเดียว ฉันจะทำสิ่งนี้ได้อย่างไร

สำหรับความบันเทิงมากขึ้นและรุ่นที่คลุมเครือดูRevision 1


@ แรมฮาวด์ฉันเดาว่าฉันไม่เห็นว่ามันจะมีปัญหากับวิธีการแก้ปัญหา (เทรวิสมีทางออกที่ดีกว่าที่ฉันทำและ roviuser ทำให้ดูเหมือนว่าคำตอบที่ดีที่สุดคือมาโคร VBA - ซึ่งฉันอาจทำฉัน ไม่คิดว่าจะทำเช่นนี้ด้วยเหตุผลบางอย่าง - หรือ VSTO จริง ๆ รวบรวม Add-on)
enderland

พร้อมกันไหม เมื่อคุณได้รับคำตอบจากนั้นบอกวิธีทำสองวิธีในครั้งเดียว :-)
MDMoore313

คุณไม่สามารถทำได้เพราะสหภาพยุโรปได้ จำกัด การรวมที่ MS ได้รับอนุญาตให้ทำระหว่างผลิตภัณฑ์ของตน การอนุญาตให้สำนักงานเปลี่ยนชื่อไฟล์จะทำให้กฎเหล่านั้นผิดพลาดและทำให้เป็นไฟล์
Chad

@Chad คุณล้อเล่นที่นี่หรือเปล่า ฉันหมายถึง OpenOffice สามารถเพิ่มฟังก์ชั่นการเปลี่ยนชื่อได้เช่นกัน
heinrich5991

คำตอบ:


12

วิธีที่ง่ายที่สุดที่จะตอบคำถามนี้ดูเหมือนจะเป็นการสร้างคำตอบนี้อย่างมาก

  1. ใส่รหัสต่อไปนี้ลงในแม่แบบ normal.dotm (พบในC:\Documents and Settings\user name\Application Data\Microsoft\Templatesสำหรับ Windows 7 สำหรับ Word)
  2. บันทึก normal.dotm
  3. เพิ่มลงในแถบเครื่องมือ quicklaunch ใน Word
  4. ไม่บังคับ - ทำการแมปแป้นพิมพ์ลัดใหม่นี้
  5. ตัวเลือก - เซ็นชื่อแบบดิจิทัลของคุณ (แนะนำ)

โปรดทราบว่าจริง ๆ แล้วย้ายไฟล์เก่าไปยังถังรีไซเคิลแทนที่จะทำการทิ้งอย่างสมบูรณ์และตั้งชื่อไฟล์ใหม่ในแบบที่สะดวกมาก


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

การทำงานที่ดี. คำถามและคำตอบเช่นนี้คือสิ่งที่ SuperUser เป็นผู้เกี่ยวข้อง
xdumaine

ฉันได้ใช้สิ่งนี้อย่างกว้างขวาง ขอบคุณ superuser!
enderland

11

คุณไม่สามารถทำได้ด้วยฟังก์ชั่นในตัว ตามที่สำนักงานระบุไว้ในเอกสารประกอบ

การเปลี่ยนชื่อไฟล์เปลี่ยนชื่อไฟล์ของไฟล์ที่มีอยู่ คุณไม่สามารถเปลี่ยนชื่อไฟล์ในขณะที่บางคนเปิดไว้ในโปรแกรมใด ๆ ไฟล์จะต้องถูกปิดและหากเป็นไฟล์ที่แชร์ต้องทำการเช็คอินคุณสามารถบันทึกไฟล์ที่เปิดด้วยชื่อใหม่ แต่สำเนาของไฟล์ที่มีชื่อเดิมจะยังคงอยู่

ดูเหมือนว่าสิ่งนี้สามารถสร้างได้ด้วยการสร้างฟังก์ชัน "Rename As ... " แบบกำหนดเองด้วยVSTOหรือ VBA (เช่นเดียวกับคำตอบของ Oliver) คุณเพียงแค่ต้องตั้งโปรแกรมให้บันทึกสำเนาใหม่แล้วลบสำเนาเก่า


6

นี่คือมาโคร VBA เล็ก ๆ ที่ฉันรวมเข้าด้วยกัน

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
เครดิตที่มันครบกำหนด ฉันไม่เต็มใจลอง VBA น่าเกลียดมาก
xdumaine

4

ไม่มันไม่ใช่ฟังก์ชั่นในตัว

วิธีแก้ไขอย่างหนึ่งคือการบันทึกไฟล์ด้วยชื่อใหม่ จากนั้นกลับไปที่ไฟล์บันทึกเป็นและลบไฟล์เก่าซึ่งจะทำให้มีประสิทธิภาพมากกว่าการปิดเอกสาร explorer เปลี่ยนชื่อเปิดใหม่อีกครั้ง


2
นี่เป็นตัวเลือกที่ดีกว่าการเข้าไปสำรวจที่จะขับรถ
enderland

3

นี่คือความแตกต่างเล็กน้อยในคำตอบ @Travis

อีกครั้งมันไม่ใช่ฟังก์ชั่นในตัว

  1. ใน Word ให้ปิดไฟล์โดยยืนยันว่าจะบันทึกการเปลี่ยนแปลงหากจำเป็น
  2. ยังอยู่ใน Word คลิกเพื่อเปิดไฟล์
  3. นำทางไปยังไฟล์หากจำเป็นให้คลิกขวาที่ไฟล์และเปลี่ยนชื่อ
  4. ในขณะที่ยังอยู่ในกล่องโต้ตอบเปิดไฟล์ให้เปิดไฟล์ที่ถูกเปลี่ยนชื่อ

วิธีนี้:

  1. กำจัดไดรฟ์ที่อยู่โดดเดี่ยวใน Windows Explorer เพื่อลบไฟล์เก่า
  2. เป็นหนึ่งการเดินทางไปยังกล่องโต้ตอบเปิดไฟล์ / บันทึกเป็น
  3. เสร็จสิ้นการดำเนินการด้วยการคลิกเมาส์เพียงไม่กี่ครั้งมากกว่าการดำเนินการบันทึกเป็น
  4. ดำเนินการเสร็จสิ้นด้วยการคลิกเมาส์เพียงไม่กี่ครั้งกว่า VBA หรือโซลูชันที่คล้ายกัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.