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