فصل ۷: خودکارسازی و بهره‌وری — Find & Replace، AutoCorrect، میانبر و ماکرو

ماکرو و VBA مقدماتی: ضبط ماکرو، ویرایش کد، ماکروی فارسی‌سازی ارقام و دکمه برای آن

کاری که هر روز تکرار می‌کنید را به Word بسپارید

ماکرو مجموعه‌ای از دستورها به زبان VBA است که Word اجرا می‌کند. راه اول ساختنش، ضبط است: View ← Macros ← Record Macro (یا دکمه‌ی ضبط در نوار وضعیت). نام (بدون فاصله)، Store macro in: Normal.dotm (همه‌ی اسناد) یا این سند، و اختیاری: Assign to Button یا Keyboard. سپس هر کاری که انجام می‌دهید ضبط می‌شود (کلیک ماوس داخل متن ضبط نمی‌شود؛ با کیبورد حرکت کنید). Stop Recording. اجرا: Alt+F8 ← Run.

ویرایش کد: Alt+F11

ویرایشگر VBA باز می‌شود. ماکروی ضبط‌شده در Modules ← NewMacros است. کد ضبط‌شده معمولاً شلوغ است؛ با کمی خواندن می‌توانید ساده‌اش کنید. یک نمونه‌ی کاربردی که ضبط‌کردنی نیست و باید نوشت — تبدیل ارقام لاتین به فارسی در کل سند:

Sub ArghamFarsi()
    Dim i As Integer
    Dim latin As String, farsi As String
    latin = "0123456789"
    farsi = ChrW(1776) & ChrW(1777) & ChrW(1778) & ChrW(1779) & ChrW(1780) & _
            ChrW(1781) & ChrW(1782) & ChrW(1783) & ChrW(1784) & ChrW(1785)
    For i = 1 To 10
        With ActiveDocument.Content.Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Text = Mid(latin, i, 1)
            .Replacement.Text = Mid(farsi, i, 1)
            .Forward = True
            .Wrap = wdFindContinue
            .MatchWildcards = False
            .Execute Replace:=wdReplaceAll
        End With
    Next i
    MsgBox "ارقام فارسی شد."
End Sub

و نمونه‌ی دوم: پاک‌سازی استاندارد متن فارسی (ی و ک عربی، فاصله‌های تکراری، فاصله قبل از نقطه):

Sub PaksaziFarsi()
    Dim pairs, i
    pairs = Array(ChrW(1610), ChrW(1740), ChrW(1603), ChrW(1705), _
                  "  ", " ", " .", ".", " ،", "،", " :", ":")
    For i = 0 To UBound(pairs) Step 2
        With ActiveDocument.Content.Find
            .ClearFormatting: .Replacement.ClearFormatting
            .Text = pairs(i): .Replacement.Text = pairs(i + 1)
            .Wrap = wdFindContinue: .MatchWildcards = False
            .Execute Replace:=wdReplaceAll
        End With
    Next i
End Sub

دکمه و میانبر

Options ← Quick Access Toolbar ← Choose commands from: Macros ← Add ← Modify برای آیکون و نام. یا Customize Ribbon ← گروه سفارشی. میانبر: Keyboard shortcuts ← Categories: Macros. حالا Ctrl+Shift+F (مثلاً) کل سند را فارسی‌سازی می‌کند.

ذخیره و امنیت

ماکروی ذخیره‌شده در Normal.dotm در همه‌ی اسناد شما هست ولی با فایل ارسال نمی‌شود. ماکروی داخل سند نیاز به فرمت .docm دارد؛ docx ماکرو را دور می‌ریزد (هشدار می‌دهد). گیرنده‌ی .docm نوار زرد «Enable Content» می‌بیند؛ به‌دلیل بدافزارهای ماکرویی، فایل‌های ماکرودار از اینترنت به‌طور پیش‌فرض مسدودند (Options ← Trust Center ← Macro Settings). برای تیم، ماکروها را در یک قالب مشترک (.dotm) در پوشه‌ی Startup بگذارید (File Locations ← Startup) تا به‌عنوان Global Template همیشه بارگذاری شوند.

نکته‌هایی که کمتر کسی می‌داند

  • در VBA Editor با F8 کد را خط‌به‌خط اجرا کنید و با Ctrl+G پنجره‌ی Immediate را باز کنید؛ ? ActiveDocument.Paragraphs.Count بلافاصله جواب می‌دهد.
  • Document_Open و AutoExec نام‌های ویژه‌اند: ماکرویی با این نام هنگام باز شدن سند/Word اجرا می‌شود (و به همین دلیل ابزار بدافزار بوده‌اند).
  • ماکروی ضبط‌شده شامل Selection است (روی متن انتخابی)؛ برای کل سند از ActiveDocument.Content یا حلقه روی Paragraphs استفاده کنید.
  • برای خروجی PDF جداگانه از هر Section (بعد از Mail Merge) چند خط VBA کافی است: حلقه روی ActiveDocument.Sections، Range.ExportAsFixedFormat.
  • Organizer (فصل ۲) تب Macro Project Items دارد؛ ماکروها را مثل Style بین قالب‌ها کپی کنید. با Export File در VBA Editor هم .bas می‌گیرید.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.