فراخوان ماکروی اکسل از درون پاورپوینت

اگر با برنامه پاورپوینت کار کرده‌باشید و برای مدیریت ارشد گزارش تهیه نموده باشید، حتما با واژگانی چون تاپ‌تِن(Top10) و یا نمودار پاراتو(Parato) و ... برخورد داشته‌اید، در حالت معمولی بدون استفاده از ساخت اتوماتیک گزارش(در ادامه مقاله هرکجا از گزارش نام برده‌شد منظور همان پرزنتیشن پاورپوینت می‌باشد) که در مقاله‌های سه‌گانه (1 و 2 و 3) توضیح‌داده شد برای تهیه نمودار تاپ‌تِن در اکسل اطلاعات مورد نیاز را از بیشترین به کمترین مرتب نموده و 10 اطلاعات نخست را برداشته به نمودار می‌افزاییم، اما اگر بخواهیم همین کار را به صورت خودکار انجام‌دهیم چگونه می‌توان این‌کار را انجام‌داد؟ حتی اگر فرض‌کنیم شما این توان را دارید که توسط یک ماکرو(VBA Macro) درون اکسل، عملیات مرتب سازی را انجام دهید، باز مشکلی حل نمی‌شود زیرا نیاز است این ماکرو توسط پاورپوینت اجراگردد. در ادامه خواهید دید با دو روش متفاوت این کار انجام خواهد شد یکی انجام مرتب‌سازی از طریق فرمول‌های اکسل و دیگری بکارگیری فیلتر اکسل!!!، خواهید دید چگونه می‌توان به ستون‌های یک شیت اکسل فیلتر افزود و از طریق آن، اقدام به مرتب‌سازی اطلاعات براساس نتایج دلخواه نمود و سپس ماکروهای درون اکسل را از درون پاورپوینت اجرا کرد.


بکارگیری توابع درونی اکسل

به داده های زیر توجه کنید(داده‌ها درون فایل اکسل پیوست قراردارند):

مقدارهای زیر را درون سلول‌های گفته شده قرار دهید:
C1: Row#
D1: Helper
E1: HelperSorted
F1: CUSTOMERNAME-SORTED
G1: SALES-SORTED

C2: =IF(ISBLANK(A2),"", ROW()-1)
D2: =IF(ISBLANK(A2),"", B2*1000+C2)
E2: =IFERROR(LARGE($D$2:$D$100,ROW()-1),"")
F2: =IFERROR(INDEX(A:C,MATCH(ROUND((E2/1000-INT(E2/1000))*1000,0),ROUND($C:$C,0),0),1),"")
G2: =IFERROR(INT(E2/1000),"")

حال سلول‌های C2 تا G2 را گرفته و تا ردیف دلخواه(اینجا ردیف 100، علت آن این است که فرض کردیم تعداد اطلاعات کمتر از 100 ردیف می‌باشد، بنابراین بنابه اطلاعات شما می‌تواند این عدد کمتر یا بیشتر از 100 باشد ولی بهتر است مضربی از 10 باشد یعنی 100، 1000، 10000 و ...).

اصل کار را دو ستون C2 و D2 انجام‌می‌دهند، ستون C2 یک شماره ردیف به هر یک از ردیف‌های اطلاعات می‌دهد، و ستون D2 با ترکیب مبلغ و شماره ردیف یک ستون کمکی برای مرتب‌سازی اطلاعات آماده می‌کند.

از آنجایی که حداکثر تعداد ردیف برای اطلاعات 100(حداکثر 3 رقم) در نظر گرفته‌شده لذا در این‌جا از عدد 1000 برای ترکیب این دو در استفاده شده‌است.

حال اگر هر اطلاعاتی را در دو ستون A و B قراردهیم، دو ستون F و G مرتبط‌شده آن را نشان می‌دهد. حال می‌توانید از اتوماسیون کردن گزارش پاورپوینت (1 و 2 و 3) استفاده‌نمایید، شاید لازم باشد کمی در خصوص فرمول‌های استفاده شده توضیح دهیم.

  • فرمول C2: یک شماره ردیف به هر خط داده داده‌می‌شود.
  • فرمول D2: برای هر ردیف مبلغ را در 1000 ضرب کرده و با شماره ردیف جمع می‌کند( مثلا وقتی در شماره ردیف 36 مبلغ 5501 می‌باشد و ترکیب این دو می‌شود 5501036.
  • فرمول E2: از آنجایی که در سلول E2 در ردیف 2 قرار دارد لذا ROW()-1=2-1=1 می‌شود پس دستور LARGE اولین عدد بزرگ را می‌دهد و برای سلول E3 داریم ROW()-1=3-1=1 پس دستور LARGE دومین عدد بزرگ را می‌دهد و ...
  • فرمول F2: با تقسیم عدد درون سلول E2 بر 1000 و محاسبه مورد نیاز شماره ردیف بدست می‌آید و با جستجوی آن در ستون C و با استفاده از دستور INDEX نام مشتری حاصل‌می‌گردد.
  • فرمول G2: با انجام محاسبه مقدار خرید مشتری را بدست‌می‌آورد.

بکارگیری ماکروها

بطور معمول اگر بخواهید داده‌ها مرتب نمایید بهترین راه استفاده از گزینه فیلتر می‌باشد.

اما همین کار را می‌توان توسط ماکروها نیز انجام داد. یک شیت جدید با نام Sheet2 باز کرده و داده‌های بالا را درون آن کپی کنید(در سلول A1) دو دکمه ALT+F11 را زده و از سمت چپ(Project) گزینه Sheet2 را انتخاب کنید:

(اگر این پنجره را نداشتید دکمه‌های CTRL+R را بزنید تا پنجره باز شود).

کد زیر را در سمت راست وارد نمایید و سپس آن را اجرا نمایید.

Sub AddFilterAndSort()
    Dim ws As Worksheet
    Dim rng As Range

    Set ws = ThisWorkbook.Worksheets("Sheet2")

    Set rng = ws.Range("A1").CurrentRegion

    ws.AutoFilterMode = False
    rng.AutoFilter

    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=rng.Columns(2), SortOn:=xlSortOnValues, Order:=xlDescending
        .SetRange rng
        .Header = xlYes
        .Apply
    End With

End Sub
  • خط 7: رنجی را که می‌خواهیم عمل مرتب‌کردن(و یا  فیلترکردن) انجام‌دهیم را مشخص می‌کند.
  • خط 9و10: اگر فیلتری وجود داشت آن را حذف و تنظیم آن را دستی می‌کند.
  • خط 13: اگر قبلا مرتب‌سازی انجام شده باشد، آن را غیرفعال می‌نماید.
  • خط 14: ستون دوم را (rng.Columns(2)) بعنوان کلید مرتب‌سازی در نظر می‌گیرد و با دستور SortOn می‌خواهد براساس مقدارها مرتب‌سازی نماید و نحوه مرتب‌سازی Order از بزرگ به کوچک می‌باشد.
  • خط 15: محدوده مرتب‌سازی را مشخص می‌نماید.
  • خط 16: از آنجایی که ستون‌های ما دارای هدر(Header) هستند لذا بدون در نظر گرفتن سلول نخست هر ستون، آنها را مرتب می‌نماید.
  • خط 17: مرتب‌سازی را روی محدوده اعلام شده اعمال می‌نماید.

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

یک فایل پاورپوینت با پسوند pptm ایجادکنید دکمه‌های ALT+F11 را بزنید و یک Module جدید ایجاد کنید.

از بخش References گزینه Microsoft Excel Object Library را انتخاب کنید(بسته به ورژن آفیس شما ممکن است ورژن آن متفاوت باشد).

حال کد زیر را وارد نمایید:
Sub RunExcelMacro()
    Dim xWorkBook As Workbook
    xlsDir = ActivePresentation.Path
    xData = "Orders.xlsm"
    xExcelFileName = xlsDir & "\" & xData
    Set xWorkBook = GetObject(xExcelFileName)
    xWorkBook.Application.Run "" & xData & "!Sheet2.AddFilterAndSort"
End Sub

فایل را در همان محل ذخیره فایل اکسل ذخیره‌کنید، در زمان باز بودن فایل اکسی ماکروی فوق را اجرا نمایید و حاصل مرتب‌سازی را درون فایل اکسل ببینید. اما این کد چه کار می‌کند:

  • خط 6: یک ارتباط میان فایل اکسل و پاورپوینت ایجاد می‌نماید.
  • خط 7: ماکروی AddFilterAndSort را از Sheet2 فایل اکسل اجرا می‌نماید.

فایلهای مطلب

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

  • 266
  • 0