ایجاد نمودار ها و چارت ها در VBA

Collapse
X
 
  • زمان
  • Show
Clear All
new posts
  • m_d6712

    • May 2010
    • 174

    ایجاد نمودار ها و چارت ها در VBA

    یکی از بهترین روش ها برای ایجاد چارت در VBA به صورت زیر می باشد.

    کد:
    Dim mychart As Chart
    Set mychart = ActiveWorkbook.Charts("نام چارت مورد نظر")
         
    mychart.ChartType = xlXYScatterLinesNoMarkers
    mychart.SetSourceData Source:=Worksheets("نام شیت داده ها").Range("A:A,C:C"), PlotBy:=xlColumns
    mychart.Axes(xlValue, xlPrimary).MinimumScale = 0
    mychart.Axes(xlCategory, xlPrimary).HasTitle = True
    mychart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "نام محور افقی"
    خط اول یک شی از نوع چارت ایجاد کرد.
    خط دوم مقدار شی رو برابر با یک چارت که در صفحه اکسل موجود است کرد.
    خط سوم نوع چارت رو مشخص می کنه
    خط چهارم حدود داده ها رو برای رسم چارت مشخص می کنه
    خط پنجم کمترین مقادیر برای چارت
    خط ششم مشخص می کنه که محور x دارای عنوان است
    و خط آخر هم Title رو مشخص می کنه


    البته امکانات دیگر رو هم می توان بهش اضافه کرد.

    مثلا برای ایحاد جدول جدید از می توان به جای خط دوم کد قبلی این خط رو نوشت:
    کد:
    Set mychart = ActiveWorkbook.Charts.Add
    -------
    http://md6712.com
    جامعه ایده پردازان: http://idekadeh.com
  • esyoo

    • March 2010
    • 151

    #2
    RE: ایجاد نمودار ها و چارت ها در VBA

    میشه یک فایل نمونه قرار بدید؟
    با تشکر

    Comment

    • m_d6712

      • May 2010
      • 174

      #3
      RE: ایجاد نمودار ها و چارت ها در VBA

      در فایل الگوریتم SA وجود داره یک نمونه! چک کنید.
      http://forum.exceliran.com/showthread.php?tid=201
      -------
      http://md6712.com
      جامعه ایده پردازان: http://idekadeh.com

      Comment

      • behrangbinesh

        • August 2010
        • 14

        #4
        RE: ایجاد نمودار ها و چارت ها در VBA

        سلام
        یک سوال داشتم در همین زمینه
        ما چارتی داریم که هر دفعه جدولش تغییر میکنه
        میشه کاری کرد که اطلاعات مربوط به جدول رو از یک یا چند سلول بخونه و نمایش بده؟
        [align=center]وب سایت بهرنگ بینش
        *
        --------------------------------------------------------------------------------------------------------
        *
        مجله الکترونیک ریسک و بیمه [/align]

        Comment

        • m_d6712

          • May 2010
          • 174

          #5
          RE: ایجاد نمودار ها و چارت ها در VBA

          نوشته اصلی توسط behrangbinesh
          سلام
          یک سوال داشتم در همین زمینه
          ما چارتی داریم که هر دفعه جدولش تغییر میکنه
          میشه کاری کرد که اطلاعات مربوط به جدول رو از یک یا چند سلول بخونه و نمایش بده؟
          سلام
          بله! این کار امکان پذیر است!
          میشه توضیحات بیشتری بدهید.

          در همون فایلی Simulated Anealing داره! (SA) این طور هست که با هر بار RUn اطلاعات جداول عوض می شود و بر اساس اطلاعات این جداول دوباره چارت کشیده می شود.
          شما باید هر بار که اطلاعات جداول عوض می شود چارت را دوباره رسم کنید. یعنی همه کد های بالا را run کنید.
          -------
          http://md6712.com
          جامعه ایده پردازان: http://idekadeh.com

          Comment

          • esyoo

            • March 2010
            • 151

            #6
            RE: ایجاد نمودار ها و چارت ها در VBA

            پیرو پست های 4و5و6و7 در این تاپیک
            آیا می توان نمودار را روی یوزر فورم نمایش داد؟
            با درود فراوان
            بله همانطور که یک تکس باکس و یا یک لیبل رو رو یوزفرم قرار می دهی یک چارت هم میتوان به فرم اضافه کرد
            اگر روی تولز باکس چارت نداری با راست کلیک روی یکی از آبجکت ها به منوی additional controls رفته و آن را تیک بزنید

            با کلیک بر روی additional controls مراحل زیر را باید طی کنید.

            [][تصویر: tjahmbebdw18a570lykj_thumb.jpg][/]


            مرحله دوم

            [i][تصویر: hok3mj9fdn7zeaffb7xj_thumb.jpg][/]

            یادت باشه جایی که با فلاش قرمز مشخص کردم نباید تیک خورده باشه تا آبجکهای تیک نخورده رو بتونی ببینی
            گفتم ادامه بحث رو بیارم اینجا تا در تاپیک خودش قرار بگیره
            من این گزینه ها رو فعال کردم(نصب دوباره ویندوز و اکسل!)
            ولی به جای ارتباط با شیت های خود اکسل از شیت های که خودش در اختیار ما قرار میده استفاده می کند!
            در واقع من میخوام اطلاعات رو از شیت 1 بگیره و نمودار رو روی یک userformنمایش بده
            با تشکر

            Comment

            • behrangbinesh

              • August 2010
              • 14

              #7
              RE: ایجاد نمودار ها و چارت ها در VBA

              سلام
              با تشکر از شما دوست عزیز
              منظورم رو شاید بد گفته باشم
              مثلا اطلاعات ما همیشه تو a3:c3 نباشه
              یک بار تو a3:c3 باشه یک بار توی a5:c5 هستش
              اولی تو شیت 1 و دومی تو شیت 2
              من میخوام مثلا سه تا فروشنده دارم
              که اطلاعاتشون تو سه تا شیت مختلفه
              حالا میخوام که تو یه شیت اطلاعاتی، با انتخاب اسم افراد، نمودارشون رو نمایش بدیم
              امکانش هست یا نیست؟
              با تشکر از شما
              [align=center]وب سایت بهرنگ بینش
              *
              --------------------------------------------------------------------------------------------------------
              *
              مجله الکترونیک ریسک و بیمه [/align]

              Comment

              • mrexcel

                • February 2010
                • 435

                #8
                RE: ایجاد نمودار ها و چارت ها در VBA

                اين كار با تركيب vlookup انجام ميشه چون اين چيزي كه شما ميگيد فراخواني اطلاعاتي بر اساس يك ايتم ميباشد كه اختصاص كار توابع lookup هست
                زنگ تفريح دنيا هميشگي نيست ، ساعت بعد حساب داريم

                Comment

                • m_d6712

                  • May 2010
                  • 174

                  #9
                  RE: ایجاد نمودار ها و چارت ها در VBA

                  نوشته اصلی توسط esyoo
                  پیرو پست های 4و5و6و7 در این تاپیک
                  آیا می توان نمودار را روی یوزر فورم نمایش داد؟
                  با درود فراوان
                  بله همانطور که یک تکس باکس و یا یک لیبل رو رو یوزفرم قرار می دهی یک چارت هم میتوان به فرم اضافه کرد
                  اگر روی تولز باکس چارت نداری با راست کلیک روی یکی از آبجکت ها به منوی additional controls رفته و آن را تیک بزنید

                  با کلیک بر روی additional controls مراحل زیر را باید طی کنید.

                  [][تصویر: tjahmbebdw18a570lykj_thumb.jpg][/]


                  مرحله دوم

                  [i][تصویر: hok3mj9fdn7zeaffb7xj_thumb.jpg][/]

                  یادت باشه جایی که با فلاش قرمز مشخص کردم نباید تیک خورده باشه تا آبجکهای تیک نخورده رو بتونی ببینی
                  گفتم ادامه بحث رو بیارم اینجا تا در تاپیک خودش قرار بگیره
                  من این گزینه ها رو فعال کردم(نصب دوباره ویندوز و اکسل!)
                  ولی به جای ارتباط با شیت های خود اکسل از شیت های که خودش در اختیار ما قرار میده استفاده می کند!
                  در واقع من میخوام اطلاعات رو از شیت 1 بگیره و نمودار رو روی یک userformنمایش بده
                  با تشکر



                  همان طورکه دوست عزیز توضیح دادند یک Chartspase ایجاد کنید. (از گزینه Additional Controls آن را به لیست ابزار خود اضافه کنید و با کشیدن بر روی صفحه ایجاد کنید)

                  پس از این که این ChartSpace را ایجاد کردید هیج Sheet یا اطلاعاتی برایش در نظر نگیرید و مستقیما به صفحه Code بروید.
                  اگر اسم این شی را تغییر نداده باشید احتمالا ChartSpace1 خواهد بود. کد هایی که در زیر می نویسم بر اساس این اسم است. در صورتی که اسم آن را تغییر دادید در کد زیر نام انتخابی خود را با ChartSpace1 تعویض کنید.

                  کد زیر اطلاعات ستون های A و B از Sheet1 فایل اکسل شما را به صورت چارت ScatterXYLine نمایش می دهد.

                  کد:
                  Private Sub UserForm_Activate()
                      Dim mychart As OWC11.ChChart
                      Dim mysheet As OWC11.Spreadsheet
                      Dim ws As Worksheet
                      
                      Set mychart = ChartSpace1.Charts.Add
                      Set mysheet = New OWC11.Spreadsheet
                      Set ws = ActiveWorkbook.Sheets("Sheet1")
                      
                      mysheet.Range("A:B") = ws.Range("A:B").Value
                      ChartSpace1.DataSource = mysheet
                      
                      With mychart
                          .Type = chChartTypeScatterLine
                          .SetData chDimXValues, 0, "A:A"
                          .SetData chDimYValues, 0, "B:B"
                          .HasTitle = True
                          .Title.Caption = "test title by ...."
                          .BarWidth = 3
                      End With
                      
                  End Sub

                  فایل زیر هم برای درک بهتر:
                  http://www.mediafire.com/file/5gkjnmnbl6fo84l/11.xlsm[hr][hr]

                  -----------------------------------------------------------------------------------------------
                  -----------------------------------------------------------------------------------------------

                  هر چه سعی کردم که این دو پاسخ با هم نیاد نشد!
                  از این به بعد پاسخ برای سوال دیگری است!

                  -----------------------------------------------------------------------------------------------
                  -----------------------------------------------------------------------------------------------


                  نوشته اصلی توسط behrangbinesh
                  سلام
                  با تشکر از شما دوست عزیز
                  منظورم رو شاید بد گفته باشم
                  مثلا اطلاعات ما همیشه تو a3:c3 نباشه
                  یک بار تو a3:c3 باشه یک بار توی a5:c5 هستش
                  اولی تو شیت 1 و دومی تو شیت 2
                  من میخوام مثلا سه تا فروشنده دارم
                  که اطلاعاتشون تو سه تا شیت مختلفه
                  حالا میخوام که تو یه شیت اطلاعاتی، با انتخاب اسم افراد، نمودارشون رو نمایش بدیم
                  امکانش هست یا نیست؟
                  با تشکر از شما
                  بله امکانش هست!
                  به این صورت عمل کنید:
                  ابتدا سه شیت اول دوم و سوم را ایجاد کرده
                  در شیت چهارم یک چارت ایجاد کنید ولی هیچ مقدار دهی برایش انجام ندهید.
                  کد زیر در شیت چهارم فعال کنید.

                  کد:
                  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
                  If (Selection.Cells(1) = Sheet4.Range("D3").Cells(1) Or Selection.Cells(1) = Sheet4.Range("H3").Cells(1) Or Selection.Cells(1) = Sheet4.Range("L3").Cells(1)) Then
                      Dim mychart As ChartObject
                      Dim sourcesheet As Worksheet
                  
                      If (Selection.Cells(1) = Sheet4.Range("D3").Cells(1)) Then
                          Set sourcesheet = Sheet1
                      ElseIf (Selection.Cells(1) = Sheet4.Range("H3").Cells(1)) Then
                          Set sourcesheet = Sheet2
                      ElseIf (Selection.Cells(1) = Sheet4.Range("L3").Cells(1)) Then
                          Set sourcesheet = Sheet3
                      End If
                  
                      Set mychart = Sheet4.ChartObjects(1)
                  
                      With mychart.Chart
                          .ChartType = xlXYScatterLinesNoMarkers
                          .SetSourceData Source:=sourcesheet.Range("A:A,B:B"), PlotBy:=xlColumns
                          .Axes(xlValue, xlPrimary).MinimumScale = 0
                          .Axes(xlCategory, xlPrimary).HasTitle = True
                          .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Target.Text
                      End With
                  End If
                  End Sub

                  فایل آن هم را از این لینک دریافت کنید:
                  http://www.mediafire.com/file/y5954db0xel26oo/ChartForResellers.xlsm
                  -------
                  http://md6712.com
                  جامعه ایده پردازان: http://idekadeh.com

                  Comment

                  • esyoo

                    • March 2010
                    • 151

                    #10
                    RE: ایجاد نمودار ها و چارت ها در VBA

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

                    شما نموداری که گذاشتید به این شکل در می یاد.


                    ولی من می خوام که این شکلی بشه.



                    فایل نمونه رو ببینید
                    http://www.4shared.com/file/hoZN3LRy/chart.html



                    با تشکر



                    من خیلی تلاش کردم تا نوع نمودار رو تغییر بدم
                    اما نشد

                    Comment

                    • esyoo

                      • March 2010
                      • 151

                      #11
                      RE: ایجاد نمودار ها و چارت ها در VBA

                      أوستان چکار کنم این پیغام نیاد؟
                      همه روenable کردم ولی باز هم پیغام میده.

                      Comment

                      • m_d6712

                        • May 2010
                        • 174

                        #12
                        RE: ایجاد نمودار ها و چارت ها در VBA

                        با سلام:



                        Private Sub UserForm_Activate()
                        Dim mychart As OWC11.ChChart
                        Dim mysheet As OWC11.Spreadsheet
                        Dim ws As Worksheet

                        Set mychart = ChartSpace1.Charts.Add
                        Set mysheet = New OWC11.Spreadsheet
                        Set ws = ActiveWorkbook.Sheets("Sheet1")

                        mysheet.Range("A2:B9") = ws.Range("A2:B9").Value
                        ChartSpace1.DataSource = mysheet

                        With mychart
                        .Type = chChartTypeColumnClustered

                        .SetData chDimCategories, 0, "A2:A9"
                        .SetData chDimValues, 0, "B2:B9"
                        .HasTitle = True
                        .Title.Caption = "ãÕÑÝ"
                        End With
                        End Sub
                        -------
                        http://md6712.com
                        جامعه ایده پردازان: http://idekadeh.com

                        Comment

                        Working...