古いバージョンのWordPerfectのユーザーは、ドキュメントの状態を変更したり、通常の保存場所を変更したりせずに、現在のドキュメントのコピーをA:ドライブに保存できるコマンドに精通している場合があります。したがって、C:\ My Docs \ MyFile.docを開いてこのコマンドを開始すると、ファイルのコピーがA:に作成され、次に[保存]コマンドを使用しても、ファイルは通常の場所に保存されます。 Cで:。

Wordにはそのような機能は含まれておらず、そうすべきだと考える人もいます。

このようなコマンドの自然な場所は、[ファイル]メニューから利用できる[送信]サブメニューのようです。通常、このサブメニューには、直接ファックスまたは電子メール接続の使用を可能にするネイティブWordコマンドに使用されるため、いくつかの項目のみが含まれます。幸い、Wordの他のメニューやサブメニューと同じように、カスタマイズすることができます。メニューをカスタマイズする方法は、_WordTips_の他の問題で広範囲にカバーされています。

サブメニューへの追加はかなり簡単なので、問題は実際のコピーを実行するか、A:ドライブに保存するコマンドを思い付くことです。目的の効果を実現するためのネイティブのWordコマンドがないため、ここでカスタムマクロが役に立ちます。

1つの方法は、現在のドキュメントをA:ドライブに保存することです。これに伴う問題は、その時点から、WordはドキュメントがA:ドライブに属していると見なすということです。解決策は、ファイルの現在の場所を保存し、それをA:に保存してから、もう一度保存することですが、今回は元の場所に保存します。次のマクロは、いくつかの簡単な手順でこれを実行します。

Sub FileCopyToA()

Dim OrName As String     OrName = ActiveDocument.FullName     ActiveDocument.SaveAs "A:\" + ActiveDocument.Name     ActiveDocument.SaveAs OrName End Sub

ただし、このような単純なアプローチには欠点があります。まず(そして潜在的に最も重要な)、大きなファイルで作業している場合、それはA:ドライブに収まらない可能性があります。その場合、マクロは無視できるほどの死を迎えます。ファイルを元の場所に再保存して、手動で回復する手順を実行する必要があります。このマクロのもう1つの事実は、A:ドライブ上の既存の同じ名前のドキュメントを上書きすることです。最後に、ドキュメントを保存したくないが、A:のスナップショットだけが必要な場合、このマクロは適していません。

FileCopyToAマクロのやや柔軟なバージョンはDoubleCopyです。これは、実際にコピーを作成する前に、ユーザーにドライブの入力を求めます。

残念ながら、同じ一般的な欠点もあります。

Sub DoubleCopy()

Dim Message As String, Title As String     Dim Default As String, Drive As String     Dim ffname as String, fname as String

On Error GoTo Quit     Message = "Enter drive letter for document (A, C, D)"

Title = "Send Document to File"

Default = "A"



' Display message, title, and default value     Drive = InputBox(Message, Title, Default)

If Drive > "" Then         ffname = ActiveDocument.FullName         fname = Drive & ":\" & ActiveDocument.Name         ActiveDocument.SaveAs fname         ActiveDocument.SaveAs ffname     End If     Quit:

End Sub

これまでに提示されたアプローチの他の欠点の1つは、それらが遅くなる可能性があることです—非常に遅くなります。 Wordは、ドキュメントをフロッピードライブに保存するのに本質的に時間がかかります。ドキュメントが非常に小さい場合を除いて、ハードドライブに保存してから、コピーコマンドを使用してファイルをフロッピーにコピーする方が高速です。次のマクロSentToDriveAは、このアプローチを採用しています。

Sub SentToDriveA()

If ActiveDocument.Saved = False Then ActiveDocument.Save     System.Cursor = wdCursorWait     OrigLongFileName = ActiveDocument.Name     OldPath = ActiveDocument.Path & Application.PathSeparator     If ActiveDocument.Path = "" Then         MsgBox "Please save this document before sending to drive A:", _            vbOKOnly, "This Document Not Saved"

Else         Documents(ActiveWindow.Caption).Close         FileCopy OldPath & OrigLongFileName, "a:\" & OrigLongFileName         Documents.Open FileName:=OldPath & OrigLongFileName         Application.GoBack     End If     System.Cursor = wdCursorNormal End Sub

マクロは最初に、現在のドキュメントがハードドライブのどこかに保存されていることを確認します。 (つまり、新しいドキュメントではありません。)次に、ドキュメントを閉じてA:にコピーし、ドキュメントを再度開きます。終了の理由は、Wordが開いているドキュメントのコピーを許可しないためです。ドキュメントが閉じているため、このマクロをNormal.Dotテンプレートまたはその他のグローバルテンプレートに保存することが重要です。

最後に、A:にコピーを作成する前に実際にハードドライブに保存せずに、現在のドキュメントの「スナップショット」を取得するマクロを作成する場合は、ドキュメントを複製してから、複製をAに保存する必要があります。 :。ただし、ドキュメント全体をコピーするには、テキストコンテンツを取得して新しいドキュメントに渡すだけで、もう少し手間がかかります。 Word文書は、本体、ヘッダーとフッター、脚注などを表すチャンクに分割されます。これらは、StoryRangesを使用してVBAで参照され、各StoryRangeにはStoryTypeがあります。次のマクロは、各StoryRangesを新しいドキュメントにコピーしてから、新しいドキュメントをAに保存するように求めます。

Public Sub CopyToA()

Dim docActive As Document     Dim docNew As Document     Dim rngActiveDocPart As Range     Dim rngNewDocPart As Range     Dim strDocName As String     Dim strTemplateName As String

' reference the current document     Set docActive = ActiveDocument

' get the name of doc and also path/name     ' of the template it's based-on     strDocName = docActive.Name     strTemplateName = docActive.AttachedTemplate.FullName

' create a copy document based on same template     Set docNew = Documents.Add(strTemplateName)



' loop to copy each part of the active doc to the new doc     For Each rngActiveDocPart In docActive.StoryRanges         ' reference same part         Set rngNewDocPart = docNew.StoryRanges _            (rngActiveDocPart.StoryType)

rngActiveDocPart.Copy         rngNewDocPart.Paste     Next rngActiveDocPart

' make the new document active     docNew.Activate

' offer to save it on floppy drive A:\     With Dialogs(wdDialogFileSaveAs)

.Name = "A:\" & strDocName         .Show     End With End Sub

この最後のアプローチは、新しく作成されたコピードキュメントが保存後に閉じられるように明らかに変更できます。そうすれば、マクロが完了したときに、元のドキュメントがディスクに保存されずに開いたままになります。

このヒントで説明されているすべてのテクニックが興味深いと思われるが、システムにフロッピードライブがない場合でも、絶望しないでください。同じマクロを使用して、フラッシュドライブにコピーを保存することも簡単にできます。フラッシュドライブのドライブ文字を知っている限り、マクロのA:ドライブ指定子をそのドライブ文字に置き換えてください。

(チャームのように機能します。)

注:

このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ wordribbon-WordTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(1715)は、Microsoft Word 97、2000、2002、および2003に適用されます。