MS Officeのファイルの名前を変更し、古いバージョンを同時に削除する方法


19

Microsoft Officeで、以前のファイル名のコピーを保持せずに別のファイル名にファイルを保存する場合、次の2つの手順が必要です。

  • まず、ファイル->名前を付けて保存...から新しい名前を選択します。コピーファイルのが行われます。
  • 次に、Windowsエクスプローラーに移動し、古い名前の古いファイルを削除します。

Officeからファイルを「名前変更」することで、これらの手順を簡単にしたいと思います。どうすればこれができますか?

より面白くて不可解なバージョンについては、リビジョン1を参照してください。


@Ramhound私はこれがソリューションの問題ではないことを確認できないと思います(Travisには私がしていることより良いソリューションがあり、roviuserはそれがVBAマクロであるように思われます-私はそうするかもしれません、私は何らかの理由でこれを行うとは思わなかった-または実際のVSTOコンパイルされたアドオン)
-enderland

同時ですか?さて、答えが得られたら、一度に2つの場所にいる方法を教えてください:
MDMoore313

EUは、MSが製品間で行うことができる統合を制限しているため、できません。オフィスがファイルの名前を変更できるようにすると、これらのルールが破られ、独占されます
チャド

@チャドは冗談ですか?OpenOfficeは名前変更機能を追加することもできます。
heinrich5991

回答:


12

これに答える「最も簡単な」方法は、この答えに大きく基づいているようです。

  1. 次のコードをnormal.dotmテンプレートに挿入します(C:\Documents and Settings\user name\Application Data\Microsoft\TemplatesWindows 7 for Wordにあります)
  2. normal.dotmを保存
  3. これを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

よくできました。このような質問と回答は、スーパーユーザーのすべてです。
-xdumaine

私はこれを広範囲に使用しています。スーパーユーザーに感謝します!
エンダーランド

11

組み込みの機能ではこれを行えません。事務所が文書で述べているように

ファイルの名前を変更すると、既存のファイルのファイル名が変更されます。誰かがプログラムで開いている間は、ファイルの名前を変更できません。ファイルを閉じて、共有ファイルの場合はチェックインする必要があります。開いているファイルを新しい名前で保存できますが、元の名前のファイルのコピーは引き続き存在します。

オリバーの答えのように、VSTOまたはVBAでカスタムの「名前を変更...」関数を作成することで、このような何かを組み込むことができるようです。新しいコピーを保存し、古いコピーを削除するようにプログラムする必要があります。


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

いいえ、組み込み関数ではありません。

回避策の1つは、新しい名前でファイルを保存することです。次に、[ファイル]、[名前を付けて保存]に戻り、古いファイルを削除します。これにより、ドキュメントを閉じたり、エクスプローラーを開いたり、名前を変更したり、再度開いたりするよりも効率的になります。


2
これは、エクスプローラーに乗って運転するよりもはるかに優れたオプションです。
エンダーランド

3

@Travisの回答のわずかなバリエーションを以下に示します。

繰り返しますが、これは組み込み関数ではありません。

  1. Wordでファイルを閉じ、必要に応じて変更を保存することを確認します。
  2. まだWordで、クリックしてファイルを開きます。
  3. 必要に応じてファイルに移動し、ファイルを右クリックして名前を変更します。
  4. [ファイルを開く]ダイアログで、名前を変更したファイルを開きます。

このソリューション:

  1. 古いファイルを削除するために、Windowsエクスプローラで長い孤独なドライブを削除します。
  2. [ファイルを開く/名前を付けて保存]ダイアログに1回だけアクセスします。
  3. [名前を付けて保存]操作よりもマウスを数回クリックするだけで操作を完了します。
  4. また、VBAまたは同様のソリューションよりも数回のマウスクリックだけで操作を完了します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.