کاری که هر روز تکرار میکنید را به 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 میگیرید.