Tạo addin excel VSTO bằng VB2015

tuhocvba

Administrator
Thành viên BQT
Phần 1:
Addin Excel có thể chia làm 3 loại.
Loại AddinNgôn ngữ phát triểnThuyết minh
xlam AddinVBACó lịch sử lâu đời, môi trường phát triển đơn giản.
COM AddinC#、VB.NETCòn được gọi là Addin VSTO
XLL AddinVisual Studio: C、C++Tốc độ xử lý cao
Và trong khuôn khổ topic này, chúng ta sẽ cùng nhau tìm hiểu Addin VSTO.


1.1
1.2

2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12


(Lưu ý: Thành viên không tự ý xen vào giữa topic này để thảo luận cho tới khi nào chúng tôi thông báo là đã kết thúc trình bày xong kiến thức).
 
1. VSTO Addin và COM Addin
Trong chủ đề này chúng ta sẽ bàn về cách để tạo VSTO addin. Đây cũng được gọi là COM addin.
Nếu có hứng thú, các bạn có thể tìm hiểu thêm về các từ khóa này, tại sao nó lại có tên như vậy. Nhưng có lẽ là khó hiểu và không rõ ràng.
Ngay cả tôi, đã giành nhiều thời gian để tạo ra các Addin, và giành nhiều thì giờ để tìm hiểu về nó, nhưng tôi cũng không dám khẳng định là mình hiểu nhiều về nó.
Tôi nghĩ rằng, các bạn có thể nghĩ như sau thì cũng không sao cả.
VSTO Addin = COM addin
VSTO Visual Studio Tools for Office . Addin được phát triển bởi Visual Studio.
COM Component Object Model. Tôi cảm thấy (không khẳng định chắc chắn), đây là kỹ thuật trao đổi data của các chương trình trên Windows.

1.1 VSTO Addin
Gói VSTO được bán riêng ở phiên bản Visual Studio(VS) 2003. Tuy nhiên từ VS2007 thì nó được đính kèm miễn phí.
Bạn có thể phát triển các ứng dụng cho Office bằng ngôn ngữ C# hay VB.NET.
Lời bàn của diễn đàn tuhocvba.net: Visual Studio là môi trường để bạn lập trình, trên đó bạn có thể sử dụng nhiều ngôn ngữ, chẳng hạn có thể code bằng C# hay VB.NET. Hiện nay hầu hết các tài liệu đều diễn đạt chủ yếu bằng ngôn ngữ C#. Các ví dụ được chia sẻ trên mạng cũng hầu hết được viết bằng ngôn ngữ C#. Tuy nhiên VB.NET có sự tương đồng với VBA nhiều hơn, chúng tôi nghĩ các bạn tiếp cận theo hướng này sẽ thuận lợi hơn. Vì vậy, chúng tôi sẽ cố gắng cung cấp các ví dụ bằng VB.NET.
Chúng ta đang nói tới việc tạo Addin Excel, nhưng các bạn lưu ý rằng, bằng cách tương tự, các bạn cũng có thể tạo Addin cho Word, PowerPoint.

1.2 COM Addin
COM là một kỹ thuật trao đổi dữ liệu giữa các chương trình trên Windows. Thực tế có vẻ nó là một kỹ thuật lớn bao gồm các phương thức giao tiếp, vì thế được gọi là COM. Bản thân tôi cũng không có sự hiểu biết gì nhiều.

Addin VSTO được tạo ra bằng Visual Studio (phần mở rộng là DLL) liên kết với EXCEL.EXE và hoạt động bằng phương thức COM.
Nếu bạn chỉ tạo Addin VSTO, thì việc hiểu như trên, theo tôi là không có vấn đề gì.
 

tuhocvba

Administrator
Thành viên BQT
2. Tạo VSTO Addin Excel
2.1 Khởi động Visual Studio 2015

Từ Menu bạn tìm tới Visual Studio và click vào để khởi động nó.
Bạn cần đăng nhập để thấy đính kèm

Chờ một lát để chương trình khởi động. Mình không rõ thông số máy tính nên là như thế nào, nhưng mình nghĩ bạn nên có RAM tối thiểu 4Gb.
Sẽ có người thắc mắc, tạo Addin thì bình thường tạo bằng VBA cũng được rồi, tại sao phải học thêm VSTO Addin làm gì nhỉ. Mình chưa có thời gian tìm hiểu nhiều, nhưng thông qua Visual Studio, chúng ta có thể tạo những thứ mà trước nay chúng ta không tạo được bằng VBA, hoặc nếu có làm bằng VBA thì cũng rất vất vả.
Chẳng hạn, để tạo task panel, thì người ta có thể dùng Delphi hoặc Visual Studio. Nhưng VBA thì không khả thi.

Nào, chương trình đã khởi động xong, giao diện như dưới đây.
Bạn cần đăng nhập để thấy đính kèm
 

giaiphapvba

Administrator
Thành viên BQT
2.2 Tạo Project mới trên Visual Studio
Để tạo một dự án mới, các bạn vào File => New => Project
Bạn cần đăng nhập để thấy đính kèm


Sau đó: Các bạn tìm tới mục Visual Basic => Office/SharePoint => Office Add-ins.
Chọn Excel 2003 and 2016 VSTO Add-in
Bạn cần đăng nhập để thấy đính kèm

Ở phần dưới cùng là chọn nơi lưu trữ cũng như tên dự án Addin. Ấn OK là xong.

2.3 Trường hợp không tìm thấy VSTO Addin trên Visual Studio
Bạn vào mục Office/SharePoint như ở hình trên nhưng ở dưới không nhìn thấy Office Add-ins. Lúc này bạn nhìn sang bên tay phải sẽ hiển thị nội dung cần cài đặt. Bạn double click để tiến hành cài đặt. Tôi không có hình minh họa phù hợp vì tôi đã tiến hành cài đặt rồi. Sau khi cài đặt xong, bạn tắt Visual Studio và khởi động lại là được.
Nguồn tham khảo:
 

tuhocvba

Administrator
Thành viên BQT
2.4 Khởi động Excel
Bây giờ bạn hãy ấn vào nút Start (phím tắt là Ctr+F5).
Bạn cần đăng nhập để thấy đính kèm

Sẽ có người thắc mắc, ủa, tôi đã code cái gì đâu mà đã vội vàng chạy thử chương trình rồi. Không sao đâu, đây chỉ là một thao tác thử kiểm tra xem có lỗi hay không. Vì bạn chưa code gì, cho nên tất nhiên sẽ không có lỗi gì xảy ra. Bạn sẽ thấy sau khi bạn ấn vào nút Start, Excel sẽ được khởi động. Bạn chọn New Blank workbook.
Bạn cần đăng nhập để thấy đính kèm
 

Euler

Administrator
Thành viên BQT
2.5 COM Addin trong Developer Tab
Sau khi đã khởi động Excel, bạn vào thẻ Developer, click vào COM Add-ins.
Bạn cần đăng nhập để thấy đính kèm

Ở đây bạn sẽ thấy Addin ExcelAddin_01 là dự án chúng ta đang tiến hành làm. Bên cạnh có các nút Add, Remove... Các bạn không nên sờ mó vào các nút này.
Mỗi lần bạn thực hiện debug (ấn vào nút Start), thì Excel sẽ khởi động như đã nói. Trường hợp của tôi thì không có vấn đề gì, nhưng nếu các bạn không tìm thấy COM Add-ins thì có lẽ bạn nên cài đặt lại Office.
 

tuhocvba

Administrator
Thành viên BQT
2.6 Thử tạo Ribbon
Bây giờ ta sẽ thử tạo thẻ Ribbon trên Excel.
Trước hết bạn hãy đóng các file Excel nếu nó đang được mở.
Trên Visual Studio, bạn click chuột phải vào tên dự án, cụ thể ở đây tôi click chuột phải vào ExcelAddin_01. Sau đó chọn Add => New Item.
Bạn cần đăng nhập để thấy đính kèm


Tiếp theo, tôi vào Office/SharePoint và tìm tới Ribbon (Visual Designer).
Bạn cần đăng nhập để thấy đính kèm


Bây giờ, giao diện Ribbon đã hiện ra.
Bạn cần đăng nhập để thấy đính kèm
 

Euler

Administrator
Thành viên BQT
2.7 Thêm nút bấm trên Ribbon
Trên Visual Studio bạn vào View => ToolBox.
Bạn cần đăng nhập để thấy đính kèm

Dùng chuột giữ vào Button và thực hiện kéo thả vào trong Ribbon.
Bạn cần đăng nhập để thấy đính kèm

Kết quả:
Bạn cần đăng nhập để thấy đính kèm
Bạn có thể thay đổi tên nút bấm bằng cách click chuột phải vào nút bấm và chọn Properties.
Bạn cần đăng nhập để thấy đính kèm
Trong thuộc tính Label (tương tự Caption trong UserForm của VBA), bạn nhập tên cho nút bấm.
Bạn cần đăng nhập để thấy đính kèm

Nào bây giờ hãy ấn Start để khởi động Excel xem sao nhé.
Trong thẻ Add-ins đã xuất hiện nút bấm.
Bạn cần đăng nhập để thấy đính kèm
 

vbano1

SMod
Thành viên BQT
2.8 Viết code cho sự kiện của nút bấm
Bây giờ ta sẽ viết code cho sự kiện click của nút bấm.
Bạn click chuột phải vào nút bấm và chọn View Code.
Bạn cần đăng nhập để thấy đính kèm
Ở đây bạn sẽ thấy sự kiện click:
Bạn cần đăng nhập để thấy đính kèm
Bây giờ chúng ta sẽ viết code cho sự kiện click trên như sau:
Mã:
    Private Sub Button1_Click(sender As Object, e As RibbonControlEventArgs) Handles Button1.Click
        Dim activeSheettep As Microsoft.Office.Interop.Excel.Worksheet
        activeSheettep = ExcelAddIn_01.Globals.ThisAddIn.Application.ActiveSheet
        activeSheettep.Range("A1").Value = "tuhocvba.net"

    End Sub
Chú ý, ở code trên, ExcelAddIn_01 là tên dự án Project của tôi. Trong trường hợp bạn đặt tên Project khác tôi, thì bạn cần thay thế bằng tên Project của bạn.

Kết quả là:
Khi bạn click vào nút bấm tuhocvba, thì trên cells A1 của ActiveSheet sẽ ghi chữ là "tuhocvba.net":
Bạn cần đăng nhập để thấy đính kèm


Nguồn tham khảo:
 
2.9 Thử thực thi chức năng trên nút bấm của Ribbon
Như ở mục 2.4 đã nêu, để thử thực thi chức năng nút bấm Ribbon của bạn, bạn chỉ cần ấn nút Start:
Bạn cần đăng nhập để thấy hình ảnh

Khi đó Excel sẽ được khởi động, bạn vào New chọn Blank workbook.
Bạn cần đăng nhập để thấy hình ảnh


Excel mở ra, bạn vào thẻ Add-ins, tại đây bạn sẽ thấy nút bấm đã được tạo ra, bạn chỉ việc click vào nút bấm đó.
Bạn cần đăng nhập để thấy hình ảnh


2.10 Sử dụng Debug trên Visual Studio
Cũng giống như VBA, trong môi trường Visual Studio chúng ta cũng có thể đặt điểm chặn dòng code để thực hiện debug.
Bạn cần đăng nhập để thấy hình ảnh

Hãy ấn Start để khởi động Project. Cho tới khi Excel hiện lên, giống như mục 2.9 đã nói, bạn click vào nút bấm trong thẻ Add-ins của Excel. Sự kiện Click được thực thi, nó chạy tới dòng lệnh bị chặn thì dừng lại. Ở đây nếu bạn muốn thực thi dòng lệnh tiếp theo, hãy ấn F11. Nếu như trên VBA chúng ta có nút F8. Vì vậy xin đừng nhầm lẫn.
 

giaiphapvba

Administrator
Thành viên BQT
2.11 Làm việc với Range và Cells
Cũng tương tự như VBA, khi làm việc với cells , Range ta cũng có cấu trúc tương tự. Ở đây tôi mô tả các công việc thông thường:
-Ghi giá trị
-Tô màu
Mã:
    Private Sub Button1_Click(sender As Object, e As RibbonControlEventArgs) Handles Button1.Click
        Dim activeSheettep As Microsoft.Office.Interop.Excel.Worksheet
        activeSheettep = ExcelAddIn_01.Globals.ThisAddIn.Application.ActiveSheet
        activeSheettep.Range("A1").Value = "tuhocvba.net"
        activeSheettep.Cells(1, 2) = "THVBA"
        activeSheettep.Range("C1:D5").Value = 1
        activeSheettep.Cells(1, 2).interior.color = RGB(255, 0, 0)
        With activeSheettep
            .Range(.Cells(10, 1), .Cells(15, 6)).Value = 10
        End With

    End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh
 
2.12 Lý do Excel được khởi động khi thực thi một project VSTO
Bạn vào thẻ Project và chọn ExcelAddin_01 Properties.
Bạn cần đăng nhập để thấy hình ảnh

Tiếp theo bạn vào thẻ Debug bạn sẽ thấy đang được tích chọn Start project.
Bạn cần đăng nhập để thấy hình ảnh

Điều này có nghĩa là khi bạn thực thi Debug và không có lỗi gì, thì Excel sẽ được khởi động.
Bây giờ giả sử bạn cài đặt cả Excel 2016 và Excel 2013 trên máy tính. Mặc định Excel 2016 sẽ được khởi động.
Tuy nhiên nếu chúng ta muốn test trên Excel 2013, khi đó bạn tích chọn vào Start external program. Sau đó chọn đường dẫn tới chương trình Excel 2013. Tôi nghĩ là ở đường dẫn sau:
C:\Program Files\Microsoft Office 15\root\office15\EXCEL.EXE
Lý do tôi nghĩ là- là bởi vì thực tế tôi không có cài Excel 2013, các bạn hãy tự kiểm chứng nhé. Có rất nhiều phiên bản Office trong quá khứ, tôi không thể nào kiểm nghiệm hết tất cả các phiên bản.
Office 2003, Office 2007, Office 2010, Office 2013, Office 2016.
 
B

bvtvba

Guest
3. Tổng kết
Trong khuôn khổ một topic, những gì trình bày ở đây đã giúp các bạn hình dung được các bước tạo COM Addin. Đặc biệt với cách này, các bạn sẽ nhanh chóng tạo ra thẻ Ribbon, điều này thực sự rất tiện lợi.
Tôi nghĩ chúng ta có nhiều thứ để thảo luận với nhau hơn nếu quan tâm tới việc sử dụng UserForm trong COM addin như thế nào. Về vấn đề này, chúng ta sẽ bàn trong một topic khác.
 

engineer0405

Yêu THVBA
Dạ anh cho em hỏi tý ạ
Trong VBA em đã có sẵn Sub tinh()
Thì giờ trên ribbon có thể load được sub đó ạ
em cảm ơn anh
 
D

Deleted member 1294

Guest
@engineer0405 trên ribbon bằng vba thì được còn muốn trên ribbon của vsto thì sub đó bạn phải để trong addin vsto tức phải viết bằng vbnet...
 

engineer0405

Yêu THVBA
@engineer0405 trên ribbon bằng vba thì được còn muốn trên ribbon của vsto thì sub đó bạn phải để trong addin vsto tức phải viết bằng vbnet...
Em cảm ơn anh ạ
ý em thế này ạ
tức là trước em có viết mấy code bằng VBA
nhưng giờ muốn dùng lại những code đó mà chỉ tạo ribbon bằng VSTO thì có tận dụng lại code của VBA trước được không ạ
Em cảm ơn ạ
 
D

Deleted member 1294

Guest
@engineer0405 nếu bạn muốn chạy sub đó từ ribbon bạn phải chuyển code vba sang vbnet còn ko chạy nó từ ribbon bạn cứ để
 

NhanSu

SMod
Thành viên BQT
Trong addin VSTO bạn dùng lệnh application.run() để chạy macro VBA. Ví dụ như sau (mình code bằng C#):
VSTO addin:
Mã:
private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            Globals.ThisAddIn.Application.Run("macro1");
        }
VBA:
Mã:
Sub Macro1()
    MsgBox "I am invoked from VSTO add-in.", vbOKOnly, "tuhocvba.net"
End Sub
Bạn cần đăng nhập để thấy hình ảnh
 
Top