Lập trình VBA nhúng ứng dụng Zalo vào trong Excel để bạn vừa làm việc vừa chat cùng Zalo thuận tiện, hoặc "ai đó" không thấy bạn đang mở Zalo, chỉ là Excel. Ví dụ này tôi chỉ muốn nói đến kỹ thuật sử dụng BSTaskPane để tạo cửa sổ Task Pane trong Excel, ví dụ nhúng ứng dụng ngoài vào trong cửa sổ này. Bạn hãy làm từng bước theo video này là làm được. Mã nguồn gửi trong bài viết này, hoặc bạn tải bộ cài BSAC về là có.
Video hướng dẫn chi tiết từng bước:
Nội dung trong video hướng dẫn gồm:
Nhúng thư viện BSAC.ocx vào VBAProject.
+ Trong cửa sổ VBA, chọn VBAProject - file mà bạn muốn nhúng BSAC
+ Vào menu Tools - > References... Khi cửa sổ hiện ra chọn "Browser...", chọn kiểu file "ActiveX Controls". Vào thư mục chứa BSAC.ocx. Với Excel 32-bit thì thư mục C:\Windows\SysWow64; Với Excel 64-bit thì thư mục C:\Windows\System32, chọn file "BSAC.ocx"
Mã nguồn:
Vào menu "Insert" - > Module và dán đoạn code dưới đây vào cửa sổ bên phải.
Option Explicit
'Author: Nguyen Duy Tuan - http://bluesofts.net
'Facebook: https://www.facebook.com/groups/hocexcel
#If VBA7 Then
Public Declare PtrSafe Function CountFileInProcess Lib "BSAC.ocx" (ByVal FileName As Variant) As Long
#Else
Public Declare Function CountFileInProcess Lib "BSAC.ocx" (ByVal FileName As Variant) As Long
#End If
Dim TP As BSTaskPane
Sub CreateTpZalo()
Dim TPs As New BSTaskPanes 'Task Pane list
Dim MustCreate As Boolean
Dim Title As String: Title = "Task Pane: Zalo" 'It is the same in sub DestroyTpZalo()
'SinkControl:
' + Userform
' + Handle to window
' + ClassName:Title (if only find class name then "ClassName:"
' + Title
'In this demo, "Zalo" is title of Zalo App
'Class and Title of appilcation use "Spy++ tool" or other to find
If CountFileInProcess("Zalo.exe") = 0 Then
MsgBoxW "Please run Zalo app.", vbCritical, "Zalo not running"
Exit Sub
End If
If Not TP Is Nothing Then
MustCreate = TP.Client.SinkControl = 0 'Not success
If Not MustCreate Then 'Exists, check is it Zalo?
If TP.Caption <> Title Then
If MsgBoxW("Do you want to remove TP and recreate it?", VbMsgBoxStyle.vbQuestion + vbYesNo, "Create Zalo") = vbYes Then
TP.Remove
Set TP = Nothing
MustCreate = True
End If
End If
End If
Else
MustCreate = True
End If
If MustCreate Then
Set TP = TPs.Add(Title, "Zalo", False, dpLeft)
TP.AllowHide = False 'Prevent user from clicking on "X" of Task Pane
Else
TP.Visible = True
End If
'Ok!
Set TPs = Nothing
End Sub
Sub DestroyTpZalo()
Dim TPs As New BSTaskPanes
'TPs.Clear 'Clear all task panes
Dim Title As String: Title = "Task Pane: Zalo"
Dim Idx As Long
If TPs.Count > 0 And TP Is Nothing Then 'try to get instance of Task pane if it is lost
'Variable "TP" may be lost when you have a bug anywhere
Idx = TPs.IndexOf(Title) 'Find TP with Title in TaskPane list (BSTaskPanes)
If Idx >= 0 Then
Set TP = TPs(Title)
End If
End If
If Not TP Is Nothing Then 'Only Zalo app
TP.Remove
Set TP = Nothing
End If
Set TPs = Nothing
End Sub
|
Giải thích thêm
Trong đoạn code trên, lệnh tạo mới Task Pane và nhúng ứng dụng, lệnh Set TP = TPs.Add(...) các bạn chú ý tham số "SinkControl". Tham số này có thể là các giá trị:
+ Userform
+ "Tiêu đề của cửa sổ Window" - Title/Caption, trong ví dụ trên là tiêu đề cửa sổ là "Zalo"
+ "Là tên class và tiêu đề của cửa sổ" , cấu trúc "Class:Caption". "Class" là tên class của Window, "Caption" là tiêu đề cửa sổ ứng dụng.
Cách chạy macro trong VBA
Trước khi chạy code trên Zalo bạn phải đang mở nhé!
Theo ví dụ trên chúng ta có 2 macro: CreateTpZalo(), DestroyTpZalo()
Cách 1: đặt con trong vào trong khối code của một macro bạn muốn chạy (ví dụ bên trong CreateTpZalo), nhấn F5.
Cách 2: ở môi trường người dùng bảng tính, nhấn F8, chọn rên macro rồi "Run"
Cách 3: gán macro vào nút lệnh: Vào tab "Developer" -> Insert -> CommandButton rồi gán macro vào.
BSAC là activex controls chỉ duy nhất một file cần cài vào máy tính "BSAC.ocx". Nếu bạn cài Add-in A-Tools thì BSAC được tự động cài vào. Nếu bạn chỉ muốn BSAC trong máy thì hãy đọc hướng dẫn chi tiêt cách cài trong bộ cài BSAC.
Download BSAC