فرض کنید یک کاربرگ خالی دارید و محدوده A1:F1 دارای فرمت "ادغام و مرکز" است که روی آن اعمال شده است. اگر ستون B را با کلیک کردن روی عنوان ستون انتخاب کنید، اکسل با دقت ستون B را انتخاب کرده و سلول B2 را به سلول فعال تبدیل می کند. این رفتار در Excel 2000 یا Excel 2002 اصلاح شد. در نسخه های قبلی اکسل، سلول ادغام شده (A1:F1) را در انتخاب دریافت می کنید.
ظاهراً VBA تا حدودی از رفتار رابط کاربری عقب می ماند، زیرا انتخاب کل ستون B نیز به انتخاب تمام ستون ها، A تا F ختم می شود:
Sub TestMacro1()
Range("B3").EntireColumn.Select
End Sub
به نظر می رسد هیچ راهی برای دور زدن این رفتار وجود ندارد. حتی اگر متد EntireColumn را حذف کنید و به سادگی ستون B را انتخاب کنید، باز هم تمام ستون ها، A تا F را دریافت می کنید:
Sub TestMacro2()
Range("B:B").Select
End Sub
احتمالاً این یک رویکرد برنامه نویسی بهتر است که ستونی را که برای انجام برخی اقدامات بر روی آن ستون آماده است انتخاب نکنید، بلکه مستقیماً آن عمل را انجام دهید. برای مثال، فرض کنید می خواهید تمام سلول های ستون B را پررنگ کنید. شما می توانید این کار را به این صورت انجام دهید:
Sub TestMacro3()
Range("B3").EntireColumn.Font.Bold = True
End Sub
این فقط سلول های ستون B را تحت تاثیر قرار می دهد و هیچ چیز در A یا C تا F را تحت تاثیر قرار می دهد. شما می توانید به طور مشابه از یک رویکرد تکراری برای پردازش سلول های ستون مورد نظر استفاده کنید:
Sub TestMacro4()
Dim rCell As Range
Dim X As Long
X = 1
For Each rCell In Range("B:B")
rCell.Value = X
X = X + 1
Next
End Sub
این یک مقدار را در هر سلول در ستون B وارد می کند، و به راحتی هر ادغامی که شامل یک سلول در ستون B باشد را نادیده می گیرد.
اگر اجباری است که بتوانید یک ستون کامل را انتخاب کنید، بدون اینکه هیچ ستونی به دلیل سلول های ادغام شده اضافه شود، ممکن است وسوسه شوید که از ویژگی MergeCells برای بررسی سلول های ادغام شده استفاده کنید. با توجه به راهنمای آنلاین VBA، موارد زیر باید سلول های ادغام شده در انتخاب را شناسایی کرده و سپس از ماکرو خارج شوند:
Sub TestMacro5()
Range("B3").EntireColumn.Select
If Selection.MergeCells Then
Exit Sub
End If
Perform rest of macro
End Sub
متاسفانه، آزمایش نشان می دهد که این کد کار نخواهد کرد. ویژگی MergeCells ظاهراً تنها زمانی True را برمی گرداند که کل انتخاب از سلول های ادغام شده تشکیل شده باشد، نه اگر انتخاب فقط حاوی چند سلول ادغام شده باشد. این بدان معناست که برای تعیین اینکه آیا سلول های ادغام شده انتخاب مورد نظر را تغییر داده اند یا خیر، به روش دیگری موکول شده اید، مانند موارد زیر:
Sub TestMacro6()
Range("B3").EntireColumn.Select
If Selection.Columns.Count > 1 Then
Exit Sub
End If
Perform rest of macro
End Sub
این رویکرد تعداد ستون های انتخابی را بررسی می کند و اگر اکسل گزارش دهد که بیش از یک ستون وجود دارد، حذف می شود.