Tự động lưu bản sao tài liệu trên đĩa mềm (Microsoft Word)
Người dùng các phiên bản WordPerfect cũ hơn có thể quen thuộc với lệnh cho phép bạn lưu bản sao của tài liệu hiện tại vào ổ A: mà không cần sửa đổi điều kiện của tài liệu hoặc thay đổi nơi nó thường được lưu. Do đó, nếu bạn mở C: \ My Docs \ MyFile.doc và bắt đầu lệnh này, một bản sao của tệp sẽ được tạo thành A :, và lần tiếp theo bạn sử dụng lệnh Lưu, tệp vẫn được lưu vào vị trí bình thường trên C:.
Word không bao gồm một tính năng như vậy và một số người nghĩ rằng nó nên như vậy.
Có vẻ như một nơi tự nhiên cho một lệnh như vậy là menu con Gửi Tới có sẵn từ menu Tệp. Thông thường, menu con này chỉ bao gồm một số mục, vì nó được sử dụng cho các lệnh Word gốc cho phép gửi fax trực tiếp hoặc sử dụng kết nối e-mail. May mắn thay, nó giống như bất kỳ menu hoặc menu con nào khác trong Word và có thể được tùy chỉnh. Cách tùy chỉnh menu đã được đề cập nhiều trong các số báo khác của WordTips.
Vì việc thêm vào menu con khá dễ dàng, vấn đề là bạn cần phải thực hiện một lệnh sao chép thực tế hoặc lưu vào ổ đĩa A:. Đây là nơi mà macro tùy chỉnh đến để giải cứu, vì không có lệnh Word gốc nào để đạt được hiệu quả mong muốn.
Một cách tiếp cận là chỉ cần lưu tài liệu hiện tại vào ổ A:. Vấn đề với điều này là từ thời điểm đó trở đi, Word nghĩ rằng tài liệu thuộc về ổ đĩa A:. Giải pháp là lưu trữ vị trí hiện tại của tệp, lưu vào A :, và sau đó lưu lại, nhưng lần này là vị trí ban đầu. Macro sau thực hiện điều này trong một vài bước đơn giản:
Sub FileCopyToA() Dim OrName As String OrName = ActiveDocument.FullName ActiveDocument.SaveAs "A:\" + ActiveDocument.Name ActiveDocument.SaveAs OrName End Sub
Tuy nhiên, có những hạn chế đối với cách tiếp cận đơn giản như vậy. Đầu tiên (và có khả năng quan trọng nhất), nếu bạn đang làm việc trên một tệp lớn, nó có thể không vừa trên ổ A:. Trong trường hợp đó, macro sẽ chết một cái chết có thể bỏ qua và bạn sẽ cần thực hiện các bước để khôi phục theo cách thủ công bằng cách lưu tệp của bạn về vị trí ban đầu của nó. Một thực tế khác của cuộc sống với macro này là nó sẽ ghi đè lên bất kỳ tài liệu cùng tên nào hiện có trên ổ đĩa A:. Cuối cùng, nếu bạn không muốn lưu tài liệu mà chỉ muốn có một ảnh chụp nhanh trên A :, thì macro này không dành cho bạn.
Một phiên bản linh hoạt hơn của macro FileCopyToA là DoubleCopy, nhắc người dùng tìm ổ đĩa trước khi thực sự tạo bản sao.
Thật không may, nó cũng có những nhược điểm chung.
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
Một trong những hạn chế khác của các phương pháp được trình bày cho đến nay là chúng có thể chậm – rất chậm. Word vốn dĩ rất chậm trong việc lưu tài liệu vào ổ đĩa mềm. Trừ khi tài liệu của bạn rất nhỏ, việc lưu vào ổ cứng và sau đó sử dụng lệnh sao chép để sao chép tệp vào đĩa mềm sẽ nhanh hơn. Macro sau, SentToDriveA, thực hiện phương pháp này.
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
Trước tiên, macro sẽ kiểm tra để đảm bảo rằng tài liệu hiện tại đã được lưu ở đâu đó trên ổ cứng của bạn. (Nói cách khác, nó không phải là một tài liệu hoàn toàn mới.) Sau đó, nó đóng tài liệu, sao chép nó vào A :, và mở lại tài liệu. Lý do đóng là Word sẽ không cho phép sao chép tài liệu đang mở. Vì tài liệu đã bị đóng, điều quan trọng là macro này phải được lưu trong mẫu Normal.Dot hoặc trong một số mẫu chung khác.
Cuối cùng, nếu bạn muốn tạo một macro chụp “ảnh chụp nhanh” của tài liệu hiện tại mà không thực sự lưu nó vào ổ cứng của bạn trước khi tạo bản sao trên A :, bạn sẽ cần sao chép tài liệu của mình và sau đó lưu bản sao vào A :. Tuy nhiên, sao chép toàn bộ tài liệu đòi hỏi nhiều nỗ lực hơn, chỉ đơn giản là lấy nội dung văn bản và chuyển nó sang một tài liệu mới. Các tài liệu Word được chia thành các phần đại diện cho phần nội dung chính, đầu trang và chân trang, chú thích cuối trang, v.v. Chúng được tham chiếu trong VBA bằng cách sử dụng StoryRanges với mỗi StoryRange có một StoryType. Macro sau đây sao chép mỗi StoryRanges vào một tài liệu mới và sau đó nhắc lưu tài liệu mới trên 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
Cách tiếp cận cuối cùng này rõ ràng có thể được sửa đổi để tài liệu sao chép mới tạo được đóng lại sau khi lưu. Bằng cách đó, tài liệu gốc của bạn sẽ được mở không lưu vào đĩa khi macro hoàn tất.
Nếu tất cả các kỹ thuật được mô tả trong mẹo này nghe có vẻ thú vị với bạn, nhưng bạn không có ổ đĩa mềm trên hệ thống của mình, đừng thất vọng. Bạn cũng có thể dễ dàng sử dụng các macro tương tự để lưu các bản sao vào ổ đĩa flash của mình. Miễn là bạn biết ký tự ổ đĩa cho ổ đĩa flash, chỉ cần thay thế ký tự ổ đĩa đó bằng ký tự chỉ định ổ đĩa A: trong macro.
(Hoạt động như một sự quyến rũ.)
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên các trang WordTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
WordTips là nguồn của bạn để đào tạo Microsoft Word hiệu quả về chi phí.
(Microsoft Word là phần mềm xử lý văn bản phổ biến nhất trên thế giới.) Mẹo này (1715) áp dụng cho Microsoft Word 97, 2000, 2002 và 2003.