تولید پرزنتیشن پاورپوینت بصورت خودکار(بخش دوم)
در مطلب پرزنتیشن پاورپوینت بصورت خودکار(بخش یکم) از یک فایل اکسل که دادههای خام را شامل میشد، اقدام به استخراج دادههای مورد نیاز کردیم(البته قابل ذکر است این روند فعلا ادامه خواهد داشت زیرا پرزنتیشنی که مورد نیاز است بیش از اینها اسلایدهای گوناگون نیاز دارد) سپس با ساخت یک فایل پاورپوینت بهعنوان یک فایل تمپلیت(Template) نمودارهای اولیه مورد نیازمان را تهیهکردیم(نمودارهای ساختهشده تنها بخشی از کار میباشد و بقیه نمودارها به مرور تهیه و مقالهای درباره آنها ایجاد خواهدشد)، در ادامه به نحوه اتصال به بانک اطلاعاتیمان(همان فایل اکسل) و چندتابع مورد نیاز دیگر را شرح میدهیم.
♦برای اینکه بتوان پرزنتیشن بصورت اتوماتیک و خودکار تهیهکرد باید مراحل زیر انجامگردد:
- اتصال به دادههای درون اکسل فایل
- ایجاد یک حلقه برای خواندن دادهها و تهیه اسلایدها
- انتتقال دادهها براساس فیلترها(مانند کد کالا، مشتری، کشور و ...) به نمودارهای داخل پاورپوینت، برای این منظور نیاز به انجام کارهای زیر است:
- ایج اد یک اسلاید جدید از روی اسلایدهای تمپلیت(Template) و انتقال آن به انتهای پاورپوینت به عنوان اسلایدی که باید تهیه گردد.
- فیلتر کردن دادههای اکسل فایل اصلی
- انتخاب تک تک نمودارها و باز کردن Edit Data درون حافظه
- انتقال اطلاعات از اکسل فایل اصلی به اکسل شیت نمودار فوق
- بازگشت به مرحل سوم تا انتهای اطلاعات
- پایان کار و بستن اطلاعات اکسل فایل اصلی
♦ مقدمات کار: هر دو فایل اکسل و پاورپوینت را که در این مقاله ساختهشده در یک فولدر ذخیرهکنید، سپس هر دوی آنها را بازکنید، توجه داشته باشید فایل پاورپوینت شما باید قابلیت ماکروی آن Enable شده باشد برای این منظور به در فایل پاورپوینت به قسمت File > Options > Trust Center > Trust Center Settings > Macro Settings بروید و گزینه Enable all macro (not recommended; potentially dangerous code can run) را در صورت فعال نبودن فعال نمایید( هفتک یا همان تیک بزنید) و Ok نمایید.
در پاورپوینت دکمهALT را گرفته و F11 را بزنید(در واقع وارد محیط برنامهنویسی شوید، میتوانید از تب Developer گزینه Visual Basic را بزنید).
صفحه بازشده روی گزینه VBAProject راستکلیک کرده و از گزینه Insert گزینه Module را انتخاب کنید(مطابق شکل)
از این به بعد برنامهنویسی آغاز میگردد، لذا برای جلوگیری از خطا باید با دقت بیشتری مراحل را دنبال کنید. در زیر را به ماژول(Module) اضافهکنید. سپس از طریق Tools->References ریفرنس excel را به برنامه اضافه کنید. برای من Microsoft Excel 16.0 Object Library میباشد، اما ممکن است برای شما(بسته به ورژن آفیس شماست) بجای 16.0 اعدادی مانند 15.0 و یا 14.0 ظاهر شود.(توجه از این به بعد امکان دارد در زمانهایی لازم باشد تا به کدها اضافه یا کم شود)
♦ تعریف متغیرها: کدهای زیر را به ماژول اضافه کنید:
Public Const excelFileName As String = "Orders.xlsm"
Public excelApp As Object `= Public excelApp As Excel.Application
Public excelWorkbook As Object `=Public excelWorkbook As WorkbookexcelApp: اطلاعات فایل اکسل در این متغیر قرارمیگیرد(میتوان از Excel.Application بجای Object استفادهکرد).
excelWorkbook: ورکبوک(Workbook) را در این متغیر قرار میگیرد(میتوان از Workbook بجای Object استفادهکرد).
♦ روتین باز کردن و اتصال به فایل اکسل اصلی:
Sub ConnectToExcel()
Dim isAlreadyOpen As Boolean
Dim wb As Object
`Get current PowerPoint folder path
filePath = ActivePresentation.Path & "\" & excelFileName
`Check if file exists
If Dir(filePath) = "" Then
MsgBox "Excel file not found", vbExclamation, "Error"
Exit Sub
End If
`Try to get running Excel instance
On Error Resume Next
Set excelApp = GetObject(, "Excel.Application")
On Error GoTo 0
`Create new Excel instance if not running
If excelApp Is Nothing Then
Set excelApp = CreateObject("Excel.Application")
isAlreadyOpen = False
Else
`Check if our file is already open
isAlreadyOpen = False
For Each wb In excelApp.Workbooks
If StrComp(wb.FullName, filePath, vbTextCompare) = 0 Then
isAlreadyOpen = True
Set excelWorkbook = wb
Exit For
End If
Next wb
End If
`Open file if not already open
If Not isAlreadyOpen Then
Set excelWorkbook = excelApp.Workbooks.Open(filePath)
End If
`Show Excel window (optional)
excelApp.Visible = True
End Sub- خط 8 تا 12 کنترل میکند آیا فایل اکسل وجود دارد یا نه.
- خطهای 14 تا 17 بررسی میکند آیا اینیستنسی(Instance) از اکسل در حافظه باز است یا خیر(از آنجایی که اگر باز نباشد خطا اتفاق میافتد و برنامه متوقف میگردد لذا برای جلوگیری از خطا از On Error Resume Next استفاده شده.
- خطهای 20 تا 22 یک اینستنس اکسل در حافظه ایجاد میکند
- خطهای 24 تا 30 چک میکند آیا حالا که اینیستنسی از اکسل در حافظه وجود دارد، آیا فایل مورد نظر ما(در اینجا Orders.xlsm) نیز در حافظه هست یا خیر.
- خط 41 نیز اگر بخواهید میتوانید بردارید(در صورتی که بخواهید فایل اکسلمان در پسزمینه باشد در این خط مقدار false قرار دهید).
♦ روتین بستن فایلها و خالیکردن حافظه:
Sub Disconnect()
` --- For closing Excel later ---
excelWorkbook.Close SaveChanges:=False
excelApp.Quit
Set excelWorkbook = Nothing
Set excelApp = Nothing
End Subدستور excelWorkbook.Close SaveChanges:=False بدون اینکه فایل اصلی اسلی را تغییر دهد آن را میبندد(مانند آن است که شما اقدام به بستن فایل کنید و در برابر سوال اینکه تغییرات ذخیره شود گزینهNo را انتخاب کنید)
♦ روتین انتقال دادهها از فایل اکسل اصلی: این روتین با توجه به رنجی Range که انتخاب میکنیم به محلی که قرار است اطلاعات به آنجا منتقل گردد و روش انتقال اطلاعات(دلخواه میباشد و مشخص میکند انتقال مستقیم یا 90درجه چرخیده باشد) سعی شده تا جای ممکن این انتقال با بیشترین سرعت ممکن انجام گردد.
Function TransferData(SourceRange As Range, TargetStartCell As Range, Optional Transpose As Boolean = False) As Boolean
On Error GoTo ErrorHandler
excelApp.ScreenUpdating = False
excelApp.Calculation = xlCalculationManual
excelApp.EnableEvents = False
Dim dataArray() As Variant
Dim targetSheet As Worksheet
Dim targetWorkbook As Workbook
dataArray = SourceRange.Value
Set targetSheet = TargetStartCell.Worksheet
Set targetWorkbook = targetSheet.Parent
If Transpose Then
targetSheet.Range(TargetStartCell.Address).Resize( _
UBound(dataArray, 2), UBound(dataArray, 1)).Value = _
Application.WorksheetFunction.Transpose(dataArray)
Else
targetSheet.Range(TargetStartCell.Address).Resize( _
UBound(dataArray, 1), UBound(dataArray, 2)).Value = dataArray
End If
TransferData = True
ExitHandler:
excelApp.ScreenUpdating = True
excelApp.Calculation = xlCalculationAutomatic
excelApp.EnableEvents = True
Exit Function
ErrorHandler:
TransferData = False
MsgBox "Error: " & Err.Description, vbCritical
Resume ExitHandler
End Function- خط 2 نوع عملیات پس از بروز خطا را مشخص میکند
- خط 3 تا 5 برای افزایش سرعت است و جلوگیری از کارهای اضافه در زمان انتقال میکند.
- خط 11 بدلیل اینکه ما دستور Transpose یا چرخش داده به میزان 90درجه را داریم بهترین روش استفاده از آرایه میباشد، اطلاعات مورد نیاز را از فایل اصلی داخل آرایه میریزیم.
- خطهای 16 تا 23 فقط مقدارها را(مانند آن است که دادهها به روش PasteValue انتقال یابد) انتقال میدهد.
در قسمت بعدی نحوه تهیه اسلایدها براساس دادههای درون اکسل را خواهید فهمید.
فایلهای مطلب
فایل اکسل (165.98 کیلو بایت)
فایل پاورپوینت (96.86 کیلو بایت)







