CÔNG TY CỔ PHẦN BLUESOFTS

Lập trình VBA nhúng Zalo vào Excel với BSTaskPane trong BSAC

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