رابین می پرسد آیا راهی برای استفاده از قابلیت های قالب بندی شرطی Excels برای تغییر فونت استفاده شده در یک سلول یا تغییر اندازه فونت در یک سلول وجود دارد؟ پاسخ کوتاه این است که خیر، نمی توان این کار را انجام داد – حداقل نه با قالب بندی مشروط. (کنترل هایی که به شما امکان می دهند نام و اندازه فونت را مشخص کنید، در کادر محاوره ای قالب بندی که با قالب بندی شرطی استفاده می شود، خاکستری می شوند.)
با این حال، می توانید از یک ماکرو برای بررسی محتویات سلول و ایجاد تغییرات در ظاهر یک سلول استفاده کنید. ماکرو زیر را در نظر بگیرید که هر سلولی را که هنگام اجرای ماکرو انتخاب کرده اید بررسی می کند. اگر طول هر یک از سلول ها بیش از دو کاراکتر یا مقدار آن بیشتر از 10 باشد، فونت سلول ها تغییر می کند.
Sub DoReformat()
Dim rCell As Range
For Each rCell In Selection.Cells
If Len(rCell.Text) > 2 Or _
Val(rCell.Value) > 10 Then
rCell.Font.Name = "Arial"
rCell.Font.Size = 16
Else
rCell.Font.Name = "Times New Roman"
rCell.Font.Size = 12
End If
Next
End Sub
برای استفاده از ماکرو، کافی است سلول های مورد نظر خود را تغییر دهید و سپس ماکرو را اجرا کنید. اگر می خواهید قالب بندی به طور خودکار تغییر کند، می توانید بررسی ماکرو را انجام دهید تا ببینید آیا تغییر در محدوده خاصی از سلول ها ایجاد شده است یا خیر:
Private Sub Worksheet_Calculate()
Dim rng As Range
Dim rCell As Range
Set rng = Range("A1:A10")
For Each rCell In rng
If Len(rCell.Text) > 2 Or _
Val(rCell.Value) > 10 Then
rCell.Font.Name = "Arial"
rCell.Font.Size = 16
Else
rCell.Font.Name = "Times New Roman"
rCell.Font.Size = 12
End If
Next
End Sub
این ماکرو، هنگامی که به شی کاربرگ اضافه می شود، هر بار که کاربرگ دوباره محاسبه می شود، اجرا می شود. محدوده A1:A10 را بررسی می کند و همان تست های ماکرو قبلی را اعمال می کند. نتیجه این است که قالب بندی سلول ها به طور مداوم بررسی و تغییر می کند. برای اینکه ماکرو محدوده متفاوتی را بررسی کند، کافیست آدرس های اختصاص داده شده به متغیر rng نزدیک ابتدای ماکرو را تغییر دهید.
یکی از ایرادات این ماکرو این است که اگر محدوده بسیار زیادی برای بررسی آن داشته باشید، می تواند کند شود. اگر A1:A10 (ده سلول) را بررسی کنید خیلی سریع انجام می شود، اما اگر به طور مداوم B2:N465 را بررسی کنید (بیش از 6000 سلول) ممکن است بسیار کندتر پیش رود. در این صورت، ممکن است بخواهید ماکرو را طوری طراحی کنید که هر زمان که کاربرگ تغییر می کند، اجرا شود، اما تنها در صورتی عمل می کند که تغییر در سلولی در محدوده هدف شما انجام شده باشد. نسخه زیر نیز به شی کاربرگ اضافه شده است:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rCell As Range
If Union(Target, Range("A1:A10")).Address = _
Range("A1:A10").Address Then
Application.EnableEvents = False
For Each rCell In Target
If Len(rCell.Text) > 2 Or _
Val(rCell.Value) > 10 Then
rCell.Font.Name = "Arial"
rCell.Font.Size = 16
Else
rCell.Font.Name = "Times New Roman"
rCell.Font.Size = 12
End If
Next
Application.EnableEvents = True
End If
End Sub
ماکرو از تابع Union استفاده می کند تا بررسی کند سلول های تغییر یافته (به کنترل کننده رویداد در متغیر Target ارسال شده) با محدوده مورد نظر شما همپوشانی دارند یا خیر. اگر این کار را انجام دهند، بررسی روی سلول های محدوده Target انجام می شود.
یکی از مواردی که باید در مورد ماکروهایی که بر قالب بندی تأثیر می گذارند در نظر داشته باشید این است که اگر قالب بندی شرطی روی سلولی اعمال شود که توسط ماکرو نیز بررسی می شود، قالب بندی در قالب بندی شرطی بر قالب بندی در ماکرو اولویت دارد. اگر ماکرو شما در حال تغییر نام قلم و اندازه فونت است، این نگرانی بزرگی نیست زیرا قالب بندی شرطی بر این ویژگی ها تأثیر نمی گذارد. با این حال، اگر ماکرو خود را تغییر دهید تا یک ویژگی فرمت متفاوت را نیز تغییر دهید - مانند رنگ سلول - و آن ویژگی نیز با قالب شرطی تغییر کند، به نظر نمی رسد که ماکرو کاری انجام داده است زیرا اکسل از قالب بندی شرطی در اولویت استفاده می کند. ماکرو انجام می دهد.