5/5 - (12 امتیاز)

در مطلب مربوط به نحوه استفاده از متغیرها در ماکرونویسی، اشیاء به عنوان نوعی از متغیر در نظر گرفته شدند. با این وجود که این نوع دسته بندی کاملاً قابل قبول است، اما در این مطلب ما متغیرهای اشیاء را با جزئیات بیشتری مورد بررسی قرار خواهیم داد.

اگر مطلب مربوط به مفهوم کدنویسی در برنامه نویسی VBA را به خاطر داشته باشید، در آنجا عنوان کردیم که اشیا در دسته های مختلف قرار می گیرند، صفحه های کاری، سلولها ، نمودارهاو … همگی جزء اشیاء هستند. در VBA، این امکان وجود دارد که یک شی به عنوان یک متغیر شناخته شود.

همچنین میتوان یک قدم جلوتر رفت و یک شی متغیر(object variable) را تعریف کرد. به عنوان مثال، کد زیر یک شی متغیر ورک شیت  به نام wksheet ایجاد کرده است.

هر دو کد بالا قابل قبول هستند و بدون خطا اجرا خواهند شد. یک متغیر که به عنوان شی(object) تعریف شده است میتواند تمام انواع اشیاء را در برگیرد. اما زمانی که یک متغیر را بعنوان نوعی خاص از اشیاء تعریف میکنیم، آن متغیر صرفا میتواند همان نوع از متغیر را دربرگیرد. برای مثال زمانی که یک متغیر را از نوع worksheet تعریف میکنیم، آن متغیر به صورت خاص میتواند فقط مقدار ورک شیت را بپذیرد. 

اشیاء همیشه می بایست تنظیم(set) شوند!

بعد از تعریف یک متغیر شی(object variable) بعضی چیزها میتوانند در درون آن قرار گیرند. . به طور معمول برای اختصاص دادن مقادیر به متغیرها از نماد مساوی(=) استفاده میشود.

اما این کار بر روی اشیاء عمل نمیکند و منجر به یک پیغام خطا میشود.

 اشیاء باید تنظیم(Set) شوند.  برای انجام این کار کلمه “set” قبل از نام متغیر ظاهر میشود.

حال مبتوانبد در زمان کدنویسی به سادگی و  صرفا با استفاده از wksheet به برگه فعال (ActiveWorksheet) اشاره کنید. ممکن است در اینجا به دلیل پایین بودن حجم کار صرفه جویی در زمان ناشی از این تغییرات را متوجه نشوید ولی زمانی که کدهای سنگین مینویسید و به صورت حرفه ای در اکسل ماکرونویسی میکنید، به میزان زیادی در زمانتان صرفه جویی میشود و این موضوع به روشنی قابل درک است.  به عنوان مثال، وقتی به طور مداوم به یک سلول خاص مراجعه میکنیم، برای اینکه هر دفعه کد زیر را بنویسید، زمان زیادی از شما خواهد گرفت.

به جای آن، میتوانید یک متغیر شیء محدوده(range) ایجاد کنید.

حالا، هر بار که مقدار سلول مورد نیاز است، کد میتوان به سادگی زیر باشد:

متغیر شی های رایج در کدنویسی وی بی ای

هر شیء میتواند به عنوان یک متغیر شیء استفاده شود، اما انواع متداول آنها برای کسانی که به تازگی کدنویسی وی بی ای  را آغاز کرده اند عبارتند از:

Workbook: هر ورک بوک اکسلی که در حال حاضر باز باشد:

Worksheets: هر برگه کاری (Worksheet) داخل یک workbook

Range: هر محدوه ای از سلولها در یک ورک شیت

'اختصاص محدوده ای از سلول ها به یک متغیر
Dim rng As Range
Set rng = Workbooks(1).Sheets(2).Range("B2")

یادگیری بیشتر VBA:
پنجره کدنویسی وی بی ای اکسل | شروع برنامه نویسی VBA
آموزش رایگان ماکرونویسی در اکسل و برنامه نویسی VBA
ضبط ماکرو در برنامه نویسی وی بی ای (VBA) اکسل

مشترک شدن
Notify of
guest

4 نظرات
نظردهی درون متنی
مشاهده همه نظرات
محمد

سلام من یه فرم کارت تردد درست کردم که با زدن یک دکمه عکس پرسنلی 5 نفر که توی فرم مشخص کردم رو لود میکنه میاره روی فرم برای بار دوم اگه بخوام دکمه رو بزنم دوباره یه عکس جدید دقیق جای قبلی با مختصاتی که دادم قرار میگیره الان میخوام که فقط اون عکسای قبلی که قرار گرفته حذف بشه ولی نمیدونم چیکار کنم البته میتونم کل عکس و شیء های توی صفحه رو هر بار حذف کنم ولی چون چند تا متن توی کادر گذاشتم اونا رو نمیتونم با قشنگ با کد بزارم سر جاش ممنون میشم اگه… مطالعه بیشتر »

امیر دایی

سلام
موقعی که دارید عکس ها رو توی فرم قرار میدید، اسم هر عکس رو توی سلول زیرش هم بذارید. وقتی میخواید حذف کنید براساس اسمی که داخل سلول مورد نظر هست می تونید اون شی رو حذف کنید.

مجید

 Dim namsheet(20) As Worksheet
 Dim wsDest As Worksheet
 
   Set namsheet(1) = Workbooks(“PriceChange1.xlsm”).Worksheets(“MEGA”)
   Set namsheet(2) = Workbooks(“PriceChange1.xlsm”).Worksheets(“IRCA”)
   Set namsheet(3) = Workbooks(“PriceChange1.xlsm”).Worksheets(“ATC”)
   Set namsheet(4) = Workbooks(“PriceChange1.xlsm”).Worksheets(“NGK”)
For i = 1 To 4
wsDest = namsheet(i)
Print wsDest
Next i
سلام
مشکل این ترکیب چیست ؟
من باید بتونم شیت های برنامه را در داخل یک loop بارگذاری کنم و یک سری عملیات را انجام بدم
ممنون میشم روش درست رو بیان کنید

امیر دایی

سلام شاید کد نویسی تنها کاری توی دنیا باشه که اگر یک نقطه یا ویرگول یا … رو درست نذاریم اجرا نمیشه یا درست اجرا نمیشه. در اینجا شما از دستور print استفاده کردید در صورتی که باید ازDebug.Print باید استفاده کنید. مشکل دومش این هست که شما به هر عضو از آرایه یک آبجکت شیت اختصاص دادید ولی وقتی میاد توی حله از wsDest استفاده می کنید کلمه کلیدی Set قبلش نذاشتید. مشکل سوم این هست که میخواید کل آبجکت شیت پرینت کنید، در صورتی که باید یک عضو از این شی مثلا نامش پرینت کنید. wsDest.name توی کد… مطالعه بیشتر »