دستوراتی برای تغییر استایل یک نمودار در پاورپوینت

کسانی که با پاورپوینت کارمی‌کنند می‌دانند، هرچه تعداد اسلایدها و نمودارها در فایلی که ایجاد کرده‌اند بیشترباشد، پاورپوینت‌ مفیدتر(اینجا ایران است) خواهدبود، گاهی تعداد اسلایدها به حدی میرسد که تنها ورق زدن آن‌ها از زمان جلسه فراتر می‌رود. گاهی در هر اسلاید بیش از یک نمودار قرار دارد، حال در این‌همه اسلاید و در هر اسلاید بیش از یک نمودار، ناگهان مدیریت تصمیم می‌گیرد تمامی فونت‌های نمودارها از مثلا فونت آریال به فونت تاهوما تغییر کند و یا مثلا برای تمامی نمودارهای میله‌ای رنگ هر میله با دیگری متفاوت باشد و یا در نمودار پاراتو آیتم‌ها با 50 درصد تاثیر با رنگی متفاوت از بقیه باشد و ... از این دست تغییرات. شمایید و صدها نمودار که باید این تغییرات را درآن‌ها اعمال نمایید، حال در این میان اگر کاملا اتفاقی خطای انسانی مرتکب شوید و یکی از نمودارها فونتش تغییر نکرده‌باشد، تمامی آن پاورپوینت به هیچ نمی‌ارزد. تغییر دادن این همه نمودار سخت است و سخت‌تر از آن ایجاد مجدد فایل با فرمت خواسته‌شده‌است.پس باید راه حلی یافت تا از این‌همه سختی رهایی یافت، راه حل در بکارگیری برنامه‌نویسی در پاورپوینت است، نمونه چنین‌ کاری را در ترفندهایی برای کار با پاورپوینت دیده‌اید. مقاله جاری در ادامه آن می‌باشد.


مثلا فرض کنید می‌خواهید یک نمودار میله‌ای مانند زیر درست کنید(در نمودار فوق هر میله دارای رنگی جدا می‌باشد)

یا مثلا در یک فروشگاه می‌خواهید در نمودار هزینه‌ها، آیتم‌هایی که مجموع هزینه آنها 50درصد از کل هزینه‌ها می‌شود را نشان دهید مانند زیر:

و از این دست نمودارها، فرض کنید یک نمودار میله‌ای داریم و اطلاعات نمودار در متغیر(در برنامه نویسی VBA) SetChart قراردارد، نخست باید گفت، در یک نمودار میله‌ای تفاوت میان سری و کتگوری چیست، به شکل نمودار زیر توجه کنید:

داده‌های این نمودار در فایل اکسل به صورت زیر است:

در زیر تعاریف اولیه لازم گفته می‌شود:

  • به هر ردیف یک کتگوری(Category) گفته می‌شود، یعنی کیف و کلاسور یک کتگوری هست که دو مقدار برای آن وجود دارد یکی 76 دیگری 82(آذر و آبان) و میز و صندلی هم کتگوری دیگری هست و ...
  • هر ستون یک سری(Series) گفته می‌شود، ستون مربوط به آذر سری نخست(یکم) است و ستون آبان سری دوم.

با فرض اینکه نام نمودار SetChart باشد، داریم:

شرحمقدارهانام متغیر
مشخص میکند آیا چارت ما دارای تایتل است یا نه(می‌توان مقدار آن را تغییر داد)true,falseSetChart.HasTitle
تایتل قابل نمایش در چارتهر مقداری به عنوان تایتلSetChart.ChartTitle.Text
فاصله تایتل از سمت چپ نمودارعددSetChart.ChartTitle.Left
رنگ فونت تایتل را مشخص می‌کند. برای این می‌توان از ایندکس رنگ یا RGB استفاده نمودمقدار رنگ SetChart.ChartTitle.format.TextFrame2.TextRange.Font.Fill.ForeColor
رنگ زمینه تایتل را مشخص می‌کند. برای این می‌توان از ایندکس رنگ یا RGB استفاده نمودمقدار رنگSetChart.ChartTitle.format.TextFrame2.TextRange.Font.Fill.BackColor
با این متغیر می‌توان مقدار نام فونت، سایز، استایل و ... را برای تایتل مشخص نمود.مقدار فونتSetChart.ChartTitle.format.TextFrame2.TextRange.Font
با این متغیر به آرایه ای از نام کتگوری ها دستری پیدا می‌کنیم، برای مثال بالا در آرایه مان به ترتیب: کیف و کلاسور، خودکار،مداد و ماژیک و ... قرار می‌گیرد. توجه xlCategory یک متغیر درونی VBA می‌باشد.آرایه نام کتگوری‌هاSetChart.Axes(xlCategory).CategoryNames
دسترسی به مجموعه تمام سری‌ها را در اختیار برنامه‌نویس می‌گذارد.مجموعه سری‌هاSetChart.SeriesCollection
به سری شماره iSeries دسترسی پیدا می‌کنید.(مقدار iSeries عددی است و از یک شروع می‌شود)اطلاعات یک سریSetChart.SeriesCollection(iSeries)
مشخص می‌کند که سری شماره iSeries دارای داده برای نمایش هست یا نه.true,falsexSeries(iSeries).HasDataLabels
تمامی اطلاعات دیتالیبل سری شماره iSeries را (از فونت، سایز، رنگ، مکان قرارگیری و ... ) در خود داردیک مجموعه دیتا لیبلSetChart.SeriesCollection(iSeries).DataLabels
اطلاعات سری از جمله رنگ(حتی طیف رنگ یا گرادیانت)، رنگ‌آمیزی الگو، تکسچر و ...اطلاعات فرمتSetChart.SeriesCollection(iSeries).Format.Fill

شاید سخن گفتن در باره این کدها چندان برای شما مفید نباشد لذا یک فایل پاورپوینت جدید ایجاد نمایید در اسلاید نخست تمامی اشیای موجود را حذف و یک نمودار میله‌ای ایجاد کرده و اطلاعات زیر را درآن وارد نمایید سپس یک ماجول در آن ایجاد نمایید و با پسوند pptm آن را ذخیره کنید.

هزینه هاآبانآذر
آب و برق10001200
تلفن و موبایل23002000
گاز7501250
اجاره1025011300

نخست کار با تایتل نمودار: کد زیر را در ماجول وارد و اجرا نمایید:

Sub ChartTitleSet()
    Dim xSlide As Slide: Set xSlide = Application.ActiveWindow.View.Slide
    Dim xShape As Shape
    Set xShape = xSlide.Shapes(1)
    If xShape.HasChart Then
        Dim xChart As Chart
        Set xChart = xShape.Chart
        xChart.ChartTitle.Text = "My Chart Text"
        xChart.ChartTitle.Format.Fill.ForeColor.RGB = RGB(128, 128, 128)
        xChart.ChartTitle.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
        xChart.ChartTitle.Format.TextFrame2.TextRange.Font.Name = "Tahoma"
        xChart.ChartTitle.Format.TextFrame2.TextRange.Font.NameComplexScript = "Tahoma"
        xChart.ChartTitle.Format.TextFrame2.TextRange.Font.NameFarEast = "Tahoma"
        xChart.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 20
        xChart.ChartTitle.Left = (xChart.ChartArea.Width - xChart.ChartTitle.Width) / 2
    End If
End Sub

کار کلی برنامه بالا این است که از اسلاید فعال(جاری) شکل شماره یک را بردارد و اگر از نوع چارت Chart بود تایتل آن را تنظیم نماید، دربرنامه بالا:

  • خط 2 برای تعریف متغیر اسلاید و نسبت دادن آن به اسلاید فعال می‌باشد
  • خط‌های 3 و 4 برای مشخص کردن شی نخست در اسلاید فعال(توجه شود در پاورپوینت تمامی نمودارها، عکس‌ها و ... از نوع شیپ(Shape) می‌باشند) است.(توجه کنید در بالا گفتیم تمامی اشیا را حذف و فقط یک نمودار میله‌ای ایجاد کنید لذا شی شماره یک همان نمودار ما می‌باشد)
  • خط 5 تعیین می‌کند آیا این شیپ(Shape) از نوع نمودار هست یا نه و در صورت نمودار بودن(True) به درون شرط If می‌رود.
  • خط‌های 6و7 برای انتخاب نمودار است.
  • خط 8 متن تایتل را مشخص می‌کند.
  • خط 9 رنگ زمینه تایتل(در اینجا رنگ خاکستری)را تعیین می‌‍کند.
  • خط 10 رنگ نوشته تایتل(در اینجا رنگ قرمز) را مشخص می‌کند.
  • خطهای 11و12و13 فونت نوشته(در اینجا تاهوما) مشخص می‌کند.
  • خط 14 اندازه فونت(اینجا 20) را مشخص می‌کند.
  • و خط 15 محل قرار گیری تایتل(در اینجا تنظیم در وسط شده) را تعیین می‌کند.

کار با سری در یک نمودار: کد زیر را در ماجول وارد نمایید و اجراکنید(کار برنامه آن است که سری شماره یک یا همان آذر ماه را با طیف رنگی سبز و قرمز با بوردر رنگ سیاه تغییر دهد و در هر میله عدد آن را بصورت عمودی نمایش دهد):

Sub SetChartSeries()
    Dim xSlide As Slide: Set xSlide = Application.ActiveWindow.View.Slide
    Dim xShape As Shape: Set xShape = xSlide.Shapes(1)
    If xShape.HasChart Then
        Dim xChart As Chart: Set xChart = xShape.Chart
        Dim xSeries As Series: Set xSeries = xChart.SeriesCollection(1)
        With xSeries
            .HasDataLabels = True
            .DataLabels.Orientation = xlUpward
            .DataLabels.NumberFormat = "0.0"
            .DataLabels.Position = xlLabelPositionCenter
            .Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
            .Format.Fill.BackColor.RGB = RGB(0, 255, 0)
            .Format.Fill.TwoColorGradient msoGradientFromCenter, 3
            .Format.Line.ForeColor.RGB = RGB(0, 0, 0)
            .Format.Line.Visible = msoTrue
            .Format.Line.Transparency = 0
            .Format.Line.Weight = 3
            .Format.Line.DashStyle = msoLineSolid
        End With
    End If
End Sub
  • خط‌های 2تا5: مشابه قطعه کد بالا می‌باشد.
  • خط 6: از چارت‌مان سری شماره یک یا همان آبان را انتخاب می‌کند(اگر بخواهید نمودار مربوط به آذر ماه را رنگ‌آمیزی کنید کافی است در این خط بجای عدد 1 عدد 2 بگذارید)، محدوده میان خط 7 تا 20 می‌گوید هر متغیری که با نقطه آغاز شود یکی از خواص(Properies) متغیر xSeries می‌باشد.
  • خط 8: دیتا لیبل را فعال می‌کند.
  • خط9: دیتالیبل را بصورت عمودی و از پایین به بالا نمایش می‌دهد.
  • خط10: فرمت عدد را با یک رقم اعشار نمایش می‌دهد.
  • خط11: محل دیتالیبل را نمایش می‌دهد.
  • خط12و13: چون می‌خواهیم رنگ‌آمیزی بصورت شیب‌دار(Gradient) باشد، لذا این دو را با مقدار‌های قرمز و سبز تنظیم کردیم.
  • خط14: رنگ‌آمیزی شیب‌دار را فعال می‌کند(توجه‌کنید آن عدد 3 میتواند مقدارهای 1و2و3و... بگیرد خودتان با مقدار‌های متفاوت برنامه را اجرا کنید و تاثیرآن را مشاهده‌کنید).
  • خط‌های 15تا19: رنگ خط دور هر سری نمودار میله‌ای، نمایش یا عدم‌نمایش آن، اندازه ضخامت خط و خط‌چین و غیرخط‌چین بودن آن را مشخص‌می‌کند.

توجه:اگر با یک‌بار اجرا رنگ‌آمیزی درست انجام نشد دوباره برنامه را اجرا کنید.

نمودار میله‌ای با طیف رنگ: فرض‌کنید اگر بخواهیم در یک نمودار میله‌ای که سود فروش محصولات را نشان می‌دهد، رنگ هر میله با توجه به میزان سود، رنگی میان طیف رنگی سبزقرمز باشد، چگونه این کار را باید انجام‌دهیم(یعنی  محصول با بیشترین سود فروش را با رنگ سبز و محصول با کمترین سود فروش را با رنگ قرمز و بقیه را به صورت طیفی از رنگ سبز به سمت رنگ قرمز رنگ‌آمیزی کنیم) به شکل زیر توجه کنید:

برای دیدن نحوه انجام چنین کاری فایل پاورپوینت پیوست را دانلود کرده و تابع SingleBarColoring و CreateGradiantColor را مورد بررسی قراردهید.

توجه: بدلایل امنیتی میزبان سایت، نخست فایل را دانلود کنید و از حالت فشرده خارج کنید، فایلی با پسووند RA مشاهده می‌کنید، فایل را به پسوند RAR تغییر دهید و دوباره از حالت فشرده خارج نمایید.


فایلهای مطلب

کپی
لینک اشتراک گذاری

  • 593
  • 0