Chương trình cài đặt AddIns cho Excel trong VB6

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,652
Được thích
10,142
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Mình thấy nhiều bạn cài đặt Addin làm trong Excel, phương pháp này không được tốt lắm vì nó mang tình phụ thuộc vào mức "Security" của Excel.

Mình viết một chương trình cài đặt Addins cho Excel trên VB6 mọi người tham khảo. Nếu ai đó hoàn thiện được nó hơn thì post lên nhé!
Mã:
Const strClassApp As String = "Excel.Application"
Const strAddinsPath As String = "My AddIns"

Enum enuCreateObject
    coError = 0
    coCreate = 1
    coGetInstance = 2
End Enum
'-------------------------------------
Sub Main()
On Error GoTo RaiseErr
Dim ExcelApp As Excel.Application
Dim InfoCr As enuCreateObject
Dim strPath As String, AddinsList As String

    InfoCr = GetApp(strClassApp, ExcelApp)
    If InfoCr = coError Then
        MsgBox "Loi nhan dieu khien cua Excel (Instance).", vbCritical
        Exit Sub
    End If
    
    If InfoCr = coCreate Then
        ExcelApp.Workbooks.Add
        ExcelApp.Visible = False
    End If
    
    strPath = App.Path & "\" & strAddinsPath
    
    AddinsList = InstallAddIns(ExcelApp, strPath, "xla")
    AddinsList = AddinsList & InstallAddIns(ExcelApp, strPath, "xll")
    
    If Len(AddinsList) = 0 Then
        MsgBox "Cai AddIns cho Excel khong thanh cong.", vbCritical
    Else
        MsgBox "Cac Addins da duoc cai dat vao Excel:" & AddinsList _
                , vbInformation, _
                "Cai dat thanh cong!"
    End If
    
RaiseErr:
    If Not ExcelApp Is Nothing Then
        If InfoCr = coCreate Then
            ExcelApp.Quit
        End If
        Set ExcelApp = Nothing
    End If
    
    If Err.Number = 0 Then Exit Sub
    
    MsgBox Err.Number & ": " & Err.Description, vbCritical, "Error: Sub Main"
End Sub
'-------------------------------------
Private Function GetApp(strClass As String, ByRef ObjApp As Object) As enuCreateObject
On Error GoTo CreateApp
    
    GetApp = coGetInstance
    Set ObjApp = GetObject(, strClassApp)
    Exit Function

CreateApp:
On Error GoTo RaiseErr
    GetApp = coCreate
    Set ObjApp = CreateObject(strClassApp)
    Exit Function
    
RaiseErr:
    GetApp = coError
    
End Function
'-------------------------------------
Private Function InstallAddIns(ByVal ExcelApp As Excel.Application, ByVal AddInsPath As String, ByVal TypeOfFile As String) As String
On Error Resume Next
Dim MyFileAddIn As String
    MyFileAddIn = Dir(AddInsPath & "\*." & TypeOfFile)    ' Retrieve the first entry.
    Do While MyFileAddIn <> ""    ' Start the loop.
        MyFileAddIn = InstallAddIn(ExcelApp, AddInsPath & "\" & MyFileAddIn)
        If MyFileAddIn <> "" Then
            InstallAddIns = InstallAddIns & Chr(13) & MyFileAddIn
        End If
        MyFileAddIn = Dir    ' Get next entry.
    Loop
End Function
'-------------------------------------
Private Function InstallAddIn(ByVal ExcelApp As Excel.Application, strFileAddin As String) As String
On Error GoTo RaiseErr
Dim objAddin As Excel.AddIn
    
    InstallAddIn = ""
    Set objAddin = ExcelApp.AddIns.Add(FileName:=strFileAddin)
    'Debug.Print objAddin.FullName
    If UCase(objAddin.FullName) <> UCase(strFileAddin) Then
        MsgBox "Da co mot Addin cung ten """ & objAddin.Name & """ duoc cai dat theo dia chi (duong dan) """ & objAddin.Path & """." & Chr(13) & _
                "Ban hay vao Excel, trong menu Tools->Add-Ins...hay kiem tra lai.", _
                vbExclamation
        '// TODO...
    Else
        objAddin.Installed = True
        InstallAddIn = objAddin.FullName
    End If
    
    Set objAddin = Nothing
    Exit Function

RaiseErr:
    MsgBox Err.Number & ": " & Err.Description, vbCritical, "Error: Sub InstallAddIn"
End Function
'-------------------------------------
 

File đính kèm

  • Install My Addins.zip
    45 KB · Đọc: 874
Chà, bài này gởi lúc 2 giờ sáng! Thật bái phục anh bạn Tuấn chịu khó thức khuya viết cái code này gởi lên cho mọi người.
 
Cám ơn bạn rất nhiều nhé. Mình đã down về xài, rất uki. Nhân tiện đây cho mình hỏi 2 vấn đề:

1.Trước đây mình có down addinn có chức năng "Merge cell - không làm mất nội dung bên trong" cũng từ diễn đàn này, mình cũng cài đặt bình thường tools > Addinn >Browes > ok. nhưng kết quả là không sử dụng được. Các addinn khác mình vẫn cài đặt và sử dụng bình thường. Không hiểu vì sao. Mình rất thích cái này. Nếu sử dụng được như bên word thì quá tốt (bên work chỉ cần click chuột phải và bấm chữ F)
2. Diễn đàn có 1 addinn rất hay khác có chức năng "Thay đổi Font chữ giống như bên word: nhấn Crtl+[ hoặc Ctrl ]" nhưng nó có đuôi là .xlam chứ không phải là .xla. Máy mình không chạy được. Mình đang sử dụng bộ office 2003.

Bạn giúp mình giải quyết 2 vấn đề trên với nhé. Cám ơn bạn rất nhiều.

Chúc bạn sức khỏe dồi dào...để tiếp tục có nhiều phát minh hay và free cho mọi người.
 
Cám ơn bạn rất nhiều nhé. Mình đã down về xài, rất uki. Nhân tiện đây cho mình hỏi 2 vấn đề:

1.Trước đây mình có down addinn có chức năng "Merge cell - không làm mất nội dung bên trong" cũng từ diễn đàn này, mình cũng cài đặt bình thường tools > Addinn >Browes > ok. nhưng kết quả là không sử dụng được. Các addinn khác mình vẫn cài đặt và sử dụng bình thường. Không hiểu vì sao. Mình rất thích cái này. Nếu sử dụng được như bên word thì quá tốt (bên work chỉ cần click chuột phải và bấm chữ F)
2. Diễn đàn có 1 addinn rất hay khác có chức năng "Thay đổi Font chữ giống như bên word: nhấn Crtl+[ hoặc Ctrl ]" nhưng nó có đuôi là .xlam chứ không phải là .xla. Máy mình không chạy được. Mình đang sử dụng bộ office 2003.

Bạn giúp mình giải quyết 2 vấn đề trên với nhé. Cám ơn bạn rất nhiều.

Chúc bạn sức khỏe dồi dào...để tiếp tục có nhiều phát minh hay và free cho mọi người.

Với các add-in có đuôi "xlam" bạn phải dùng với Excel 2007 trở lên.
 
Thanks bạn nhìu nhé.
Cái merger cell ko hiểu sao chạy được rùi. Nếu sửa được phím tắt giống như bên word thì hay quá.
Mình sẽ qua box của 2 addins trên để hỏi.
Mình hỏi ở đây hình như không đúng. Sorry bạn nhé
Thanks lần nữa.
 
Cho mình góp vui tí nhé. Mình tìm thấy tệp tin excelAdd-Ins Install (Sử dụng Innosetup để tạo file cài đặt)
Lấy tệp tin này về và dùng Inno Setup để tạo file cài đặt rất hay, nó tự động đăng ký với mọi bản Office.
https://github.com/bovender/ExcelAddinInstaller
 
hic, tại tui tải về compile bị lỗi ở file setup.iss row 18 [product]. Các cao thủ hướng dẫn thì mong test thành công rồi mới hướng dẫn chi tiết ae nha ^^. Tiện thể em xin các cao thủ chia sẻ luôn hướng dẫn việt Adds in COM (kiểu DLL) để dấu code hình như GPE chưa có bài nào về topic này.
thx in advanced!
 
Lần chỉnh sửa cuối:
Thì viết code vào VB6 hay VB.net đó xong Make nó sang File *.dll xong Từ Excel làm thủ tục keo nó chạy...
Vậy là yên tâm kê cao gối mà ngủ hông sợ ai coi code két....đơn giản ...trên PGE có hết rồi mà
 
hic, tại tui tải về compile bị lỗi ở file setup.iss row 18 [product]. Các cao thủ hướng dẫn thì mong test thành công rồi mới hướng dẫn chi tiết ae nha ^^. Tiện thể em xin các cao thủ chia sẻ luôn hướng dẫn việt Adds in COM (kiểu DLL) để dấu code hình như GPE chưa có bài nào về topic này.
thx in advanced!
Bạn muốn xử lý lỗi của nó thì bạn phải xem hướng dẫn sử dụng Inno Setup tại địa chỉ.
http://caulacbovb.com/forum/viewtopic.php?t=775
Bạn muốn tạo thư viện động bằng VB6 thì có thể tham khảo tại đây.
http://www.giaiphapexcel.com/forum/...-dẫn-liên-kết-giữa-Excel-với-Visual-Basic-6-0
Còn rất nhiều bài viết về liên kết giữa VB6 và Excel trong diễn đàn có đầy.
 
Web KT
Back
Top Bottom