تعریف محدوده متغیر برای لیست باكس

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • ظهور 313

    • 2017/01/20
    • 244

    پرسش تعریف محدوده متغیر برای لیست باكس

    سلام و عرض ادب
    میخوام برای یه لیست باكس، محدوده متغیر تعریف كنم. به این معنا كه محدوده لیست باكس، براساس ردیف‌هایی كه دارای اطلاعات هستند تعریف بشه

    ممنون میشم اگه دوستان راهنمایی بفرمایند
  • Amir Ghasemiyan

    • 2013/09/20
    • 4598
    • 100.00

    #2
    نوشته اصلی توسط ظهور 313
    سلام و عرض ادب
    میخوام برای یه لیست باكس، محدوده متغیر تعریف كنم. به این معنا كه محدوده لیست باكس، براساس ردیف‌هایی كه دارای اطلاعات هستند تعریف بشه

    ممنون میشم اگه دوستان راهنمایی بفرمایند

    سلام دوست عزيز

    بهترين راه اينه كه از ابزار table استفاده كنيد. فوق العاده براي دايناميك كردن مناسبه. در واقع علت وجوديش هم همين هست.
    اين دو پست رو مطالعه بفرماييد

    ۲۳ نکته جداول اکسل (۱) - جدول اكسل - Excel Table - جامعه اکسل ایرانیان
    ۲۳ نکته جداول اکسل (۲) - جدول اكسل - Excel Table - جامعه اکسل ایرانیان

    براي استفاده از تيبل در vba هم خيلي راحت به اين صورت عمل ميكنيد. كافيه نام اون تيبل رو بدونيد.
    کد:
    Range("Table1")

    کامنت

    • ظهور 313

      • 2017/01/20
      • 244

      #3
      نوشته اصلی توسط Amir Ghasemiyan

      سلام دوست عزيز

      بهترين راه اينه كه از ابزار table استفاده كنيد. فوق العاده براي دايناميك كردن مناسبه. در واقع علت وجوديش هم همين هست.
      اين دو پست رو مطالعه بفرماييد

      ۲۳ نکته جداول اکسل (۱) - جدول اكسل - Excel Table - جامعه اکسل ایرانیان
      ۲۳ نکته جداول اکسل (۲) - جدول اكسل - Excel Table - جامعه اکسل ایرانیان

      براي استفاده از تيبل در vba هم خيلي راحت به اين صورت عمل ميكنيد. كافيه نام اون تيبل رو بدونيد.
      کد:
      Range("Table1")
      بله جناب قاسمیان عزیز
      بنده از جداول استفاده میکنم
      اما مشکل من اینه که داده‌ها رو از یه جدول دیگه به جدول مورد نظرم فراخوانی میكنم، اما داده‌هایی كه هربار فراخوانی میشه، متغیر هست، فرض كنید بار اول ده سطر داده فراخوانی میشه، و این باعث میشه كه سطرهای جدولم گسترش پیدا كنه، حالا اگه دفعه بعدی داده‌های كمتری رو فراخوانی كنم (مثلا دو ردیف) حالا جدولی دارم كه ده سطر داره، اما تنها دو ردیف داده داره. خوب حالا اگه همون جدول رو به عنوان سورس لیست باكس داده باشم، ردیف‌های خالی هم در لیست باكس میاد كه این زیاد جالب نیست. مخصوصا اگه بخواین قابلیت انتخاب چند گزینه‌ای در لیست باكس رو انتخاب كنید

      کامنت

      • ali.b

        • 2014/01/12
        • 798

        #4
        نوشته اصلی توسط ظهور 313
        بله جناب قاسمیان عزیز
        بنده از جداول استفاده میکنم
        اما مشکل من اینه که داده‌ها رو از یه جدول دیگه به جدول مورد نظرم فراخوانی میكنم، اما داده‌هایی كه هربار فراخوانی میشه، متغیر هست، فرض كنید بار اول ده سطر داده فراخوانی میشه، و این باعث میشه كه سطرهای جدولم گسترش پیدا كنه، حالا اگه دفعه بعدی داده‌های كمتری رو فراخوانی كنم (مثلا دو ردیف) حالا جدولی دارم كه ده سطر داره، اما تنها دو ردیف داده داره. خوب حالا اگه همون جدول رو به عنوان سورس لیست باكس داده باشم، ردیف‌های خالی هم در لیست باكس میاد كه این زیاد جالب نیست. مخصوصا اگه بخواین قابلیت انتخاب چند گزینه‌ای در لیست باكس رو انتخاب كنید
        سلام
        در جایی از کد که وظیفه فراخوانی رو داره این کد رو قرار بدین تا بعد از هر بار اجرای کرد در اخرین مرحله اطلاعات کمبوباکس رو آپدیت کنه
        کد:
        ComboBox3.Clear
        Dim r As Range
        With CreateObject("Scripting.Dictionary")
            .CompareMode = vbTextCompare
            For Each r In Sheet2.Range("E2", Sheet2.Range("E" & Rows.Count).End(xlUp))[COLOR=#ff0000].SpecialCells(xlCellTypeVisible[/COLOR])
                If Not IsEmpty(r) And Not .exists(r.Value) Then .add r.Value, Nothing
            Next
            Me.ComboBox3.LIST = .keys
        End With
        ضمنا این کد داده های تکراری رو نمایش نمیده مثلا اگه در یک ستون 10 تا کلمه علی باشه فقط یک علی در کمبو نشون میده
        رنگ قرمز مربوط به اینه اگه شیت فیلتر میشه و فقط داده های فیلتر شده رو نیاز داری این کد باشه در غیر اینصورت پاک کنید
        یا اگه غیر این بود می تونید از این کد استفاده کنید فقط باید name manager تعریف کنید و در row source کمبو باکس اسم رنج رو قرار بدید مثلا myrange

        کد:
        Range("A1", Range("A65536").End(xlUp)).Name = "MyRange"
        [CENTER]
        [/CENTER]

        کامنت

        • ظهور 313

          • 2017/01/20
          • 244

          #5
          نوشته اصلی توسط ali.b
          سلام
          در جایی از کد که وظیفه فراخوانی رو داره این کد رو قرار بدین تا بعد از هر بار اجرای کرد در اخرین مرحله اطلاعات کمبوباکس رو آپدیت کنه
          کد:
          ComboBox3.Clear
          Dim r As Range
          With CreateObject("Scripting.Dictionary")
              .CompareMode = vbTextCompare
              For Each r In Sheet2.Range("E2", Sheet2.Range("E" & Rows.Count).End(xlUp))[COLOR=#ff0000].SpecialCells(xlCellTypeVisible[/COLOR])
                  If Not IsEmpty(r) And Not .exists(r.Value) Then .add r.Value, Nothing
              Next
              Me.ComboBox3.LIST = .keys
          End With
          ضمنا این کد داده های تکراری رو نمایش نمیده مثلا اگه در یک ستون 10 تا کلمه علی باشه فقط یک علی در کمبو نشون میده
          رنگ قرمز مربوط به اینه اگه شیت فیلتر میشه و فقط داده های فیلتر شده رو نیاز داری این کد باشه در غیر اینصورت پاک کنید
          یا اگه غیر این بود می تونید از این کد استفاده کنید فقط باید name manager تعریف کنید و در row source کمبو باکس اسم رنج رو قرار بدید مثلا myrange

          کد:
          Range("A1", Range("A65536").End(xlUp)).Name = "MyRange"
          ممنون بابت وقتی كه گذاشتید دوست عزیز، اما منظور من محدوده لیست باكس بود، نه كمبوباكس

          کامنت

          چند لحظه..