فراخوان ماکروی اکسل از درون پاورپوینت
اگر با برنامه پاورپوینت کار کردهباشید و برای مدیریت ارشد گزارش تهیه نموده باشید، حتما با واژگانی چون تاپتِن(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 فایل اکسل اجرا مینماید.
فایلهای مطلب





