استف باید یک ماکرو ایجاد کند که عملیاتی را بر اساس سلولهایی که کاربر قبل از اجرای ماکرو انتخاب میکند، انجام دهد. او میداند که اگر کاربر محدودهای از سلولها را انتخاب کند چگونه این کار را انجام دهد، اما نمیداند که چگونه از سلولها در یک انتخاب عبور کند، اگر کاربر محدودهای از سلولهای غیرمرتبط را انتخاب کند.
وقتی صحبت از VBA می شود، تفاوت بسیار کمی بین انتخاب پیوسته و انتخاب غیرمرتبط وجود دارد. اکسل به شما امکان می دهد به هر یک از آنها یکسان دسترسی داشته باشید. قطعه کد زیر را در نظر بگیرید:
Dim c As Range
For Each c In Selection
do something here
MsgBox c.Address & vbTab & c.Value
Next c
در این مورد، سلولهای محدوده انتخابشده، یکی یکی، با استفاده از حلقه For... Next عبور میکنند. در داخل حلقه متغیر c نشان دهنده یک سلول جداگانه است و همانطور که نشان داده شده است می توان از آن در مراجع استفاده کرد.
اگر بنا به دلایلی میخواهید به هر ناحیه پیوسته در انتخاب دسترسی داشته باشید، میتوانید این کار را با آدرس دادن خاص به گروه Areas انجام دهید، همانطور که در این قطعه نشان داده شده است:
Dim a As Range
Dim c As Range
For Each a In Selection.Areas
Now each a refers to a contiguous range
Do something here with areas, if desired
For Each c In a.Cells
Now each c refers to a cell in the area
Do something here
MsgBox c.Address & vbTab & c.Value
Next c
Next a
همچنین باید توجه داشته باشید که اگر محدوده ای که می خواهید به آن دسترسی داشته باشید (هم پیوسته یا غیر پیوسته) در اکسل نامگذاری شده است، می توانید فقط به سلول های محدوده نامگذاری شده دسترسی داشته باشید. به سادگی کلمه "انتخاب" را در هر یک از این مثال ها با نام محدوده جایگزین کنید، به این ترتیب:
Dim c As Range
For Each c In Range("MyNamedRange")
do something here
MsgBox c.Address & vbTab & c.Value
Next c