دادن Axis Lable و Legend Entries به جای Data Range

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

    • 2012/07/04
    • 42

    دادن Axis Lable و Legend Entries به جای Data Range

    من این متد رو ساخته م و می خوام Axis Lable و Legend Entries رو به جای data Range بهش بدم.
    با همین روش که عمل کرده م چطور میشه این کار رو کرد.

    کد:
    Public Sub MakeChartLine(ByVal TableName As String)
    'مقادير براي ساختن نمودار
    '----------------------
        Dim FrameToDirection, FrameToTop, FrameWidth, FrameHeight As Integer
    'فاصله از دايرکشن
        FrameToDirection = Range("ChartOptions[" & TableName & "]").Cells(3, 1)
    'فاصله از بالا
        FrameToTop = Range("ChartOptions[" & TableName & "]").Cells(4, 1)
    'عرض
        FrameWidth = Range("ChartOptions[" & TableName & "]").Cells(5, 1)
    'ارتفاع
        FrameHeight = Range("ChartOptions[" & TableName & "]").Cells(6, 1)
    'ساختن چارت با تعيين مکان و اندازه
        Dim MyChart As ChartObject
        Set MyChart = ActiveSheet.ChartObjects.Add _
            (FrameToDirection, FrameToTop, FrameWidth, FrameHeight)
    
    
    'مقادير براي نوع و رنج داده و عنوان
    '----------------------
    'نوع نمودار
        Dim TypeChart As Integer
        TypeChart = Range("ChartOptions[" & TableName & "]").Cells(1, 1)
    'عنوان نمودار
        Dim TitleChart As String
        TitleChart = Range("ChartOptions[" & TableName & "]").Cells(7, 1)
    
    
    'ساختن نشاني رنج منبع
        Dim FirsPart As String
        FirsPart = ActiveSheet.ListObjects(TableName).ListColumns(1).DataBodyRange.Cells(1, 1).Address
        Dim LastRow As String
        LastRow = ActiveSheet.ListObjects(TableName).ListColumns(2).DataBodyRange.Count
        Dim SecoundPart As String
        SecoundPart = ActiveSheet.ListObjects(TableName).ListColumns(2).DataBodyRange.Cells(LastRow, 1).Address
    'رنج منبع
        Dim SourceChart As String
        SourceChart = FirsPart & ":" & SecoundPart
        
    'تعيين نوع نمودار و رنج داده و عنوان
        MyChart.Chart.ChartWizard Source:=ActiveSheet.Range(SourceChart), _
         Gallery:=TypeChart, Title:=TitleChart
    
    
    'تعيين استايل چارت
        MyChart.Chart.ChartStyle = Range("ChartOptions[" & TableName & "]").Cells(2, 1)
    
    
    'بستن فهرست چارت از سمت دايرکشن
        MyChart.Chart.SetElement (msoElementLegendNone)
    
    
    'پاک کردن خط دوم
        MyChart.Chart.SeriesCollection(1).Delete
    
    
    'تعيين فونت براي همه چارت
        With MyChart.Chart.ChartArea.Format.TextFrame2.TextRange.Font
            .NameComplexScript = "B Mitra"
            .NameFarEast = "B Mitra"
            .Name = "B Mitra"
            .Size = Range("ChartOptions[" & TableName & "]").Cells(9, 1)
        End With
    
    
        MyChart.Chart.Axes(xlCategory).HasTitle = True
        MyChart.Chart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "سال"
    
    
    'قابليت پرينت پيشفرض
        If Range("ChartOptions[" & TableName & "]").Cells(11, 1) = 1 Then
            Dim OldPrintAreaAddress As String
            OldPrintAreaAddress = ActiveSheet.PageSetup.PrintArea
            Dim ColNo As Integer
            ColNo = Range(TableName).Columns.Count
            Dim NewPrintAreaAddress As String
            NewPrintAreaAddress = ActiveSheet.ListObjects(TableName).HeaderRowRange(ColNo).Offset(0, 1).Address _
            & ":" & ActiveSheet.ListObjects(TableName).TotalsRowRange(1).Offset(36, 27).Address
                ActiveSheet.PageSetup.PrintArea = OldPrintAreaAddress & "," & NewPrintAreaAddress
        End If
    End Sub
    Last edited by eppagh; 2015/01/18, 11:39.
  • امين اسماعيلي
    مدير تالار ويژوال بيسيك

    • 2013/01/17
    • 1198
    • 84.00

    #2
    با درود
    کد هاتونو تو Tag کد بزارین تا برسی بشه
    در پناه خداوندگار ایران زمین باشید و پیروز

    کامنت

    • eppagh

      • 2012/07/04
      • 42

      #3
      دکمه تگ کد صفحه تک اولو نمیذاره با دست درست کردم.

      کامنت

      • امين اسماعيلي
        مدير تالار ويژوال بيسيك

        • 2013/01/17
        • 1198
        • 84.00

        #4
        با درود
        با دو خط کد زیر محور x و Y رو به رنج میتونی Axis Lable اشون رو اختصاص بدی تو کد های خودتم سال فک کنم بود که براحتی میتونی تغییرش بدی
        کد:
        Worksheets("sheet1").ChartObjects(1).Activate
        
               'X axis title
        ActiveChart.Axes(xlCategory, xlPrimary).HasTitle = True
        ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Sheet1.Range("D2").Value
         'y-axis title
        ActiveChart.Axes(xlValue, xlPrimary).HasTitle = True
        ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Sheet1.Range("D1").Value
        در پناه خداوندگار ایران زمین باشید و پیروز

        کامنت

        • eppagh

          • 2012/07/04
          • 42

          #5
          این همون چیزیه که ماکرو انجام میده. مشکل اینه که این متد خودکار اجرا میشه و من نمی دونم چه اسمی روی چارت میذاره. باید یه طوری این کار رو بکنم که برای سلکت یا اکتیو کردن چارت به نامش نیاز نداشته باشم. برای همین جستجو کردم و این روش زیر رو پیدا کردم
          کد PHP:
              Dim MyChart As ChartObject    Set MyChart ActiveSheet.ChartObjects.Add _        (FrameToDirectionFrameToTopFrameWidthFrameHeight
          بعد با کد زیر میشه تغییر داد مثلا اینطوری:
          کد PHP:
          MyChart.Chart.ChartWizard Source:=ActiveSheet.Range(SourceChart), _     Gallery:=TypeChartTitle:=TitleChart 
          اما نتونستم با این روش سلکت کنم یا اکتیو کنم یا اگر شد نتونستم او دو رنج دیتا رو بهش بدم.

          کامنت

          چند لحظه..