OLE Object atau kepanjangan dari Object Linking and Embedding.
OLE adalah sebuah teknologi yang memungkinkan aplikasi untuk membuat dan menyisipkan objek dari satu aplikasi ke aplikasi lain.
Dalam konteks VBA, Ole Object sering digunakan untuk menyisipkan atau mengakses objek dari program lain di dalam program yang sedang berjalan.
Contohnya, kamu dapat menggunakan OLE Object dalam VBA Excel untuk menyisipkan objek dari program seperti Microsoft Word atau PowerPoint bahkan hingga file PDF ke dalam lembar kerja Excel.
Misalnya, disini saya contohkan OLE Object untuk menyisipkan File PDF kedalam File Excel.
Maka scriptnya bisa dibuat seperti dibawah ini
Sub TambahPDF() Dim OLEs As Excel.OLEObjects Set OLEs = Sheet1.OLEObjects Set ole = OLEs.Add( _ Filename:="NamaLokasiFIle", _ Link:=False, _ DisplayAsIcon:=True, _ IconFileName:= "NamaLokasiIcon", _ Left:=Sheet1.Range("F1").Left, _ Top:=Sheet1.Range("F1").Top + 5, _ IconIndex:=0, _ IconLabel:="Klik disini untuk Membuka file") ole.Name = "andi" End Sub
Pada script diatas, OLE Object ditambahkan ke alamat Cell F1 dengan NamaFIle dan Juga Icon FIle yang sudah ditentukan.
Jika ingin lebih dinamis, Lokasi File bisa ditambahkan melalui Open Dialog, sedangkan untuk Icon File Harus menggunakan Windows API jika ingin mengambil Icon dari File Terpilih.
Windows API untuk menambahkan icon sesuai dengan File yang ditambahkan.
Private Declare PtrSafe Function FindExecutable Lib "shell32.dll" _ Alias "FindExecutableA" (ByVal lpFile As String, _ ByVal lpDirectory As String, ByVal lpResult As String) As Long
Private Function exeApp(strFile As String) As String Const MAX_FILENAME_LEN = 260 Dim i As Long, buff As String If strFile = "" Or Dir(strFile) = "" Then MsgBox "File not found!", vbCritical Exit Function End If 'Create a buffer buff = String(MAX_FILENAME_LEN, 32) 'Retrieve the name and handle of the executable i = FindExecutable(strFile, vbNullString, buff) If i > 32 Then exeApp = Left$(buff, InStr(buff, Chr$(0)) - 1) Else MsgBox "No association found, for this file !" End If End Function
Sehingga pada Script OLE Objectnya menjadi
Sub TambahPDF() Dim OLEs As Excel.OLEObjects Set OLEs = Sheet1.OLEObjects Set fileDialog = Application.FileDialog(msoFileDialogFilePicker) With fileDialog .Title = "Pilih File PDF" .Filters.Clear .Filters.Add "PDF Files", "*.pdf" .AllowMultiSelect = False If .Show = -1 Then ' Jika pengguna memilih file NamaFile= .SelectedItems(1) Else Exit Sub End If End With Set ole = OLEs.Add( _ Filename:= NamaFile, _ Link:=False, _ DisplayAsIcon:=True, _ IconFileName:= exeApp(NamaFile), _ Left:=Sheet1.Range("F1").Left, _ Top:=Sheet1.Range("F1").Top + 5, _ IconIndex:=0, _ IconLabel:="Klik disini untuk Membuka file") ole.Name = "NamaShapes" End Sub
Untuk membuka File Ole Object yang ditambahkan bisa langsung dilakukan double klik pada Ole Object yang dimaksud.
Tetapi jika ingin membuka FIle Ole Object menggunakan perantara lain, misalnya sebuah Button, maka script pada button bisa dibuat seperti dibawah ini.
Sub BukaPDF() Sheet1.Shapes("NamaShapes").Select Selection.Verb Verb:=xlOpen End Sub