سبد خرید 0

وبلاگ

لیست کردن نام شیت ها در ComboBox با کد ساده VBA

لیست کشویی با combobox

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

اهداف آموزش لیست کردن نام شیت ها در ComboBox :

  • نحوه ایجاد ComboBox
  • نحوه لیست کردن شیت ها در ComboBox با حلقه For … Next
  • لینک شیت ها به یکدیگر از طریق ComboBox

نحوه ایجاد ComboBox :

برای لیست کردن نام شیت ها در ComboBox بصورت یک لیست کشویی لازم است ابتدا یک کمبوباکس در شیت دلخواه ایجاد کنیم.برای اینکار از تب Developer و گروه مربوط به Controls ، از داخل Insert و گروه ActiveX Controls روی گزینه ComboBox یکبار کلیک چپ کنید و به داخل شیت رفته و یکبار دیگر کلیک چپ کنید تا کمبوباکس ایجاد شود.

برای مثال من کمبوباکس را در شیتی به نام MainPage مانند شکل شماره1 ایجاد کردم.

آموزش ایجاد combobox در شیت اکسل
شکل شماره 1 – نحوه ایجاد combobox در شیت اکسل

نحوه لیست کردن نام شیت ها در ComboBox با حلقه For … Next :

اکنون در قسمت پایین اکسل روی نام شیتی که کمبوباکس را ایجاد کردیم کلیک راست نموده و گزینه View Code را بزنید تا وارد محیط کدنویسی شوید.سپس مطابق شکل شماره2 از بالای صفحه کدنویسی، لیست سمت چپ را روی Worksheet و لیست سمت راست را روی Activate تنظیم کنید.با اینکار دو خط کد بصورت اتوماتیک ایجاد می شود.

حالا یکی از کدهای زیر را مطابق شکل شماره 2 بین اون دو خط کد کپی کنید.

روش اول کدنویسی لیست کردن :

Private Sub Worksheet_Activate()
ComboBox1.Clear
For i = 1 To Sheets.Count
    ComboBox1.AddItem Sheets(i).Name
Next i
End Sub

روش دوم کدنویسی لیست کردن :

Private Sub CommandButton2_Click()
ComboBox1.Clear
Dim shts As Worksheet
For Each shts In Worksheets
    ComboBox1.AddItem (shts.Name)
Next shts
End Sub
کدنویسی مربوط به لیست کردن نام شیت ها در combobox
شکل شماره 2 – کدنویسی مربوط به لیست کردن نام شیت ها در combobox

حالا اگر شما یک شیت دیگه ای رو انتخاب و دوباره به همان شیت MainPage برگردید مشاهده خواهید کرد نام شیت ها داخل کمبوباکس لیست شده است.

لیست کردن نام شیت ها در ComboBox
شکل شماره 3 – انتخاب نام شیت موردنظر از بین شیت های موجود در لیست

لینک شیت ها به یکدیگر از طریق ComboBox :

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

اکنون روی کمبوباکسی که ایجاد کرده بودیم کلیک راست کرده و گزینه View Code رو بزنید تا وارد محیط کدنویسی شوید.حالا مطابق شکل شماره4 از بالای صفحه کدنویسی، لیست سمت چپ را روی ComboBox1 و لیست سمت راست را روی Change تنظیم کرده و کدهای زیر رو مطابق شکل شماره 4 وارد کنید.

Private Sub ComboBox1_Change()
Sheets(ComboBox1.Text).Select
End Sub
انتقال سریع بین شیت ها از طریق combobox
شکل شماره 4 – انتقال سریع بین شیت ها از طریق combobox

مساله ای که اینجا وجود داره این هست که ممکنه زمان انتخاب مجدد شیت MainPage دچار خطا بشید.برای اینکه این خطا اتفاق نیوفته کد بالایی رو بصورت زیر اصلاح می کنیم:

Private Sub ComboBox1_Change()
If Not ComboBox1.Text = "" Then
    Sheets(ComboBox1.Text).Select
End If
End Sub


منبع :

https://support.office.com

اشتراک گذاری:

مطالب زیر را حتما مطالعه کنید

17 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • با سلام و احترام. خیلی عالی و رسا توضیح دادین. خیلی خیلی ممنون بابت وقتی که گذاشتین واسه تهیه این آموزش

  • سلام
    چندین فرم طراحی کردم و در هر فرم تکست باکس و کمبوباکس گذاشتم و همینطور در یک شیت تیبل لیستی استاندارد محتوی فرمها تهیه کردم
    سئوال
    1- قادر به درج اطلاعات در تکست لیستها و کمبوباکسها نیستم چگونه می توانم فعالشان کنم تا محتوی آن در تیبل لیست بنشیند
    2-با چه دستوری می توانم بوسیله یک کامنت باتم یک فریم و محتوی آنرا پنهان و آشکار کنم . حالت شرطی بین دو فریم برقرار باشد . با کلیک کردن کامنت باتم یکی پنهان شود و دیگری آشکار و برعکس
    سپاسگزارم

    • سلام وقت بخیر.

      1- در دوره رایگان آموزش VBA همه این موارد کامل توضیح داده شده .میتونید دانلود و مشاهده کنید.

      2- برای مخفی کردن UserForm جاری از کد Me.Hide استفاده کنید و برای نمایش UserForm دوم از کد UserForm2.Show استفاده کنید.دقت کنید اولویت کدنویسی رعایت شود.به شکل زیر :

      Me.Hide
      UserForm2.Show

      • آقا جاوید عزیز و مهربان دم شما گرم . من جانباز 70 درصد هستم و 60 سال سن دارم . ببخشید جسارت می کنم سئوالهای ساده و ابتدایی می کنم . دوران کرونایی است و یه جورایی دارم خودم را مشغول می کنم . از اینکه کمکم می کنید بسیار سپاسگزارم .

      • سلام مجدد از چندین یوزرفرم مستقل استفاده بکنیم بهتر است یا اینکه هموارد در یک یوزرفرم و در غالب چندین page انجام شود ؟؟

        • هردوی اینموارد لازم است.اما حدالمقدور از یوزرفرم ها کمتر استفاده کنید.

  • سلام آقا جاوید عزیز من از دستور
    Private Sub TextBox1_Change()
    TextBox1.Text = Format(TextBox1, “#,###”)
    End Sub
    برای جدا سازی سه رقم اعداد در تکست باکس استفاده کردم ولی جداسازی انجام نشده است ؟
    آیا در قسمت پراپرتی هم بایستی کاری انجام دهم در چه قسمتش . سپاسگزارم

    • سلام. وقت بخیر

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

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

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

          Sheet1.Range(“”)=”javidsoft
          Sheet1.Unprotect

          کد باید بصورت زیر نوشته شود :

          Sheet1.Unprotect
          Sheet1.Range(“”)=”javidsoft

  • سلام و صبح بخیر
    چند تکس باکس عددی دارم که می خواهم سه رقم سه رقم جدا شوند آیا بایستی برای هریک از آنها مستقلا کد : Private Sub TextBox1_Change()
    TextBox1.Text = Format(TextBox1, “#,###”)
    End Sub
    بنویسم یا راه ساده تری و کم حجم تری وجود دارد ؟؟ سپاسگزارم

  • باسلام ودعای خیر
    من دوتا سوال دارم یک فرم طراحی کردم می خوام به شیت3متصل کنم تا اطلاعات در آنجا قرار گیرد
    دو.من دوتا کمبوباکس وابسته دارم میشه بفرمایید چطوری می توانم این کمبوباکس وابسته در یوزرفرم داشته باشم

    • سلام. وقت بخیر

      1- میتونید دوره رایگان آموزش VBA را تهیه کنید که کامل آموزش داده شده.

      2- اگر از Name Manager برای لیست وابسته استفاده کرده اید میتونید از قسمت تنظیمات کمبوباکس، گزینه Cell Link را به سلول ها لینک کنید.

  • با سلام
    چطور میشه یک ستون از اسم ها رو به کمبو باکس اضافه کنیم

دیدگاهتان را بنویسید