Ya, ini mungkin, tapi mungkin banyak bagi seseorang yang baru mengenal pemrograman makro. Kompleksitasnya sedikit meningkat karena Anda mencoba untuk bekerja dengan excel dan proyek pada saat yang sama - tetapi semuanya benar-benar dapat dilakukan.
Tidak ada API yang sudah melakukan penyusutan ini untuk Anda, tetapi MS Office memiliki model Object Document yang sangat kaya . Salah satu sumber daya terbaik yang Anda miliki adalah kunci 'F1' Anda. Coba rekam apa yang ingin Anda lakukan dalam langkah-langkah yang sangat kecil dan modifikasi kode untuk membuatnya generik dengan tepat. Perekam dapat membantu Anda menemukan objek, metode, dan properti yang harus Anda kenal.
Objek pekerja keras utama dalam Proyek adalah objek Tugas . Di Excel itu adalah objek Range . Anda harus terbiasa dengan keduanya untuk melakukan apa yang Anda inginkan. Garis besar kasar:
- Mulailah dengan tugas yang Anda pilih dalam proyek
- Untuk setiap tugas dalam pilihan Anda:
a. Buat buku kerja baru
b. Dapatkan nilai yang Anda inginkan dari proyek
c. tulis mereka ke kisaran yang sesuai di excel
Saya agak bingung pada bagian templat dari pertanyaan Anda, jadi jangan khawatir tentang hal itu dalam contoh di bawah ini, tetapi Anda dapat mendefinisikan sesuatu yang disebut Kisaran Bernama di excel. Jadi nama-nama ini dapat hidup dalam templat Anda, Anda bahkan dapat menggunakan kembali nama yang sama pada beberapa lembar (tab) jika Anda mau dan menggunakan nama-nama ini untuk menentukan di mana harus menulis data taks Anda. Misalnya, saya menulis id tugas Range("A2")
, tetapi bisa jugaRange("Project_ID")
Juga, saya akan merekomendasikan memecah ini menjadi beberapa fungsi, satu untuk setiap langkah dalam garis besar Anda. Ini adalah titik awal yang sangat mendasar. Untuk menggunakan contoh ini, Anda harus membuat referensi ke definisi objek Excel dari Project. Buka IDE VBA proyek dan pilih Alat -> Referensi . Temukan entri Perpustakaan Objek Microsoft Excel XX.0 dan beri tanda centang di kotak centang. 'XX' adalah versi excel Anda. Punyaku 10, milikmu mungkin berbeda. Siapa pun yang menggunakan ini harus membuat pilihan yang sama.
Option Explicit
Sub CopyTasksToExcel()
Dim xlApp As Excel.Application
Dim t As Task
Dim wb As Excel.Workbook
Set xlApp = New Excel.Application
For Each t In ActiveSelection.Tasks
Set wb = CreateWorkbook(xlApp, t.Name, t.ID)
WriteSheetHeadingOn wb
WriteTaskOn t, wb
wb.Close SaveChanges:=True
Next t
xlApp.Quit
Set xlApp = Nothing
End Sub
Function CreateWorkbook(ByVal xlApp As Excel.Application, _
ByVal TaskName As String, _
ByVal TaskID As Long) As Excel.Workbook
Dim wb As Excel.Workbook
Dim fName As String
Set wb = xlApp.Workbooks.Add 'You could specify a template here
fName = ActiveProject.Path & "\" _
& TaskID & "-" _
& TaskName & ".xls"
wb.SaveAs FileName:=fName
Set CreateWorkbook = wb
Set wb = Nothing
End Function
'Writes date from a Project Task to the provided workbook.
Sub WriteTaskOn(ByVal prjTask As Task, _
ByVal xlWb As Excel.Workbook)
With xlWb.Sheets(1)
.Range("A2").Value = prjTask.ID
.Range("B2").Value = prjTask.Name
.Range("C2").Value = prjTask.Duration
End With
End Sub
Sub WriteSheetHeadingOn(ByVal xlWb As Excel.Workbook)
With xlWb.Sheets(1)
.Range("A1").Value = "ID"
.Range("B1").Value = "Name"
.Range("C1").Value = "Duration"
End With
End Sub