رویداد Activate  در کاربرگ  - وی بی ای VBA

گاهی اوقات برخی کاربران می خواهند  ماکروها و فرم هایشان  هنگام فعال شدن کاربرگ به صورت خودکار و اتوماتیک اجرا گردد. برای اینکار وارد محیط VBA Excel  اکسل شده   (  Alt + f11  ) ، از پنجره project کاربرگ مورد نظر را انتخاب کرده در قسمت بالای کد گزینه worksheet  و سپس رویداد Activate آنرا انتخاب کرده کد ها و دستورات لازم را درون آن می نویسیم.

 رویداد Activate sheet

همانطور که می دانید رویدادها اقتضایی هستند نه آنی .یعنی به محض نوشتن یا فشردن کلید اجرا ، عمل نمی کنند آنها تحت شرایط تعریف شده اجرا می شوند. یعنی این کد (  "msgbox "salam ) تنها در صورتی اجرا می شود که کاربرگ یک Sheet1 اکتیو یا فعال گردد.

اجرای عملیات با فعال شدن کاربرگ  vba  sheet1

برخی اوقات کاربر لازم دارد با فعال شدن یک کاربرگ مثلا کاربرگ 1 ( sheet1 ) عملیات خاصی اجرا گردد . برای اینکار به سراغ محیط وی بی ای رفته (   alt + f11)  در پنجره پروجکتس projects  برروی کاربرگ 1 دبل کلیک می کنیم اینکار سبب می شود تا رویدادهای کاربرگ 1 ، فراخوانی شوند. ابتدا در پنجره کد گزینه workshhet  را انتخاب کرده سپس رویداد مورد نظر را انتخاب می کنیم ( مثلا رویداد فعال شدن که همان activate است ).


حال کد و عملیات مورد نظر را اعمال می کنیم. مثلا به کاربرگ دستور می دهیم که هنگام فعال شدن ، به وسیله یک msgbox  به کاربر نام خود را اعلام کند.

()Private Sub Worksheet_Activate

MsgBox Sheet1.Name


End Sub

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

 لیست های تکراری ، جداولی هستند که رکورد های آن مجاز به تکرار می باشند ، مثلا علی میتواند به هر تعداد که دوست دارد مراجعه و وجه نقد دریافت کند.یکی از روش های گزارش گیری از داده ها استفاده از ابزار قدرتمند جداول محوری است . ابزار subtotal نیز یکی دیگر از روش های گزارش گیری از جداول تکراری است.

نوشتن برنامه های وی بی ای نیز یکی از زیباترین ، شیوه های کار با اکسل است.حال برای آشنایی و دوستی با این بخش از اکسل یک مثال را برای کاربران حرفه ای تر اکسل مطرح می کنیم.

مثال : فرض کنید جدولی داریم که افرادی معدود طی چند بار مراجعه کار انجام داده اند و پول دریافت کرده اند.حال می خواهیم با استفاده از برنامه نویسی VBA  اسامی آنها را به صورت غیر تکراری از جدول  خارج کرده نمایش دهد.

 

 

 برای نوشتن این کد باید کلید های  Alt+F11 را فشرد تا به محیط VBA وارد شویم.از منوی Insert  گزینه ی Module  را انتخاب می کنیم و سپس کد مورد نظر را در آن می نویسیم.

 

Sub list()
Dim i As Integer
Dim r As Integer

'shomareh radif akharin celol database
r = Range("a1").CurrentRegion.Rows.Count

'avalis celol database
Cells(1, 13) = Cells(1, 2)

'asami bedone tekrar
For i = 1 To r
If WorksheetFunction.CountIf(Range("m:m"), Cells(i, 2)) < 1 Then

Cells(i, 13) = Cells(i, 2)

End If
Next

End Sub

 

پنهان سازی کامل یک کاربرگ -  very hidden

امنیت یکی از ارکان مهم آفیس می باشد که آشنایی با برخی از المان های آن رمز موفقیت یک کاربر حرفه ای محسوب می گردد.برای پنهان سازی یک کاربرگ که حتی با unhide.. نیز آشکار نگردد باید به سراغ vba رفت.همانطور که می دانید vba یک زبان شی گرا در آفیس است . یعنی در هر application یا نرم افزار گروه آفیس ( اکسل - اکسس - ورو - پاورپوینت و... ) اشیایی منحصر به فرد وجود دارد. به طور مثال اشیای موجود در اکسل  سلول ها ، کاربرگ ها ، کارپوشه ها ، پنجره ها  نمودارها و. ... می باشند.حال برای برنامه نویسی کافی است خصوصیات این اشیا را تغییر دهید. مثلا نام شی کاربرگ یک" sheet1 "را می خواهیم  به کلمه ali  تغییر دهیم . 

ابتدا با فشردن کلید های alt , f11  به محیط برنامه نویسی می رویم و در انجا در محیط وی بی ای به سراغ پنجره projects  می رویم و شی مورد نظر " sheet1"  را انتخاب می کنیم تا خصویاتش در پنجره زیر نمایش داده شود. حال در قسمت name  نام کاربرگ را تغییر می دهیم.

برای تغییر خصوصیت visible یا نوع نمایش کاربرگ نیز می توان اقدام کرد. سومین گزینه از خصوصیت visible  کاربرگ عبارت  xlsheetveryhidden  است که با انتخاب آن کاربگ به کلی پنهان شده و حتی از طریق  unhide  نیز نمایش داده نمی شود.لازم به ذکر است که حتی این گزینه فعال نمی شود که کاربر به آن شک کند و می توان با خیال راحت کاربرگ های سری را از دسترس افراد پنهان نمود.

 

 

فرم سازی در اکسل - VBA

با استفاده از زبان برنامه نویسی اکسل می توان عملیات پرحجم و پیچیده ای را برروی داده های اکسل انجام داد . یکی از این قابلیت ها فرم سازی در اکسل است . فرم ها شبیه آنچه در ویندوز مشاهده می شوند قابل استفاده هستند

ابزارهایی که برروی فرم ها قرار می گیرند به کامپوننت مشهورند و کاربران می توانند با استفاده از این ابزار ورود وو خروج داده را سهل تر کنند. از جمله این ابزار LISTBOX  است که به کاربرانش اجازه می دهد تا یک لیست را در درونش مشاهده نمایند .در اینجا یک مثال از استفاده این ابزار را به همراه ADVANCE FILTER به دوستان گرامی تقدیم می کنم تا شاید بخشی از مشکلاتشان را مرتفع نماید.

دانلود مثال

در این مثال یک لیست دریافت و کارکرد موجود است که داده ها به ترتیب زیر هم نوشته می شوند با فشردن کلید وسط صفحه شما می توانید اسامی را به صورت غیر تکراری مشاهده کرده انتخاب نمایید و سپس جمع دریافتی را مشاهده نمایید.

 اگر رکوردی به لیست اضافه شود با زهم عمل کرده نام را به صورت غیر تکراری نمایش می دهد.

مثال های بیشتر را در اینده دنبال خواهیم کرد.

موفق باشید

تمرین جدید آموزش وی بی ای اکسل - vba excel 2007

این تمرین ها برای بچه های دوره  vba  قرار داده شده و موضوعش آموزش msgbox , inputbox است

لینک دانلود

لینک درست شده است


حلقه ها در وي ب ي اي LOOPS IN VBA EXCEL 2007

FOR  يكي از پر كاربردترين نوع حلقه در زبان هاي برنامه نويسي است و براي شمارش بكار ميرود. ساختارش چنين است :

FOR    انتها        تو          ابتدا = شمارنده           STEP گام

عمليات

NEXT

مثال : در ساختار زير سلول هاي ستون A  تا A100 از 1 تا 100 پر مي شوند:

FOR  I=1 TO 100

CELLS(I,1)=I

NEXT

مثال : جدولي در كاربرگ 1 طراحي كنيد كه شامل ستون نام و دريافتي و ماه دريافت باشد ، سپس اسامي چند نفر را در آن وارد نماييد ( تكراري هم داشته باشد ) آنگاه ماكرويي طراحي كنيد كه نام فرد را دريافت كرده سپس جمع كل دريافتي هاي وي را نمايش دهد .

 

SELECT CASE IN VBA

يكي ديگر از ابزار هاي كنترلي در وي بي اي SELECT CASE است . اين ابزار مانند چند IF  تو در تو است و شكل آن به صورت زير است :

SELECT CASE  متغير

CASE  محدوده 1

عمليات 1

CASE  محدوده 2

عمليات 2

CASE ELSE

عمليات

END SELECT

به طور مثال ساختاري طراحي كنيد كه عددي را از كاربر گرفته و سپس رده ي آنرا مشخص كند:

1-اگر عدد 1 يا 2 يا 3 باشد رده A

2- اگر عدد بزرگتر از 3 و كوچكتر از 7 باشد رده ي B

3-  اگر عدد بزرگتر از 7 باشد رده ي C

4- در غير اين صورت پيام خطا صادر كند.

نمايش داده شود:

SUB TEST()

DIM X!

X=INPUTBOX("X:")

SELECT CASE X

CASE 1,2,3

MSGBOX " A"

CASE 3 TO 7

MSGBOX " B"

CASE IS > 7

MSGBOX "C"

CASE ELSE

MSGBOX " ERROR"

END SELECT

END SUB

 

استفاده از ساختارهای کنترلی در وی بی ای اکسل  if , select case

if  يكي از پر كاربرترين ابزارهاي وي بي اي در عمليات كنترلي است.

ساختار آن به شرح زير است:

if   شرط   then

عمليات 

elseif شرط then

عمليات

else

عمليات

endif

 

مثال - دو عدد را از كاربر گرفته اگر مساوي باشند كلمه مساوي و درغير اين صورت نامساوي را نمايش دهد.

sub test1()

dim a!

dim b!

a=inputbox("a")

b=inputbox("b")

if a=b then

 msgbox "equal"

else

 msgbox " not equal"

endif

end sub

مثال 2- دو عدد درون a1 , b1  را مقايسه كند و هر كدام كه كوچكتر است را پاك كند .

مثال 3- اسامي و حقوق مبناي چند كارمند را دريافت كرده اگر حقوق بيش از 400$ باشد ماليات 10 درصد محاسبه شود در غير اين صورت 7 درصد محاسبه شود.

مثال ۴- میانگین اعداد درون ستون A  از كاربرگ 1 را با همين ستون از كاربرگ 2 مقايسه كرده هر كدام كه بزرگتر بود نام آن كاربرگ به MAX  تغيير يابد.

نكات اين تمرين :براي تغيير نام مثلا كابرگ 1 :

SHEETS(1).NAME="MAX"

براي استفاده از يك تابع درون وي بي اي از

   APPLICATION.WORKSHEETFUNCTION. نام تابع

I = APPLICATION.WORKSHEETFUNCTION.AVERAGE(RANGE("A:A"))

(اين فرمول ميانگين تمام اعداد درون ستون A  را به درون متغيير  I  مي ريزد.)

استفاده مي كنيم . توجه داشته باشيد كه توابع مشخص هستند و مقادير آنها بايد درون يك متغيير ريخته شود.

توجه كنيد براي  انتخاب  كاربرگ يك مي توان از دستور زير استفاده كرد :

SHEETS(1).SELECT

 

آرايه ها در و ي بي اي اكسل   ARRAY IN VBA EXCEL

آرايه مجموعه اي از داده هاست كه به ترتيب در كنار يكديگر قرار مي گيرند به طور مثال A يك آرايه با 5 عضو است كه چهار تاي آن عددي و يكي از آنها متني است.

A={ 1 , 2.57 , 17 , "ALI" , 122 }

آرايه ها يا يك بعدي هستند يا چند بعدي

تعريف يك آرايه يك بعدي در وي بي اي مانند تعريف يك متغير انجام مي پذيرد :مثال

DIM A(5) AS STRING

كه در آن پس از كلمه ديم نام آرايه و انتهاي آن ذكر مي گردد و در انتها نوع داده هاي آن

آرايه ها هميشه از ابتداي صفر آغاز مي كنند به تصاوير زير دقت كنيد

 

 

توجه كنيد كه دو عنصري از آرايه كه مقدار دهي نشده اند صفر در نظر گرفته شده اند .

براي اينكه يك آرايه يك بعدي از  ابتداي يك آغاز كند مي توان در تعريف آن به روش زير اقدام كرد

DIM ALIARR(1 TO 7) AS SINGLE

             

  كه 7 عنصر از جنس سينگل دارد با ابتداي يك aliarr يك آرايه يك بعدي با نام  

براي پر كردن يك آرايه كافي است عناصر آنرا پر كنيم

A(1)="ALI"

A(2)=22

A(3)="ALI TOZIH"

A(6)="REZA"

تمرين وي بي اي  VBA EXCEL

تمرين - فرض كنيد ليستي داريد به شكل زير ، كه از سلول A2  آغاز شده است . حال قصد داريم تابعي طراحي كنيم كه با ارسال سلول آغازين ليست به آن تعداد سطر هاي ليست محاسبه شود .


 

ارسال يك متغير به يك ماكرو يا تابع در وي بي اي اكسل

براي جلو گيري از استفاده ي تكراري از تابع inputbox  كافي است متغيرهاي مورد استفاده را به صورت پارامتر يا آرگومان به تابع يا ماكرو ارسال كنيم ،براي اين منظور كافي است متغير ها را درون پرانتز جلوي نام تعريف كنيم :

function ali_link(a as string, b as string)

 ali_link = a & " " & b

end function

اين تابع دو رشته را از كاربر دريافت كرده آنها را با يك فاصله در كنار هم قرار داده و به خروجي تابع ارسال مي كند. براي استفاده از آن كافي است آنرا به همراه دو متغيرش درون يك ماكرو صدا بزنيم :

sub ali_text()

 msgbox ali_link("ali","tozih")

end sub

مثال هاي توابع و ماكرو ها در VBA EXCEL

مثال ۱- ماكرويي طراحي كنيد كه نام و نام خانوادگي را از كاربر گرفته سپس آنها را در كنار هم در يك جعبه پیام نشان دهد .

مثال 2 - در مثال بالا نام و نام خانوادگي زير هم در يك جعبه نام قرار گيرند ( VBCR)

مثال 3 - ماكرويي طراحي كنيد كه شعاع يك دايره را گرفته محيط و مساحت آنرا نمايش دهد.

مثال 4 - مثال بالا را با استفاده از يك ماكرو و دو تابع محيط و مساحت انجام دهيد .

مثال 5 - تابعي طراحي كنيد كه ميانگين وزني اعداد داده شده را محاسبه نمايد:

عدد   : 10   31  15  5

ضريب :2     4    7   9

توجه كنيد كه تابع بايد هر 8 عدد را دريافت كند.

مثال 6 - تابعي طراحي كنيد كه قادر باشد با دريافت ضرايب عددي معادله درجه اول ax+b=0 آنرا حل كرده جوابش را بازگرداند.

انواع عملگرها در وي بي اي اكسل   VBA EXCEL OPERATOR

Arithmetic

Comparison Logical

Exponentiation (^)

Equality (=)

Not

Negation ()

Inequality (<>)

And

Multiplication and division (*, /)

Less than (<)

Or

Integer division (\)

Greater than (>)

Xor

Modulus arithmetic (Mod)

Less than or equal to (<=)

Eqv

Addition and subtraction (+, )

Greater than or equal to (>=)

Imp

String concatenation (&)

Like
Is


توابع  FUNCTIONS  در وي بي اكسل       

از آنجا كه  ماكرو ها قادر به بازگرداندن يك مقدار به عنوان خروجي نيستند ، توابع نوع ديگري از ساختار تشكيل دهنده ماژول ها را معرفي مي كنيم:

ساختار يك تابع ( FUNCTION )  شبيه يك ماكرو است با اين تفاوت كه بجاي كلمه ي SUB  از كلمه ي FUNCTION استفاده ميشود :

(اين تابع عدد اول را به توان عدد دوم مي رساند )

FUNCTION AVW()

 DIM I AS SINGLE , J AS SINGLE

 I= INPUTBOX(" I :")

 J=INPUTBOX(" J: ")

 AVW =I ^ J

END FUNCTION

نكته ي قابل توجه اينست كه جواب خروجي يك تابع هميشه بايد درون نام تابع ريخته شود.

 

صدا زدن ماكروها CALL

براي استفاده از يك ماكرو درون ماكرو هاي ديگر كافي است ابتدا ماكرو را تعريف كرده سپس درون يك ماكرو ديگر با استفاده از كلمه ي كليدي CALL  آنرا صدا بزنيم :

SUB TEST3()

 DIM S AS STRING * 5

 S= INPUTBOX("YOUR NAME ")

END  SUB

______________________________________

SUB TEST4()

 CALL TEST3

END SUB

ماكرو TEST3 درون ماكرو TEST4 صدا زده شده است .

به اين نكته توجه كنيد كه هر گاه بخواهيم يك ماكرو فقط در همان ماژول تعريف شده ، شناخته شود كافي است قبل از كلمه ي كليدي SUB  از كلمه ي كليدي PRIVATE استفاده شود .

*  ماكرو ها به صورت پيش فرض در تمام پروژه شناخته مي شوند.

انواع متغير ها در زبان VBA در اكسل 2007

همانطور كه در جلسات قبل ذكر كرديم متغير ها در زبان وي بي اكسل چند دسته اند :

1- عددي

2- غير عددي

3- ثابت ها

4- كاربر ساخته

كه محدوده ي هر كدام را در زير مشاهده ميكنيد ( راهنماي اكسل 2007 ) :

Data Type Summary

The following table shows the supported data types, including storage sizes and ranges.

Data type Storage size Range
Byte 1 byte 0 to 255
Boolean 2 bytes True or False
Integer 2 bytes -32,768 to 32,767
Long
(long integer)
4 bytes -2,147,483,648 to 2,147,483,647
Single
(single-precision floating-point)
4 bytes -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values
Double
(double-precision floating-point)
8 bytes -1.79769313486231E308 to
-4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values
Currency
(scaled integer)
8 bytes -922,337,203,685,477.5808 to 922,337,203,685,477.5807
Decimal 14 bytes +/-79,228,162,514,264,337,593,543,950,335 with no decimal point;
+/-7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest non-zero number is
+/-0.0000000000000000000000000001
Date 8 bytes January 1, 100 to December 31, 9999
Object 4 bytes Any Object reference
String
(variable-length)
10 bytes + string length 0 to approximately 2 billion
String
(fixed-length)
Length of string 1 to approximately 65,400
Variant
(with numbers)
16 bytes Any numeric value up to the range of a Double
Variant
(with characters)
22 bytes + string length Same range as for variable-length String
User-defined
(using Type)
Number required by elements The range of each element is the same as the range of its data type.

 

اين متغير هاكه با كلمه ي كليدي DIM  معرفي مي شوند حيطه ي فعاليت ( اثر ) مشخصي دارند :

1-  متغير هاي ماكرو

2- متغير هاي ما‍‍ژول

3- متغيرهاي پرو‍ژه ( سراسري)

1- متغير هايي كه در سطح ماكرو تعريف مي شوند تنها در همان ماكرو شناخته مي شوند.

SUB TEST1()

DIM A AS SINGLE

 A=INPUTBOX(" ENTER A NUMBER :")

 MSGBOX A

END SUB

2-  اما نوع دوم متغير ها آنهايي هستند كه بايد درون تمام ماکروهای يك ماژول شناخته شوند ، براي اينكار كافي است متغير را در ابتداي ماژول قبل از تمام ماكروها ( قسمت اعلان يا DECLARATION) تعريف كرد و سپس در تمام  ماکرو های آن ماژول میتوان از آن استفاده کرد: 

 ۳- اما اگر بخواهیم این متغیر در تمام ماژول های یک پروژه شناخته شود کافی است در قسمت اعلان بجای کلمه ی dim از كلمه ي GLOBAL  استفاده كنيم .در اين حالت متغير سراسري شده و در تمام ماكرو ها ي يك پروژه شناخته مي شود.

GLOBAL S AS STRING

در ضمن بايد بدانيم كه مجموعه ماكرو ها تشكيل يك ماژول داده و مجموعه ي ماژول ها تشكيل يك پروژه را مي دهد .

نكته 1 : اگر بخواهيم درون يك ماكرو پس از اتمام آن مقادير متغير هايش تهي نشود كافي است بجاي DIM از واژه كليدي STATIC  استفاده كنيم . در اين حالت حتي پس از اتمام ماكرو مقادير متغير ايستا حفظ شده تا مقادير جديد به آن تعلق پيدا كند.

ايجاد    DEVELOPER TAB در اكسل 2007

براي كار با VBA  و ماكروها كاربران نياز به ايجاد يك تب يا برگه دان جديد دارند به نام DEVELOPER که مراحل نصب آنرا در EXCEL 2007  ملاحظه مي نماييد:

 

 

 

تمرین IF

تمرین IF : ماکرویی طراحی کنید که نمره ی دانش آموزی را از کاربر گرفته اگر

0=<نمره =<7     ضعیف

7<نمره =<14   متوسط

14<نمره =<20 خوب

پیام های مقابل آنها را چاپ نماید .

Sub NOMREH()

Dim NOM As Single

NOM = InputBox(" نمره را وارد کنید")

If NOM >= 0 And NOM <= 7 Then MsgBox "BAD"

If NOM > 7 And NOM <= 14 Then MsgBox " NOT BAD"

If NOM > 14 And NOM <= 20 Then MsgBox "GOOD"

End Sub

به این نکته توجه داشته باشید که اگر فرامین IF  فقط یک دستور باشند دیگر نیازی به END IF  نیست البته دستور مورد نظر را باید در پشت سر THEN  نوشت .

راهنمای استفاده از دستور شرطی IF

If...Then...Else Statement

       *برگرفته از راهنمای اکسل*

Conditionally executes a group of statements, depending on the value of an expression.

Syntax

If condition Then [statements] [Else elsestatements]

Or, you can use the block form syntax:

If condition Then
[statements]

[ElseIf condition-n Then
[elseifstatements] ...

[Else
[elsestatements]]

End If

The If...Then...Else statement syntax has these parts:

 

Part Description
condition Required. One or more of the following two types of expressions:
  A numeric expression or string expression that evaluates to True or False. If condition is Null, condition is treated as False.
  An expression of the form TypeOf objectname Is objecttype. The objectname is any object reference and objecttype is any valid object type. The expression is True if objectname is of the object type specified by objecttype; otherwise it is False.
statements Optional in block form; required in single-line form that has no Else clause. One or more statements separated by colons; executed if condition is True.
condition-n Optional. Same as condition.
elseifstatements Optional. One or more statements executed if associated condition-n is True.
elsestatements Optional. One or more statements executed if no previous condition or condition-n expression is True.


 

Remarks

You can use the single-line form (first syntax) for short, simple tests. However, the block form (second syntax) provides more structure and flexibility than the single-line form and is usually easier to read, maintain, and debug.

Note   With the single-line form, it is possible to have multiple statements executed as the result of an If...Then decision. All statements must be on the same line and separated by colons, as in the following statement:

If A > 10 Then A = A + 1 : B = B + A : C = C + B

A block form If statement must be the first statement on a line. The Else, ElseIf, and End If parts of the statement can have only a line number or line label preceding them. The block If must end with an End If statement.

To determine whether or not a statement is a block If, examine what follows the Then keyword. If anything other than a comment appears after Then on the same line, the statement is treated as a single-line If statement.

The Else and ElseIf clauses are both optional. You can have as many ElseIf clauses as you want in a block If, but none can appear after an Else clause. Block If statements can be nested; that is, contained within one another.

When executing a block If (second syntax), condition is tested. If condition is True, the statements following Then are executed. If condition is False, each ElseIf condition (if any) is evaluated in turn. When a True condition is found, the statements immediately following the associated Then are executed. If none of the ElseIf conditions are True (or if there are no ElseIf clauses), the statements following Else are executed. After executing the statements following Then or Else, execution continues with the statement following End If.

Tip   Select Case may be more useful when evaluating a single expression that has several possible actions. However, the TypeOf objectname Is objecttype clause can't be used with the Select Case statement.

Note   TypeOf cannot be used with hard data types such as Long, Integer, and so forth other than Object.

شرط ها و ساختار های تصمیم گیری در وی بی ای  IF IN VBA

یکی از مهمترین بخش های هر زبان برنامه نویسی ساختار های تصمیمگیری در آنهاست .

IF  یکی از پرکاربرد ترین دستورات VBA  می باشد ، ساختار آن عبارت است از :

IF    شرط    THEN

عملیات مورد نظر

END IF

مثال : می خواهیم ساختار شرطی ایجاد کنیم که اگر محتویات سلول A1  از عدد 10 کوچکتر بود یک پیام مردودی نمایش دهد . ( فقط ساختار IF   را نمایش می دهیم )

IF  RANGE("A1")<10 THEN

 MSGBOX" مردود"

END IF

تمرین 2

تمرین 2 - ماکرویی طراحی کنید که نام و نام خانوادگی را از کاربر دریافت کرده سپس آنها را در کنار یکدیگر نمایش دهد .

SUB NAM()

DIM N AS STRING

DIM F AS STRING

N= INPUTBOX("ENTER NAME :")

F=INPUTBOX("ENTER FAMILY :")

MSGBOX N&" "&F

END SUB

تمرین

تمرین : ماکرویی بنویسید که دو عدد را از کاربر گرفته و سپس ضرب آنها را نمایش دهد :

SUB ZARB()

DIM I AS SINGLE

DIM J AS SINGLE

DIM K AS SINGLE

 I= INPUTBOX(" ENTER I :")

 J= INPUTBOX(" ENTER J :")

 K=I*J

 MSGBOX " I*J = " &K

END SUB

معرفی متغیر ها در وی بی ای    

برای استفاده از متغیر ها در وی بی ای VBA  بهتر است که آنها را تعریف کنیم ، دو نوع متغیر عددی و غیر عددی وجود دارد که عددی ها عبارتند از :

  1. BYTE
  2. INTEGER
  3. LONG
  4. SINGLE
  5. DOUBLE
  6. CURRENCY
  7. DECIMAL

و غیر عددی عا عبارتند از:

  1. BOOLEAN
  2. OBJECT
  3. STRING
  4. VARIANT
  5. DATE

روش معرفی متغیر ها استفاده از کلمه ی کلیدی DIM بعد از نام ماکروست . به مثال زیر توجه کنید:

I  به عنوان یک عدد صحیح ( متغیر) معرفی شده است .

SUB ALI()

 DIM I AS INTEGER      '  I به عنوان یک عدد صحیح معرفی

     I  = INPUTBOX (" ENTER  A NUMBER INTEGER:")

END SUB

 

 

Data Type Summary

   

The following table shows the supported data types, including storage sizes and ranges.

Data type Storage size Range
Byte 1 byte 0 to 255
Boolean 2 bytes True or False
Integer 2 bytes -32,768 to 32,767
Long
(long integer)
4 bytes -2,147,483,648 to 2,147,483,647
Single
(single-precision floating-point)
4 bytes -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values
Double
(double-precision floating-point)
8 bytes -1.79769313486231E308 to
-4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values
Currency
(scaled integer)
8 bytes -922,337,203,685,477.5808 to 922,337,203,685,477.5807
Decimal 14 bytes +/-79,228,162,514,264,337,593,543,950,335 with no decimal point;
+/-7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest non-zero number is
+/-0.0000000000000000000000000001
Date 8 bytes January 1, 100 to December 31, 9999
Object 4 bytes Any Object reference
String
(variable-length)
10 bytes + string length 0 to approximately 2 billion
String
(fixed-length)
Length of string 1 to approximately 65,400
Variant
(with numbers)
16 bytes Any numeric value up to the range of a Double
Variant
(with characters)
22 bytes + string length Same range as for variable-length String
User-defined
(using Type)
Number required by elements The range of each element is the same as the range of its data type.


Note   Arrays of any data type require 20 bytes of memory plus 4 bytes for each array dimension plus the number of bytes occupied by the data itself. The memory occupied by the data can be calculated by multiplying the number of data elements by the size of each element. For example, the data in a single-dimension array consisting of 4 Integer data elements of 2 bytes each occupies 8 bytes. The 8 bytes required for the data plus the 24 bytes of overhead brings the total memory requirement for the array to 32 bytes.

A Variant containing an array requires 12 bytes more than the array alone.

Note   Use the StrConv function to convert one type of string data to another.

 

INPUTBOX جعبه دریافت داده

هر گاه کاربر قصد دریافت داده ها را از کاربرگ نداشته باشد و بخواهد آنها را مستقیما دریافت کند از این ابزار استفاده می کند :

Sub ALI()
   I = InputBox(" عدد مورد نظر را وارد کنيد    ")
End Sub
 

در مثال فوق ماکرو ساده ای را مشاهده می کنید که پیام " عدد مورد نظر را وارد کنید " را نمایش داده و عدد یا متن کاربر را دریافت کرده و در متغییر I  می ریزد .

شکل این تابع به صورت زیر است :

InputBox Function

       

Displays a prompt in a dialog box, waits for the user to input text or click a button, and returns a String containing the contents of the text box.

Syntax

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

The InputBox function syntax has these named arguments:

Part Description
prompt Required. String expression displayed as the message in the dialog box. The maximum length of prompt is approximately 1024 characters, depending on the width of the characters used. If prompt consists of more than one line, you can separate the lines using a carriage return character (Chr(13)), a linefeed character (Chr(10)), or carriage return–linefeed character combination (Chr(13) & Chr(10)) between each line.
title Optional. String expression displayed in the title bar of the dialog box. If you omit title, the application name is placed in the title bar.
default Optional. String expression displayed in the text box as the default response if no other input is provided. If you omit default, the text box is displayed empty.
xpos Optional. Numeric expression that specifies, in twips, the horizontal distance of the left edge of the dialog box from the left edge of the screen. If xpos is omitted, the dialog box is horizontally centered.
ypos Optional. Numeric expression that specifies, in twips, the vertical distance of the upper edge of the dialog box from the top of the screen. If ypos is omitted, the dialog box is vertically positioned approximately one-third of the way down the screen.
helpfile Optional. String expression that identifies the Help file to use to provide context-sensitive Help for the dialog box. If helpfile is provided, context must also be provided.
context Optional. Numeric expression that is the Help context number assigned to the appropriate Help topic by the Help author. If context is provided, helpfile must also be provided.


Remarks

When both helpfile and context are provided, the user can press F1 (Windows) or HELP (Macintosh) to view the Help topic corresponding to the context. Some host applications, for example, Microsoft Excel, also automatically add a Help button to the dialog box. If the user clicks OK or presses ENTER , the InputBox function returns whatever is in the text box. If the user clicks Cancel, the function returns a zero-length string ("").

Note   To specify more than the first named argument, you must use InputBox in an expression. To omit some positional arguments, you must include the corresponding comma delimiter.

 

 

 مثال :

 

Sub proInput()
   

   J = InputBox("For what year do you need this report?")

End Sub

 

 

input box

دانلود تمرین وی بی  for  & if

 

 

 برای دانلود

 تمرین وی بی کلیک کنید. 

ابتدا تمرین را دانلود کرده و سپس سعی کنید آنرا بدون ااستفاده از راهنما حل کنید:

صورت مسله : ماکرویی بنویسید که اعداد ستون اول را در در ستون دوم جستجو کرده و تکراری های آنرا یافته با رنگ سرخ و پررنگ نمایش دهد .

 

 

معرفی برخی از اشیا و خصوصیات آنها

برای  ایجاد محیطی که بتوان ماکرو را در آن نوشت ابتدا باید وارد محیط vbe  شد سپس از منوی insert  گزینه  module را انتخاب می کنیم تا محیط کد نویسی فعال شود . ماکرو ها ، ماژول ها را می سازند و ماژول ها ، پروژه ها را . در حقیقت پروژه از تعدادی شی و ماژول تشکیل شده است .

اشیا یی مانند range  دارای تعدای خصوصیت به شرح زیر می باشند :

  1.  value
  2. font . name
  3. font . size
  4. font . bold
  5. font . italic
  6. font . underline
  7. font . colorindex
  8. interior.colorindex
  9. formula

تمرین 1 - ماکرویی بنویسید که اندازه فونت محتویات سلول d3  را به 25 و حالت پررنگ تغییر دهد و نوع فونت را به titr .

sub ali23()

   range("d3").font.name ="titr"

   range("d3").font.size = 25

  range("d3").font.bold = true

end sub

نوشتن چند ماکرو ساده

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

تمرین 1 -  ماکروییی بنام EDITB1  بنویسید که محتویات سلول A1 را در درون سلول B1  قرار دهد .

SUB EDITB1()

  RANGE("B1") = range("a1")

END SUB

تمرین 2- ماکرویی بنویسید که عدد 14 را درون c1  و عدد  ۱۴-  را درون c2  قرار دهد .

SUB ali22()

  RANGE("c1") = 14

  RANGE("c2") = -14

END SUB

 

ماکرو نویسی  استفاده از زبان وی بی ای VBA

بنام خدا

 

 

ماکرو نویسی در اکسل  VBA

 

برای انجام عملیات تکراری و جستجو ی داده های مورد نظر می توان از ابزار قدرتمند ماکروها در اکسل استفاده کرد. ورود به ساختار برنامه نویسی ویژال بیسیک در اکسل که با عنوان          VBA  یا  VISUAL BASIC FOR APPLICATION    در اکسل و یا آفیس   از آن یاد می گردد ، از مسیر زیر انجام می گیرد :

 

TOOLS | MACRO | VISAUL BASIC EDITOR

 

در حقیقت ماکرو ها، همان کدهایی هستد که توسط کاربر یا ماشین تولید می شوند. اگر شما یک ماکرو را با استفاده از ابزار ماکرو سازی طراحی و اجرا کنید آنرا توسط ماشین ساخته اید ولی اگر بخواهید انعطاف بیشتری به آن بدهید باید آنرا بنویسید( کد نویسی ). زبان وب بی ای در حقیقت معماری درونی اکسل و ابزاری قدرتمند برای نوشتن برنامه های پیشرفته و حلقوی است . این زبان که یک زبان شئ گراست ، اجزای درونی خود را به شکل اشیائی در نظر می گیرد که نرم افزار اکسل را تشکیل می دهند، مثل فایل ( کارپوشه  WORKBOOK ) ، کاربرگ یا WORKSHEET و یا  سلول  RANGE .در حقیقت کارپوشه ها از اشیاء کاربرگ تشکیل شده اند و کاربرگ ها با اشیاء سلول کامل می شوند . هر شیء دارای یک سری خاصیت است . مثلا شما یک سنگ را در نظر بگیرید ، رنگ ، وزن ، شکل و... خواص سنگ محسوب می شوند .در وی بی ای   VBA نیز همینطور است ، مثلا یک سلول دارای خواصی مثل  محتویات ، اندازه فونت ، نام فونت ، رنگ ، فرمول ، کادر و .... می باشد. کاربران در برنامه نویسی در حقیقت این خواص را تغییر می دهند .

 

بیایید یک تمرین را باهم انجام دهیم :

ابتدا نوار ابزار ویژال بیسیک را فعال کنید ، سپس ماکرویی را طراحی کنید که در سلول A1 از کاربرگ 2  وارد شود .

 

مراحل ساخت ماکرو :

ابتدا کلید RECORD MACRO  را می فشاریم و سپس به کاربرگ 2 و سلول A1 وارد می شویم و در آخر کلید  STOP را می فشاریم .

حال برای دیدن کد ماکرو مسیر زیر را دنبال کنید :

کلید  RUN را فشرده تا اسامی  ماکرو ها ظاهر شود سپس ماکروی مورد نظر را انتخاب کرده کلید EDIT  را می فشاریم تا متن ماکرو ( کد ) نمایش داده شود .

 

 

 

 

همانطور که مشاهده می کنید ماکرو با  SUB   و نام ماکرو ،شروع و با END SUB    تمام می شود و در بین آنها عبارات برنامه نویسی نوشته شده است . سه رنگ در بدنه ی ماکرو بکار رفته 1- سبز: که معرف توضیحات برنامه است و هیچ تاثیری بر عملکرد ماکرو ندارد 2- آبی : کلمات کلیدی  3- سیاه : دستورات

 

 

 

 

Sub Macro1()

 

' Macro1 Macro

' Macro recorded 2007/04/23 by tozih

   

Sheets("Sheet2").Select

    Range("A1").Select

 

 

End Sub

 

 

 

 

 

 

همانطور که از کد ها مشخص است ماکرویی بنام MACRO1  به کاربرگ 2 رفته و سلول A1  را در آن انتخاب می کند . در ساختار برنامه نویسی VBA  تغییر خواص به صورت توارثی انجام می پذیرد ، یعنی هر خاصیت باید به شئ مورد نظر، با یک نقطه متصل باشد     .

 

Range("A1").Select

 

در حقیقت برای تغییر خاصیت اشیاء باید ابتدا نام شئ را ذکر کرده سپس نقطه را قرار داده و آنگاه خاصیت مورد نظر را ذکر کنیم و مقادیر آنرا تغییر دهیم . مثلا :

 

RANGE("A2:A10").FONT.SIZE = 16

 

اندازه فونت محتویات سلول های A1  تا A10  را به 16 تغییر می دهد .

 

مثال دیگر ، محتویات سلول D2  از کاربرگ 3 را عبارت ALI TOZIH  قرار دهید .

 

SHEETS("SHEET3").RANGE("D5").VALUE = "ALI TOZIH"

 

در ضمن  خاصیت VALUE  پیش فرض است و می توان آنرا حذف کرد :

 

SHEETS("SHEET3").RANGE("D5") = "ALI TOZIH"