راهنمای VBA پیشرفته برای MS Excel

اگر به تازگی شروع به کار با VBA کرده اید، می خواهید شروع به مطالعه راهنمای VBA ما برای مبتدیان(VBA guide for beginners) کنید. اما اگر یک متخصص باتجربه VBA هستید و به دنبال کارهای پیشرفته تری هستید که می توانید با VBA در اکسل(Excel) انجام دهید ، به خواندن ادامه دهید.

توانایی استفاده از کدنویسی VBA در (VBA)اکسل(Excel) دنیای کاملی از اتوماسیون را باز می کند. می‌توانید محاسبات را در اکسل(Excel) ، دکمه‌های فشاری، و حتی ایمیل ارسال کنید. امکانات بیشتری برای خودکار کردن کار روزانه با VBA وجود دارد که ممکن است تصور کنید.

راهنمای VBA پیشرفته برای مایکروسافت اکسل(Advanced VBA Guide For Microsoft Excel)

هدف اصلی از نوشتن کد VBA در (VBA)اکسل(Excel) این است که بتوانید اطلاعات را از یک صفحه گسترده استخراج کنید، محاسبات مختلفی را روی آن انجام دهید و سپس نتایج را به صفحه گسترده بازگردانید.

موارد زیر رایج ترین کاربردهای VBA در اکسل(Excel) هستند.

  • داده ها را وارد(Import) کنید و محاسبات را انجام دهید
  • (Calculate)نتایج را از فشار دادن یک دکمه توسط کاربر محاسبه کنید
  • (Email)نتایج محاسبه ایمیل به شخصی

با این سه مثال، شما باید بتوانید انواع کدهای پیشرفته VBA اکسل(Excel VBA) خود را بنویسید .

وارد کردن داده ها و انجام محاسبات(Importing Data and Performing Calculations)

یکی از رایج ترین چیزهایی که مردم برای آن از اکسل(Excel) استفاده می کنند ، انجام محاسبات بر روی داده هایی است که خارج از اکسل(Excel) وجود دارد . اگر از VBA(VBA) استفاده نمی‌کنید ، به این معنی است که باید داده‌ها را به صورت دستی وارد کنید، محاسبات را اجرا کنید و آن مقادیر را در یک برگه یا گزارش دیگر ارسال کنید.

با VBA ، می توانید کل فرآیند را خودکار کنید. به عنوان مثال، اگر یک فایل CSV جدید دارید که هر (CSV)دوشنبه در یک فهرست در رایانه خود بارگیری می شود، می توانید کد (Monday)VBA خود را طوری پیکربندی کنید که در اولین باز کردن صفحه گسترده خود در روز سه شنبه(Tuesday) صبح اجرا شود.

کد واردات زیر اجرا می شود و فایل CSV را به صفحه گسترده (CSV)اکسل(Excel) شما وارد می کند.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")
Cells.ClearContents

strFile = “c:\temp\purchases.csv”

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
     .TextFileParseType = xlDelimited
     .TextFileCommaDelimiter = True
     .Refresh
End With

ابزار ویرایش Excel VBA را باز کرده و شی Sheet1 را انتخاب کنید. (Sheet1)از کادرهای کشویی شی و روش، Worksheet را انتخاب کرده و Activate را انتخاب کنید . هر بار که صفحه گسترده را باز می کنید، کد را اجرا می کند.

این یک تابع Sub Worksheet_Activate() ایجاد می کند. کد بالا را در آن تابع قرار دهید.

این کاربرگ فعال را روی Sheet1 تنظیم می‌کند ، برگه را پاک می‌کند، با استفاده از مسیر فایلی که با متغیر strFile تعریف کرده‌اید به فایل متصل می‌شود و سپس حلقه With در(With) هر خط فایل چرخه می‌زند و داده‌ها را در برگه قرار می‌دهد که از سلول A1 شروع می‌شود. .

اگر این کد را اجرا کنید، خواهید دید که داده های فایل CSV به صفحه گسترده خالی شما در Sheet1 وارد شده است.

واردات تنها قدم اول است. در مرحله بعد، می خواهید یک هدر جدید برای ستون ایجاد کنید که حاوی نتایج محاسبات شما باشد. در این مثال، فرض کنید می‌خواهید 5 درصد مالیات پرداخت شده برای فروش هر کالا را محاسبه کنید.

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

  1. ستون نتایج جدیدی به نام مالیات(taxes) ایجاد کنید.
  2. ستون واحدهای فروخته(units sold) شده را حلقه بزنید و مالیات فروش را محاسبه کنید.
  3. نتایج محاسبه را در ردیف مناسب در برگه بنویسید.

کد زیر تمام این مراحل را انجام می دهد.

Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double

Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))

rowCounter = 2
Cells(1, 5) = "taxes"

For Each cell In rng
fltTax = cell.Value * 0.05
Cells(rowCounter, 5) = fltTax
rowCounter = rowCounter + 1
Next cell

این کد آخرین ردیف را در برگه داده های شما پیدا می کند و سپس محدوده سلول ها (ستون با قیمت های فروش) را با توجه به ردیف اول و آخر داده ها تنظیم می کند. سپس کد از طریق هر یک از آن سلول ها حلقه می زند، محاسبه مالیات را انجام می دهد و نتایج را در ستون جدید شما (ستون 5) می نویسد.

کد VBA(VBA) بالا را در زیر کد قبلی قرار دهید و اسکریپت را اجرا کنید. نتایج را در ستون E خواهید دید.

اکنون، هر بار که کاربرگ اکسل(Excel) خود را باز می کنید ، به طور خودکار خارج می شود و جدیدترین کپی از داده ها را از فایل CSV دریافت می کند. (CSV)سپس محاسبات را انجام می دهد و نتایج را در برگه می نویسد. دیگر لازم نیست کاری را به صورت دستی انجام دهید!

محاسبه نتایج از فشار دکمه(Calculate Results From Button Press)

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

(Control)اگر می خواهید کنترل کنید که کدام محاسبات استفاده می شود، دکمه های کنترل مفید هستند . به عنوان مثال، در مورد مشابه بالا، اگر بخواهید برای یک منطقه از نرخ مالیات 5 درصد و برای منطقه دیگر از نرخ مالیات 7 درصد استفاده کنید، چه؟

می توانید اجازه دهید همان کد واردات CSV به طور خودکار اجرا شود، اما با فشار دادن دکمه مناسب، کد محاسبه مالیات را بگذارید تا اجرا شود.

با استفاده از صفحه گسترده مشابه بالا، تب Developer را انتخاب کرده و از گروه Controls در نوار، (Controls)Insert را انتخاب کنید . دکمه فشار (push button)ActiveX Control را از منوی کشویی انتخاب کنید.

دکمه فشاری را روی هر قسمتی از برگه دور از جایی که داده‌ها می‌روند بکشید.

روی دکمه فشار کلیک راست کرده و Properties را انتخاب کنید . در پنجره Properties ، عنوان را به چیزی که می‌خواهید به کاربر نمایش دهید تغییر دهید. در این مورد ممکن است Calculate 5% Tax باشد.

این متن را در خود دکمه فشاری منعکس می‌کنید. پنجره Properties(properties) را ببندید و روی خود دکمه دوبار کلیک کنید. با این کار پنجره ویرایشگر کد باز می شود و مکان نما شما در داخل تابعی قرار می گیرد که با فشار دادن دکمه توسط کاربر اجرا می شود.

کد محاسبه مالیات را از بخش بالا در این تابع قرار دهید و ضریب نرخ مالیات را 0.05 نگه دارید. به خاطر داشته باشید که 2 خط زیر را برای تعریف برگه فعال اضافه کنید.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")

اکنون، دوباره این فرآیند را تکرار کنید و یک دکمه فشاری دوم ایجاد کنید. عنوان را Calculate 7% Tax .

روی آن دکمه دوبار کلیک(Double-click) کنید و همان کد را قرار دهید، اما ضریب مالیات را 0.07 کنید.

حالا بسته به اینکه کدام دکمه را فشار دهید، ستون مالیات بر این اساس محاسبه می شود.

پس از اتمام کار، هر دو دکمه فشاری را روی برگه خود خواهید داشت. هر یک از آنها محاسبه مالیات متفاوتی را آغاز می کنند و نتایج متفاوتی را در ستون نتیجه می نویسند. 

برای ارسال متن، منوی Developer را انتخاب کنید و از گروه Controls در نوار ، Design Mode را انتخاب کنید تا (Design Mode)Design Mode را غیرفعال کنید . با این کار دکمه های فشاری فعال می شوند. 

سعی کنید هر دکمه فشاری را انتخاب کنید تا ببینید ستون نتیجه "مالیات" چگونه تغییر می کند.

نتایج محاسبه ایمیل به شخصی(Email Calculation Results to Someone)

اگر بخواهید نتایج روی صفحه گسترده را از طریق ایمیل برای شخصی ارسال کنید، چه باید کرد؟

شما می توانید دکمه دیگری به نام Email Sheet to Boss را(Email Sheet to Boss) با استفاده از همان روش بالا ایجاد کنید. کد این دکمه شامل استفاده از شی اکسل CDO برای پیکربندی تنظیمات ایمیل (Excel CDO)SMTP و ارسال نتایج در قالبی قابل خواندن توسط کاربر است.

برای فعال کردن این ویژگی، باید ابزارها و مراجع(Tools and References) را انتخاب کنید . به Microsoft CDO for Windows 2000 Library بروید ، آن را فعال کنید و OK را انتخاب کنید .

سه بخش اصلی برای کد وجود دارد که باید برای ارسال ایمیل و جاسازی نتایج صفحه گسترده ایجاد کنید.

اولین مورد تنظیم متغیرهایی برای نگه داشتن موضوع، آدرس های To و From و بدنه ایمیل است.

Dim CDO_Mail As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim strSubject As String
Dim strFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set ws = ActiveWorkbook.Sheets("Sheet1")
strSubject = "Taxes Paid This Quarter"
strFrom = "[email protected]"
strTo = "[email protected]"
strCc = ""
strBcc = ""
strBody = "The following is the breakdown of taxes paid on sales this quarter."

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

Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))

rowCounter = 2
strBody = strBody & vbCrLf

For Each cell In rng
     strBody = strBody & vbCrLf
     strBody = strBody & "We sold " & Cells(rowCounter, 3).Value & " of " & Cells(rowCounter, 1).Value _
     & " for " & Cells(rowCounter, 4).Value & " and paid taxes of " & Cells(rowCounter, 5).Value & "."
     rowCounter = rowCounter + 1
Next cell

بخش بعدی شامل تنظیم تنظیمات SMTP است تا بتوانید از طریق سرور SMTP خود ایمیل ارسال کنید . اگر از Gmail استفاده می کنید ، این معمولاً آدرس ایمیل Gmail ، رمز عبور Gmail و سرور (Gmail)SMTP Gmail(Gmail SMTP) (smtp.gmail.com) است.

Set CDO_Mail = CreateObject("CDO.Message") 
On Error GoTo Error_Handling
Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1
Set SMTP_Config = CDO_Config.Fields

With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
 .Update
End With

With CDO_Mail
     Set .Configuration = CDO_Config
End With

[email protected] و رمز عبور را با جزئیات حساب خود جایگزین کنید.

در نهایت برای شروع ارسال ایمیل کد زیر را وارد کنید.

CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.Send

Error_Handling:
If Err.Description <> "" Then MsgBox Err.Description

توجه(Note) : اگر هنگام اجرای این کد، خطای انتقال مشاهده کردید، احتمالاً به این دلیل است که حساب Google شما اجرای «برنامه‌های کمتر امن» را مسدود می‌کند. باید به صفحه تنظیمات برنامه های کمتر ایمن مراجعه کنید(less secure apps settings page) و این ویژگی را روشن کنید.

پس از فعال شدن، ایمیل شما ارسال خواهد شد. این چیزی است که برای شخصی که ایمیل نتایج تولید شده به طور خودکار شما را دریافت می کند به نظر می رسد.

همانطور که می بینید چیزهای زیادی وجود دارد که می توانید واقعاً با Excel VBA خودکار کنید. سعی کنید با تکه کدهایی که در این مقاله یاد گرفته اید بازی کنید و اتوماسیون های VBA منحصر به فرد خود را ایجاد کنید .



About the author

من یک متخصص کامپیوتر با بیش از 10 سال تجربه هستم و در کمک به افراد در مدیریت کامپیوترهایشان در دفترشان تخصص دارم. من مقالاتی در مورد موضوعاتی مانند نحوه بهینه سازی اتصال اینترنت خود، نحوه راه اندازی رایانه برای بهترین تجربه بازی و موارد دیگر نوشته ام. اگر در مورد هر چیزی که مربوط به کار یا زندگی شخصی خود است به دنبال کمک هستید، من آن شخص برای شما هستم!



Related posts