ساخت مودول؟؟؟

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • saber2q

    • 2012/04/13
    • 90

    ساخت مودول؟؟؟

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

    میشه اساتید راهنمایی کنن/؟؟
  • s.cheraghi

    • 2011/02/27
    • 311

    #2
    RE: ساخت مودول؟؟؟

    سلام دوست عزیز
    نیازی به ماژول کلاس نیست و تا اونجائیکه که من فهمیدم درصورتیکه دقیقا یک کار قرار است انجام بشه، با نوشتن ماژول و اجرای اون مشکلتون حل میشه ولی اگه کارتون فزق میکنه باید کدها برای هر یک از کنترل ها به صورت جداگانه نوشته بشه
    اگه فایل بذارین و یا بیشتر توضیح بدین، امکان کمک بیشتر میشه
    در یادگیری سیر نشوید :idea:

    برای ارتباط بیشتر به [URL="https://excelpedia.net/"]سایت[/URL] [URL="https://excelpedia.net"][B][COLOR=#008000]ExcelPedia [/COLOR][/B][/URL]سربزنید.
    برگزاری [URL="https://excelpedia.net/excel-ninja/"]دوره های آموزش[/URL] [URL="https://excelpedia.net/what-is-excel/"][B]اکسل [/B][/URL]در تهران
    [URL="https://excelpedia.net/category/excel-functions/"][B]آموزش توابع اکسل[/B][/URL]

    کامنت

    • Javid Mokhtari
      مدير تالار ويژوال بيسيك

      • 2012/01/16
      • 1212
      • 73.00

      #3
      RE: ساخت مودول؟؟؟

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

      میشه اساتید راهنمایی کنن/؟؟
      با سلام و کسب اجازه از اساتید.
      آره،میشه یه همچین کاری کرد:
      تو فرم زیر یک ماژول درست شده و از طریق Call تو فرم ها فراخوانی میشه.
      Call For RepCode
      [FONT=Tahoma][INDENT][CENTER][SIZE=3][FONT=courier new][B][FONT=comic sans ms][SIZE=3][FONT=arial]دوره های آموزش رایگان اکسل از صفر تا پیشرفته بصورت تصویری
      بیش از [COLOR=#008000]60[/COLOR] جلسه آموزش ویدئویی رایگان

      شرکت در دوره:
      [/FONT][/SIZE]
      [SIZE=5] [FONT=Tahoma][FONT=courier new][B][URL]https://javidsoft.ir/courses/[/URL][/B][/FONT][/FONT][/SIZE][/FONT]
      [/B][/FONT][/SIZE]
      [/CENTER]
      [/INDENT]
      [/FONT]

      کامنت

      • saber2q

        • 2012/04/13
        • 90

        #4
        RE: ساخت مودول؟؟؟

        سلام
        فرض کنید در قسمتی از فرم این کدها جهت بارگذاری اطلاعات لیست باکس وارد شده:
        کد:
        i = 1
        For Each c In Sheet14.Range("b2:b100")
            If c <> "" Then
                ListBox1.ColumnHeads = True
                ListBox1.AddItem
                ListBox1.List(ListBox1.ListCount - 1, 1) = c.Offset(0, 1)
                ListBox1.List(ListBox1.ListCount - 1, 0) = c.Offset(0, 2)
                ListBox1.List(ListBox1.ListCount - 1, 2) = i
            End If
            i = i + 1
        Next
        که این کد مربوط میشه به لیست باکس1 و رنج مذکور اما من میخوام این کدها به همراه نام کنترل لیست باکس و رنجش که مغییر هستن رو در جاهای مختلف فرمهای مختلف استفاده کنم و فقط نام لیست باکس و رنجش رو معرفی کنم به ماکرو...

        با سلام و کسب اجازه از اساتید.
        آره،میشه یه همچین کاری کرد:
        تو فرم زیر یک ماژول درست شده و از طریق Call تو فرم ها فراخوانی میشه.
        Call For RepCode
        ممنون این خیلی خوبه اما همه لیست باکسها باید همنام باشن و رنج هم قابل تغییر نیست، چطور میشه این دو آپشن رو متغییر کنیم؟

        کامنت

        • m_d6712

          • 2010/05/22
          • 174

          #5
          RE: ساخت مودول؟؟؟

          نوشته اصلی توسط saber2q
          سلام
          فرض کنید در قسمتی از فرم این کدها جهت بارگذاری اطلاعات لیست باکس وارد شده:
          کد:
          i = 1
          For Each c In Sheet14.Range("b2:b100")
              If c <> "" Then
                  ListBox1.ColumnHeads = True
                  ListBox1.AddItem
                  ListBox1.List(ListBox1.ListCount - 1, 1) = c.Offset(0, 1)
                  ListBox1.List(ListBox1.ListCount - 1, 0) = c.Offset(0, 2)
                  ListBox1.List(ListBox1.ListCount - 1, 2) = i
              End If
              i = i + 1
          Next
          که این کد مربوط میشه به لیست باکس1 و رنج مذکور اما من میخوام این کدها به همراه نام کنترل لیست باکس و رنجش که مغییر هستن رو در جاهای مختلف فرمهای مختلف استفاده کنم و فقط نام لیست باکس و رنجش رو معرفی کنم به ماکرو...

          با سلام و کسب اجازه از اساتید.
          آره،میشه یه همچین کاری کرد:
          تو فرم زیر یک ماژول درست شده و از طریق Call تو فرم ها فراخوانی میشه.
          Call For RepCode
          ممنون این خیلی خوبه اما همه لیست باکسها باید همنام باشن و رنج هم قابل تغییر نیست، چطور میشه این دو آپشن رو متغییر کنیم؟

          برای این کار از این تابع استفاده کنید. این دو تابع دو آرگومان دارد
          کد:
          Function rlist(lbox As UserForm.ListBox, rg As Range)
              Dim i As Integer
              i = 1
              For Each c In rg
               If c <> "" Then
                  lbox.ColumnHeads = True
                  lbox.AddItem
                  lbox.list(lbox.ListCount - 1, 1) = c.Offset(0, 1)
                  lbox.list(lbox.ListCount - 1, 0) = c.Offset(0, 2)
                  lbox.list(lbox.ListCount - 1, 2) = i
                  End If
                  i = i + 1
              Next
              
          End Function
          برای فراخوای تابع هم مثلا در یک یوزر فرم اینطور عمل می نمایید.
          کد:
          Private Sub UserForm_Click()
          Call rlist(ListBox1, Sheet1.Range("b2:b100"))
          End Sub
          [php]
          -------
          [url=http://md6712.com]http://md6712.com[/url]
          جامعه ایده پردازان: http://idekadeh.com

          کامنت

          • saber2q

            • 2012/04/13
            • 90

            #6
            RE: ساخت مودول؟؟؟

            نوشته اصلی توسط m_d6712
            نوشته اصلی توسط saber2q
            سلام
            فرض کنید در قسمتی از فرم این کدها جهت بارگذاری اطلاعات لیست باکس وارد شده:
            کد:
            i = 1
            For Each c In Sheet14.Range("b2:b100")
                If c <> "" Then
                    ListBox1.ColumnHeads = True
                    ListBox1.AddItem
                    ListBox1.List(ListBox1.ListCount - 1, 1) = c.Offset(0, 1)
                    ListBox1.List(ListBox1.ListCount - 1, 0) = c.Offset(0, 2)
                    ListBox1.List(ListBox1.ListCount - 1, 2) = i
                End If
                i = i + 1
            Next
            که این کد مربوط میشه به لیست باکس1 و رنج مذکور اما من میخوام این کدها به همراه نام کنترل لیست باکس و رنجش که مغییر هستن رو در جاهای مختلف فرمهای مختلف استفاده کنم و فقط نام لیست باکس و رنجش رو معرفی کنم به ماکرو...

            با سلام و کسب اجازه از اساتید.
            آره،میشه یه همچین کاری کرد:
            تو فرم زیر یک ماژول درست شده و از طریق Call تو فرم ها فراخوانی میشه.
            Call For RepCode
            ممنون این خیلی خوبه اما همه لیست باکسها باید همنام باشن و رنج هم قابل تغییر نیست، چطور میشه این دو آپشن رو متغییر کنیم؟

            برای این کار از این تابع استفاده کنید. این دو تابع دو آرگومان دارد
            کد:
            Function rlist(lbox As UserForm.ListBox, rg As Range)
                Dim i As Integer
                i = 1
                For Each c In rg
                 If c <> "" Then
                    lbox.ColumnHeads = True
                    lbox.AddItem
                    lbox.list(lbox.ListCount - 1, 1) = c.Offset(0, 1)
                    lbox.list(lbox.ListCount - 1, 0) = c.Offset(0, 2)
                    lbox.list(lbox.ListCount - 1, 2) = i
                    End If
                    i = i + 1
                Next
                
            End Function
            برای فراخوای تابع هم مثلا در یک یوزر فرم اینطور عمل می نمایید.
            کد:
            Private Sub UserForm_Click()
            Call rlist(ListBox1, Sheet1.Range("b2:b100"))
            End Sub
            [php]
            سلام
            من این روشی که گفتید رو دقیقا اجرا کردم ولی جواب نداد... :huh:

            به محضی که میخوام تو کد دهی برم خط بعد این ارور رو میده.

            کد:
            Compile erore
            expected: =

            کامنت

            • m_d6712

              • 2010/05/22
              • 174

              #7
              RE: ساخت مودول؟؟؟

              اگر امکانش هست فایل را قرار دهید تا بررسی کنم.
              -------
              [url=http://md6712.com]http://md6712.com[/url]
              جامعه ایده پردازان: http://idekadeh.com

              کامنت

              • saber2q

                • 2012/04/13
                • 90

                #8
                RE: ساخت مودول؟؟؟

                نوشته اصلی توسط m_d6712
                اگر امکانش هست فایل را قرار دهید تا بررسی کنم.
                در نمونه فایلی که جناب jansiz hayat زحمتش رو کشیده نگاه کنید:
                http://persiandrive.com/492312

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

                کامنت

                • s.cheraghi

                  • 2011/02/27
                  • 311

                  #9
                  RE: ساخت مودول؟؟؟

                  با سلام
                  این فایل براتون آماده کردم
                  ببینید مناسب هست
                  فایل های پیوست شده
                  در یادگیری سیر نشوید :idea:

                  برای ارتباط بیشتر به [URL="https://excelpedia.net/"]سایت[/URL] [URL="https://excelpedia.net"][B][COLOR=#008000]ExcelPedia [/COLOR][/B][/URL]سربزنید.
                  برگزاری [URL="https://excelpedia.net/excel-ninja/"]دوره های آموزش[/URL] [URL="https://excelpedia.net/what-is-excel/"][B]اکسل [/B][/URL]در تهران
                  [URL="https://excelpedia.net/category/excel-functions/"][B]آموزش توابع اکسل[/B][/URL]

                  کامنت

                  • saber2q

                    • 2012/04/13
                    • 90

                    #10
                    RE: ساخت مودول؟؟؟

                    ممنون، همینو میخوام منم، فقط چند تا سوال دارم.

                    این کدیه که شما نوشتی:
                    Option Explicit

                    Private Sub UserForm_Initialize()
                    Dim a As Range
                    On Error Resume Next
                    Set a = Application.InputBox("select range:", Type:=8)
                    Call Module1.fil(UserForm1.ListBox1, a)
                    End Sub
                    1- Option explicit کارش چیه؟
                    2- set در خط پتجم که نوشتید Set a =... کارش چیه و اگر نباشه چه اتفاقی میافته؟
                    3- چجوری سر ستون لیست باکس رو بهش میتونیم عنوان بدیم؟من هر کاری کردم نتونستم.

                    با تشکر

                    کامنت

                    • s.cheraghi

                      • 2011/02/27
                      • 311

                      #11
                      RE: ساخت مودول؟؟؟

                      با سلام
                      1- Option explicit کارش چیه؟
                      هدف از قرار گرفتن این جمله در بالای هر ماژول، الزام برنامه نویس به تعریف دقیق تمام متغیرها هست
                      برای اینکه در تمام ماژول هایی که ایجاد میکنید این جمله در اولین خط قرار بگیرند:
                      Tools>Option>Editor
                      تیک گزینه Require Variable Declaration را بزنید.

                      2- set در خط پتجم که نوشتید Set a =... کارش چیه و اگر نباشه چه اتفاقی میافته؟
                      Set برای مقدار دهی به متغیرهای شئ هست، با توجه به اینکه متغیر a در اینجا از نوع Range تعریف شده، برای نسبت دادن به اون باید از این کلمه استفاده کنیم.

                      3- چجوری سر ستون لیست باکس رو بهش میتونیم عنوان بدیم؟
                      برای اینکه مشخص کنید یک لیست باکس یا کمبو باکس دارای عنوان هست از خصوصیت ColumnHeads استفاده می شود که در صورت اینکه مقدار آن True باشد پس از اینکه شما در برنامه RowSource را مشخص کردین، اکسل به صورت خودکار سلول بالا( در صورت داشتن چندین ستون، سلول های بالای ستون های انتخاب شده به عنوان RowSource) را عنوان هر ستون در لیست باکس تعیین می کند
                      در یادگیری سیر نشوید :idea:

                      برای ارتباط بیشتر به [URL="https://excelpedia.net/"]سایت[/URL] [URL="https://excelpedia.net"][B][COLOR=#008000]ExcelPedia [/COLOR][/B][/URL]سربزنید.
                      برگزاری [URL="https://excelpedia.net/excel-ninja/"]دوره های آموزش[/URL] [URL="https://excelpedia.net/what-is-excel/"][B]اکسل [/B][/URL]در تهران
                      [URL="https://excelpedia.net/category/excel-functions/"][B]آموزش توابع اکسل[/B][/URL]

                      کامنت

                      چند لحظه..