Dạo gần đây tôi có rơi vào một trường hợp như sau: một công ty đối tác muốn được xem qua bố cục các bài báo cáo và thuyết trình mà tôi đã chuẩn bị từ trước. Để tránh để lộ những số liệu bí mật của công ty mình, tôi phải nghĩ cách để mã hóa dữ liệu lại. Một trong những phương pháp mà tôi nghĩ đến đó là xóa đi tất cả bảng biểu và thay thế tất cả các chữ số bằng một ký tự đặc biệt (ở đây tôi lựa chọn dấu X để mã hóa số liệu).
Sau khi xác định được cách thức thực hiện, việc đầu tiên là phải tìm cách viết đè nội dung mới lên toàn bộ văn bản. Lúc đầu tôi băn khoăn liệu có một công thức đơn giản có dạng “Tìm kiếm/Thay thế”, với chức năng tự động biến tất cả các chữ số thành dấu X hay không. Không may là có vẻ chức năng “Tìm kiếm/Thay thế” cơ bản trong Microsoft không thực sự hỗ trợ điều đó. Vì thế, tôi bị kẹt giữa 2 sự lựa chọn, hoặc là thực hiện 10 lệnh tìm kiếm và thay thế liên tục cho từng tệp dữ liệu một (từ số 0 đến số 9), hoặc tự viết ra một macro VBA mới. Bạn biết tôi đã chọn phương án nào rồi đấy?
Ban đầu macro này được viết dành riêng cho Powerpoint nhưng tôi đã phát triển nó lên cho cả Microsoft Word bởi vì thực chất nhiều người cũng có nhu cầu cần bảo mật thông tin trong Word nữa. Rất tiếc là không có phiên bản dành cho Excel do nó sử dụng quá nhiều biến số cần phải xét đến nên rất khó để tạo 1 macro thích hợp cho tất cả người dùng. Tuy vậy, nếu bạn vẫn muốn sử dụng chức năng này trong Excel, hãy tham khảo bài viết của tôi trên The Code Vault Blog về cách tìm kiếm & thay thế mã lệnh macro tại đây.
Lệnh macro VBA dành cho Powerpoint
Lệnh macro này sẽ hoạt động xuyên suốt tất cả các slide đang bật trên nền cửa sổ thuyết trình và lập tức thay thế tất cả các chữ số thành dấu X trong tích tắc! Nếu bạn muốn biết cách để chèn macro này vào trong Powerpoint, tham khảo bài viết của tôi về cách tạo 1 lệnh macro tại đây.
Sub ClassifyNumbers() 'PURPOSE: Replace all numerical values with an "x" in the active PowerPoint Presentation 'SOURCE: www.TheSpreadsheetGuru.com Dim fnd As Variant Dim rplc As Variant Dim NumberArray As Variant Dim TxtRng As TextRange Dim TmpRng As TextRange Dim sld As Slide Dim shp As Shape 'Find/Replace Variables NumberArray = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) rplc = "x" 'Loop Through Each Slide For Each sld In ActivePresentation.Slides For y = LBound(NumberArray) To UBound(NumberArray) For Each shp In sld.Shapes fnd = NumberArray(y) If shp.HasTextFrame Then If shp.TextFrame.HasText Then Set TxtRng = shp.TextFrame.TextRange Set TmpRng = TxtRng.Replace(FindWhat:=fnd, _ ReplaceWhat:=rplc, WholeWords:=False) End If End If 'Replace Other Instances (if necessary) Do While Not TmpRng Is Nothing Set TmpRng = TxtRng.Replace(FindWhat:=fnd, _ ReplaceWhat:=rplc, WholeWords:=False) Loop Next shp Next y Next sld MsgBox "All numbers are now classified (ie " & rplc & rplc & ")!" End Sub
Lệnh macro VBA dành cho Word
Lệnh macro này sẽ hoạt động xuyên suốt tất cả các trang đang bật trên nền cửa sổ soạn thảo và lập tức thay thế tất cả các chữ số thành dấu X trong tích tắc! Nếu bạn muốn biết cách để chèn macro này vào trong Word, tham khảo bài viết của tôi về cách tạo 1 lệnh macro tại đây.
Sub ClassifyNumbers() 'PURPOSE: Replace all numerical values with an "x" in the active Word Document 'SOURCE: www.TheSpreadsheetGuru.com Dim rplc As Variant Dim NumberArray As Variant Application.ScreenUpdating = False 'Find/Replace Variables NumberArray = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) rplc = "x" 'Loop through all numbers and replace them For x = LBound(NumberArray) To UBound(NumberArray) With ActiveDocument.Content.Find .Forward = True .Wrap = wdFindStop .Execute _ FindText:=NumberArray(x), _ ReplaceWith:=rplc, _ Replace:=wdReplaceAll, _ MatchCase:=False End With Next x Application.ScreenUpdating = True MsgBox "All numbers are now classified (ie " & rplc & rplc & ")!" End Sub