اگر در حال توسعه ماکروهای اکسل هستید، ممکن است تعجب کنید که چگونه می توانید سلولی را نسبت به سلولی که در آن قرار دارید انتخاب کنید. به عنوان مثال، اگر از Excel استفاده می کنید و کلید Home را فشار می دهید، سلول سمت چپ ردیف فعلی انتخاب می شود. متأسفانه، استفاده از ضبط کننده ماکرو برای ضبط در این وضعیت کمکی نمی کند زیرا به جای عمل واقعی شما، مقصد عمل را ثبت می کند. به عنوان مثال، اگر صفحه اصلی را فشار دهید و در ردیف چهارم یک کاربرگ باشید، اکسل اقدام Home را ثبت نمی کند، بلکه مقصد را به صورت زیر ثبت می کند:
Range("A4").Select
اگر می خواهید همیشه به سلول A4 بروید این عالی است، اما اگر می خواهید به سلول اول هر ردیفی که هستید بروید وحشتناک است.
مانند بسیاری از وظایف در VBA، راه های مختلفی برای حل این معضل وجود دارد. روش اول در واقع یک تغییر در آنچه ضبط کننده ماکرو برمی گرداند، همانطور که در بالا نشان داده شده است. تنها کاری که باید انجام دهید این است که نشانگر ردیف را تغییر دهید تا نشان دهنده ردیف فعلی باشد، مانند شکل زیر:
Range("A" & (ActiveCell.Row)).Select
VBA مشخص می کند که ردیف فعلی چیست، آن را با علامت "A" به هم می چسباند و با یک مرجع سلولی می آید که با متد Range کار می کند.
تکنیک دیگری که می توانید از آن استفاده کنید این است که ویژگی Cells را به صورت زیر کار کنید:
Cells(Application.ActiveCell.Row, 1).Select
این رویکرد، البته، می تواند به گونه ای تغییر یابد که شما در واقع هر سلولی را در ردیف فعلی انتخاب کنید. تنها کاری که باید انجام دهید این است که نام ستون (1، در مثال بالا) را به عددی که نشان دهنده ستون مورد نظر است تغییر دهید.
روش دیگر (که همین نتیجه را ایجاد می کند) استفاده از شی Range در ارتباط با ویژگی Cells است، همانطور که در اینجا نشان داده شده است:
Range(Cells(Selection.Row, 1).Address).Select
Selection.Row شماره ردیف انتخاب فعلی را می دهد. ویژگی Address متد Cells آدرس یک سلول خاص را در قالب A$1$ برمی گرداند. سپس از این آدرس به عنوان پارامتر شی Range استفاده می شود و سلول واقعی با روش Select انتخاب می شود.