برای داشتن امکانات ویژه اکسل کافیست این آموز را با دقت دنبال کنید تا بتوانید کارهای خود را با سرعت بالاتر و بهتر پیش ببرید. به عنوان مثال در اولین قدم میخواهیم اضافه کردن چک باکس در اکسل را با یک کلیک انجام دهیم.
فهرست محتوا
اضافه کردن Personal Macro به اکسل
یک فایل اکسل باز کنید و سعی کنید در آن واحد همین یک فایل باز باشد ، مهم نیست که فایل دارای اطلاعات باشد یا خام باشد . مراحل زیر را طی کنید تا ماکروهای شخصی خود را در تمام فایلهای اکسل این کامپیوتر داشته باشد.
- به تب Developer بروید و روی گزینه Record Macro کلیک کنید
- در پنجره باز شده گزینه Personal Macro را مانند تصویر انتخاب کنید.
- رو گزینه OK کلیک کنید .
- حالا روی Stop Recording کلیک کنید .
- با زدن کلیدهای Alt + F11 به کدنویسی بروید ، خواهید دید که Personal.xlsb اضافه شده است.
- فایل را ذخیره کنید ، کار تمام است و بخش اول را انجام داده اید.
افزودن امکانات ویژه اکسل
بخش اول کار را که در واقع یک بار انجام می دهیم را در مرحله قبل انجام دادیم و حالا وقت آن رسیده که از این قابلیت استفاده کنیم و کافیست که مراحل زیر را انجام دهیم و از اکسل لذت بیشتری ببریم.
- با زدن کلیدهای Alt + F11 به قسمت کدنویسی اکسل می رویم
- در قسمت چپ که فایلها و آبجکتها وجود دارد روی Personal.xlsb کلیک میکنیم.
- پوشه Module را باز میکنیم و Module1 را انتخاب می کنیم
- نام آن را به Main تغییر می دهیم که البته این دلخواه است .
- روی Main دابل کلیک میکنیم و حالا فضای خالی سمت راست آماده است
افزودن چک باکس با یک کلیک
قبلا مفصل در مورد چک باکس در اکسل آموزش داده ایم و به دلیل اهمیت آن به عنوان اولین مورد از امکانات ویژه اکسل قرار است که به برنامه اکسل خود اضافه کنیم . کافیست که کدهای زیر را در ماژول Main که در مراحل قبل ایجاد کردیم قرار دهیم.
کدهای مورد نیاز چک باکس
Sub AddCheckboxes() Dim targetRange As Range Dim cell As Range Dim checkbox As Object Dim response As VbMsgBoxResult Dim defaultAddress As String Dim strMasg As String strMsg = ChrW(1605) & ChrW(1581) & ChrW(1583) & ChrW(1608) & ChrW(1583) & ChrW(1607) & ChrW(32) & ChrW(1575) & ChrW(1606) & ChrW(1578) & ChrW(1582) & ChrW(1575) & ChrW(1576) & ChrW(1740) & ChrW(32) & ChrW(1583) & ChrW(1575) & ChrW(1585) & ChrW(1575) & ChrW(1740) & ChrW(32) & ChrW(1575) & ChrW(1591) & ChrW(1604) & ChrW(1575) & ChrW(1593) & ChrW(1575) & ChrW(1578) & ChrW(32) & ChrW(1575) & ChrW(1587) & ChrW(1578) & ChrW(32) & ChrW(1548) & ChrW(32) & ChrW(1580) & ChrW(1575) & ChrW(1740) & ChrW(1711) & ChrW(1586) & ChrW(1740) & ChrW(1606) & ChrW(32) & ChrW(1588) & ChrW(1608) & ChrW(1583) & ChrW(32) & ChrW(1567) defaultAddress = Selection.Address Set targetRange = Selection If targetRange Is Nothing Then Exit Sub End If For Each cell In targetRange If cell.Value <> "" Then response = MsgBox(strMsg, vbYesNo + vbMsgBoxRight + vbExclamation, "officebaz.ir") If response = vbNo Then Exit Sub Exit For End If Next cell For Each cell In targetRange.Cells cell.Font.Color = cell.Interior.Color Set checkbox = ActiveSheet.CheckBoxes.Add(cell.Left, cell.Top, cell.Width, cell.Height) With checkbox .LinkedCell = cell.Address .Caption = "" .Name = "chk_" & cell.Address .Width = 14 .Height = 14 .Top = cell.Top + (cell.Height - .Height) / 2 .Left = cell.Left + (cell.Width - .Width) / 2 End With Next cell End Sub
برای اینکه بتوانیم کدهای بالا را در تمام فایلهای اکسل این کامپیوتر ران کنیم کافیست کارهایی که در ویدیو آموزشی اول مطلب قرار دادم را انجام دهید .
پیشنهاد شما برای تکمیل امکانات ویژه اکسل
تا اینجا در این آموزش فقط نحوه اضافه کردن چک باکس با یک کلیک را اضافه کردیم و قطعا می توان قابلیتهای دیگری به اکسل افزود تا کار را سرع تر و بهتر انجام دهیم .
چیزی که به فکر خودم می رسد تا اینجا اینست که یک گزینه برای نمایش قیمت لحظه ای دلار اضافه کنم.
شما اگر چیزی دیگری به ذهنتان می رسد تا امکانات ویژه اکسل را افزایش دهیم حتما در قسمت نظرات عنوان نمائید.
نمایش نرخ ارز به صورت آنلاین در اکسل
در این بخش از امکانات ویژه اکسل می خواهیم بحث نمایش قیمت دلار و درهم را به صورت آنلاین در برنامه اکسل داشته باشیم .
در این آموزش دو روش را بررسی کردم که هر دو روش در ویدیو توضیح داده شده و به دلیل مشکلی که روش اول داشت ، به ناچار از روش بعدی استفاده کردم که به فایل کمکی اکسل نیازی ندارد.
برای اینکه بتوانید قیمت ارزهای دلار و درهم را به صورت لحطه ای در اکسل داشته باشید ، کافیست ویدیو زیر را مشاهده کنید و کدهایی که در ادامه آن آورده شده است را به PERSONALMACRO.XLSB که قبلا در مورد آن صحبت کردیم اضافه کنید . این هم یکی دیگز از امکانات ویژه اکسل 👍
کدهای مورد نیاز برای نمایش قیمت ارز در اکسل
Sub ExtractTableFromWebAndFormat() ' متغيرها Dim webURLs(1 To 2) As String Dim html As Object Dim tableNumber As Integer Dim table As Object Dim targetRanges(1 To 2) As Range Dim priceSheet As Worksheet ' تنظيمات اوليه webURLs(1) = "https://www.tgju.org/profile/price_dollar_rl" webURLs(2) = "https://www.tgju.org/profile/price_aed" tableNumber = 0 ' شماره جدول مورد نظر ' چک کردن و حذف شيت "Price" اگر وجود داشته باشد On Error Resume Next Application.DisplayAlerts = False Sheets("Price").Delete Application.DisplayAlerts = True On Error GoTo 0 ' ايجاد شيت جديد با نام "Price" Set priceSheet = Sheets.Add(After:=Sheets(Sheets.Count)) priceSheet.Name = "Price" ' درخواست به وب سايت و دريافت جدول For i = 1 To 2 With CreateObject("MSXML2.ServerXMLHTTP") .Open "GET", webURLs(i), False .send Set html = CreateObject("htmlfile") html.body.innerHTML = .responseText End With ' دريافت جدول مورد نظر Set table = html.getElementsByTagName("table")(tableNumber) ' تعيين محدوده مقصد (سلول شروع) Set targetRanges(i) = priceSheet.Cells(2, (i - 1) * 3 + 1) priceSheet.Range("a1").Value = "نرخ دلار" priceSheet.Range("d1").Value = "نرخ درهم" ' نمايش جدول در محدوده مقصد InsertTableIntoWorksheet table, targetRanges(i) Next i ' تغييرات فرمت دهي ApplyFormattingToSheet priceSheet End Sub Sub InsertTableIntoWorksheet(table As Object, targetRange As Range) ' متغيرها Dim rowCounter As Long Dim columnCounter As Integer Dim tableRow As Object Dim tableCell As Object ' شروع از سلول مقصد rowCounter = targetRange.Row columnCounter = targetRange.Column ' پيمايش سطرها و ستونهاي جدول For Each tableRow In table.Rows For Each tableCell In tableRow.Cells ' قرار دادن مقدار در ورکشيت targetRange.Offset(rowCounter - targetRange.Row, columnCounter - targetRange.Column).Value = tableCell.innerText columnCounter = columnCounter + 1 Next tableCell ' بازنشاني شماره ستون به ستون مقصد براي شروع ستون جديد columnCounter = targetRange.Column rowCounter = rowCounter + 1 Next tableRow ' تنظيمات نمايش ورکشيت With targetRange.Resize(1, 2).Interior .Color = RGB(200, 200, 200) ' تغيير رنگ بکگراند دو ستون اول End With targetRange.Resize(, 2).EntireColumn.AutoFit ' اندازهگيري خودکار عرض دو ستون اول End Sub Sub ApplyFormattingToSheet(ws As Worksheet) ' محدودههايي که بايد فرمت دهي شوند Dim rangeToFormat As Range Set rangeToFormat = Union(ws.Range("A2:B12"), ws.Range("D2:E12")) ' تغيير فونت به VazirMatn FD ws.Cells.Font.Name = "VazirMatn FD" ActiveSheet.DisplayRightToLeft = True ' غيرفعال کردن خطوط شبکه (Gridlines) ws.Activate ActiveWindow.DisplayGridlines = False rangeToFormat.Borders(xlDiagonalDown).LineStyle = xlNone rangeToFormat.Borders(xlDiagonalUp).LineStyle = xlNone With rangeToFormat.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ThemeColor = 1 .TintAndShade = -0.499984740745262 .Weight = xlThin End With With rangeToFormat.Borders(xlEdgeTop) .LineStyle = xlContinuous .ThemeColor = 1 .TintAndShade = -0.499984740745262 .Weight = xlThin End With With rangeToFormat.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ThemeColor = 1 .TintAndShade = -0.499984740745262 .Weight = xlThin End With With rangeToFormat.Borders(xlEdgeRight) .LineStyle = xlContinuous .ThemeColor = 1 .TintAndShade = -0.499984740745262 .Weight = xlThin End With With rangeToFormat.Borders(xlInsideVertical) .LineStyle = xlContinuous .ThemeColor = 1 .TintAndShade = -0.499984740745262 .Weight = xlThin End With With rangeToFormat.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ThemeColor = 1 .TintAndShade = -0.499984740745262 .Weight = xlThin End With Columns("A:A").EntireColumn.AutoFit Columns("D:D").EntireColumn.AutoFit Range("B:B,E:E").Select Range("E1").Activate With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Range("A2").Select End Sub
ساخت پوشه با یک کلیک
فرض کنید که در محدوده A1:A10 لیستی از نام پرسنل دارید و یمخواهید برای هر کدام از آنها یک پوشه به نام ایشان بسازید و این کار را میخواهید خیلی سریع انجام دهید . چاره کار استفاده از دستورات VBA است که در ادامه به آن خواهیم پرداخت.
البته اگر بخواهیم جزئی از امکانات ویژه اکسل در نظر نگیریم ، قبلا در مورد ساخت پوشه در اکسل البته با روشی دیگر آموزش داده ایم که بررسی آن آموزش هم خالی از لطف نیست .
برای انجام این کار کافیست مراحل زیر را انجام دهید :
- کدهایی که در ادامه قرار داده شده را کپی کنید
- فایل اکسل را باز کنید و با زدن Alt + F11 به کد نویسی بروید.
- ماژول Main از فایل Personal Macro.xlsb را انتخاب کنید .
- کدهای کپی شده را آنجا قرار دهید .
البته لازم به ذکر است که حتما ویدیو ابتدایی این آموزش را ببینید تا در جریان قرار بگیرید 😎 که چگونه امکانات ویژه اکسل را در کامپیوتر خود داشته باشید.
کدهای مورد نیاز برای ساخت پوشه
Sub CreateFoldersBasedOnSelection() Dim selectedRange As Range Dim cell As Range Dim folderPath As String ' انتخاب محدوده از کاربر On Error Resume Next Set selectedRange = Application.InputBox("لطفاً يک محدوده انتخاب کنيد:", Type:=8) On Error GoTo 0 ' اگر کاربر کنسل کرد يا محدوده انتخاب نشد، از اجرا خارج شويد If selectedRange Is Nothing Then Exit Sub End If ' انتخاب مسير براي ايجاد پوشهها With Application.FileDialog(msoFileDialogFolderPicker) .Title = "لطفاً يک مسير براي ايجاد پوشهها انتخاب کنيد:" If .Show = -1 Then folderPath = .SelectedItems(1) & "\" Else Exit Sub End If End With ' ايجاد پوشه براي هر سلول در محدوده For Each cell In selectedRange Dim cellValue As String cellValue = Trim(cell.Value) ' اطمينان حاصل کنيد که نام پوشه خالي نيست If cellValue <> "" Then ' ايجاد مسير کامل با ترکيب مسير اصلي و نام سلول Dim fullPath As String fullPath = folderPath & cellValue ' اگر پوشه وجود نداشته باشد، آن را ايجاد کنيد If Dir(fullPath, vbDirectory) = "" Then MkDir fullPath End If End If Next cell MsgBox "پوشهها با موفقيت ايجاد شدند!", vbInformation + vbMsgBoxRight, "Officebaz.ir" End Sub
ایجاد پسورد قوی و استاندارد
آموزشی قبلا داده ایم که چگونه پسوردهای استاندارد و قوی در اکسل ایجاد کنید و در این قسمت میخواهیم با چند خط کد کاری کنیم که با یک کلیک یک پسورد 16 کاراکتری قوی ایجاد شود و فقط کارهای زیر را انجام دهید.
- مانند مراحل قبل پیش بروید تا PersonalMacro.xlsb را بتوانید ویرایش کنید
- کدهای زیر را به انتهای ماژول اضافه کنید
- برای افزودن به ریبون هم از همان روش که در ابتدای مطلب توضیح دادیم استفاده کنید
کدهای مورد نیاز برای ایجاد پسورد
Sub GeneratePassword() Dim characters As String Dim length As Integer Dim i As Integer Dim GeneratedPassword As String ' بررسي سلول فعال براي وجود داده If ActiveCell.Value <> "" Then MsgBox "سلول داراي اطلاعات است", vbMsgBoxRight + vbInformation, "Officebaz.ir" Exit Sub End If characters = "!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz}~" length = 16 GeneratedPassword = "" Randomize For i = 1 To length GeneratedPassword = GeneratedPassword & Mid(characters, Int((Len(characters) * Rnd) + 1), 1) Next i ' نوشتن پسورد توليدشده در سلول فعلي ActiveCell.Value = GeneratedPassword End Sub
تهیه پشتیبان از فایل اکسل
برای اینکه یک نسخه از فایل اکسلی که در حال کار با آن هستید را به راحتی بتوانید ذخیره کنید و به ان دسترسی داشته باشید می توانید از کدهای زیر استفاده کنید .
مراحل اولیه کار مانند ابتدای این آموزش هست و فقط باید کدهای زیر را هم به فایل PersonalMacro.xlsb اضافه کنید .
Sub officebazBackup() Dim CurrentFileName As String Dim BackupPath As String Dim BackupFileName As String Dim FileExtension As String Dim fso As Object ' مشخص کردن نام فايل جاري CurrentFileName = ActiveWorkbook.FullName ' مشخص کردن مسير پوشه backup BackupPath = "D:\backup\" ' بررسي وجود پوشه backup و ايجاد آن اگر وجود نداشت If Dir(BackupPath, vbDirectory) = "" Then MkDir BackupPath End If ' استخراج پسوند فايل جاري FileExtension = Right(CurrentFileName, Len(CurrentFileName) - InStrRev(CurrentFileName, ".")) ' ايجاد يک شيء FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject") ' تنظيم نام فايل بک آپ با نام فايل جاري، تاريخ و زمان فعلي و پسوند مورد نظر BackupFileName = BackupPath & fso.GetBaseName(CurrentFileName) & "_Backup_" & Format(Now, "yyyy-mm-dd_hhmmss") & "." & FileExtension ' ذخيره فايل جاري با نام جديد ActiveWorkbook.Save ActiveWorkbook.SaveAs BackupFileName ' بستن فايل جاري ' ActiveWorkbook.Close SaveChanges:=False ' نمايش پيام به کاربر MsgBox "فايل با موفقيت ذخيره شده و يک نسخه هم در مسير " & vbCrLf & vbCrLf & BackupPath & vbCrLf & vbCrLf & " قرار گرفت ", vbInformation + vbMsgBoxRight, "Officebaz.ir" End Sub
فقط دقت داشته باشید که در این کدها ، مسیر ذخیره سازی فایلها D:\Backup می باشد که در صورت تمایل می توانید آن را تغییر دهید .
ایجاد محدوده نام برای هر شیت
فرض کنید که یک فایل اکسل دارید حاوی بیش از 10 شیت که میخواهید به این شیتها دسترسی سریع داشته باشید ، یک راه ایجاد محدوده نام برای هر شیت یه نام همان شیت است.
با اضافه کردن کدهای زیر ، وقتی اجرا شوند از تمام شیتها یک نام ایجاد می کند
برای حذف و ویرایش نامه هم کافیست که کلیدهای ctrl + f3 را بزنید .
Sub creatNamebox() Dim ws As Worksheet Dim i As Integer For Each ws In ActiveWorkbook.Worksheets i = i + 1 ActiveWorkbook.Names.Add Name:=ws.Name, RefersTo:=ws.Range("A1") Next ws End Sub
تا اینجا 6 قابلیت را در قالب امکانات ویژه اکسل در این مطلب آموزش داده ایم و در قسمت نظرات منتظر ایده و پیشنهادات شما هستسم تا بتوانیم این امکانات ویژه اکسل را توسعه دهیم . اگر توضیح کدها در ویدیوها برای شما گنگ است پیشنهاد می کنم دوره VBA اکسل را مشاهده نمائید.
ایجاد شیت INDEX شامل نام تمام شیتها
فرض میکنیم که فایل اکسل داریم که حاوی تعداد زیادی شیت است و جابجایی بین شیتها کمی زمان بر می باشد با کدهایی که در ادامه قرار داده می شود ، و با اجرای آن یک جدید به فیا شا اضافه می شود به نام INDEX که در ستون B آن نام شیتها قرار می گیرد.
با کلیک بر روی هر نام به همان شیت منتقل خواهید شده و HYPERLINK می شود و علاوه بر آن اگر آدرس A1 شیتها خالی باشند در هر شیت هم نوشته Back در A1 قرار میگرد که با کلیک روی آن به شیت INDEX منتقل می شود .