Các bước để tạo một Add-Ins hoàn chỉnh.

Liên hệ QC

giaiphap

==(^o^)==
Tham gia
12/3/07
Bài viết
5,776
Được thích
6,263
Donate (Momo)
Donate
Giới tính
Nam
Chào các thành viên diễn đàn GPE. Trong thời gian vừa qua có một số thành viên GPE nhắn tin riêng hoặc mail riêng cho tôi xin chia sẻ cách tạo Add-Ins cũng như cách tạo file cài đặt Add-Ins để dùng ở một máy tính bất kỳ mà không phải cài đặt thủ công.

Hôm nay tôi xin chia sẻ tất cả những gì mình biết cũng như dùng tất cả những công cụ cần thiết để tạo một Add-Ins hoàn chỉnh sau đó tạo file cài đặt (đóng gói Add-Ins) để dùng cho máy tính khác.

Trước tiên xin các thành viên bỏ qua cho những gì mình viết có sai xót, hoặc chưa chuẩn lắm về kiến thức tin học (những từ ngữ chuyên nghành). Phần lớn đây là kiến thức mình học mót được thôi.

Tôi sẽ trình bày từng bước 1 những vấn đề có liên quan đến việc tạo ra một add-ins hoàn chỉnh và sẽ trình bày những cái gọi là cơ bản chứ không khai thác nâng cao từng chi tiết một. Cụ thể tôi sẽ có 6 bài viết như sau:

  1. Những phần mềm cần thiết để tạo ra Add-Ins (Có thể sẽ không cần thiết cho những ai đã rành về việc tạo Add-Ins vì họ có thể sẽ đi tắt hoặc dùng ứng dụng khác thay thế).
  2. Viết hàm và thủ tục cho tiện ích (Chỉ hướng dẫn viết 2 hàm và 2 thủ tục của các thành viên trong diễn đàn).
  3. Tạo Ribbon tương tác (Chỉ hướng dẫn cách tạo nút lệnh để gọi thủ tục trong Add-ins).
  4. Tạo hướng dẫn sử dụng Add-Ins (Viết một file hướng dẫn sử dụng Add-ins dạng file help chm giống như file help của Windows).
  5. Mở file Help từ Add-Ins (Từ ứng dụng Add-Ins có thể mở file Help và nhảy đến chổ người dùng cần xem).
  6. Tạo file cài đặt cho Add-Ins (Sử dụng Inno Setup để tạo một File Add-Ins tự động cài đặt vào trong máy tính cá nhân người dùng).

Hôm nay tôi sẽ bắt đầu ở bài viết thứ nhất.
1. Những phần mềm cần thiết:
Dưới đây là 4 phần mềm tôi thường dùng để tạo một Add-Ins hoàn chỉnh (Có thể các thành viên khác không dùng giống tôi).
  1. Notepad++: Đây là phần mềm dùng để soạn thảo file XML nhằm tạo nút lệnh trên Ribbon cho Add-Ins, có thể dùng Notepad có sẳn trong Windows cũng được.
  2. WinCHMPro: Phần mềm dùng để tạo file hướng dẫn sử dụng add-ins dạng chm giống như các file help của Windows.
  3. Winrar: Phần mềm dùng để giải nén tệp tin Excel trích xuất file XML.
  4. Inno Setup: Phần mềm dùng để tạo file cài đặt Add-Ins.
Đây là 4 phần mềm tôi nghĩ nó sẽ là cần thiết cho ai có nhu cầu tạo Add-Ins. Những phần mềm này các thành viên có thể tải theo đường link phía dưới, tôi sẽ không đi sâu vào vấn đề cài đặt cũng như sử dụng nó, nếu các thành viên có nhu cầu có thể tham khảo hướng dẫn cài đặt và sử dụng có thể tìm kiếm trên Google.
Do tính bảo mật của Google nên mình đặt mật khẩu giải nén file là GPE
 
Lần chỉnh sửa cuối:
2. Viết hàm và thủ tục cho tiện ích:
Chúng ta sẽ tiếp tục ở bài viết thứ 2.
Đầu tiên bạn tạo một file Excel mới và lưu dưới dạng xlsm (Giả sử tôi lưu file với tên là Excel_Add_Ins.xlsm). Xem hình dưới.
2_1.png
Tiếp theo ta nhấn tổ hợp phím Alt+F11 để vào cửa sổ Microsoft Visual Basic For Application. Trên giao diện ứng dụng ta thêm Module mới bằng cách nháy chọn Insert và chọn lệnh Module.
2_2.png
Nháy chọn Module và sửa mục Name thành mdlFun, mục đích của vấn đề này là để dễ quản lý các Hàm và thủ tục thôi.
2_3.png
Làm tương tự và tạo tiếp Module thứ 2 và đặt tên là mdlSub.
2_4.png
Nháy chọn Module mdlFun và dán đoạn code sau vào.
Mã:
Option Explicit
Function VND(ByVal Number As Double) As String 'huuthang_bd
    Dim MyArray, Str As String, i As Long
    Str = Format(Abs(Number), "000000000000000000")
    MyArray = Array("kh" & ChrW(244) & "ng ", "m" & ChrW(7897) & "t ", "hai ", "ba ", "b" & ChrW(7889) & "n ", "n" & ChrW(259) & "m ", "s" & ChrW(225) & "u ", "b" & ChrW(7843) & "y ", "t" & ChrW(225) & "m ", "ch" & ChrW(237) & "n ", "tri" & ChrW(7879) & "u, ", "nghi" & ChrW(768) & "n, ", "t" & ChrW(7927) & ", ", "tri" & ChrW(7879) & "u, ", "nghi" & ChrW(768) & "n, ", "", "tr" & ChrW(259) & "m ", "m" & ChrW(432) & ChrW(417) & "i ", _
        "kh" & ChrW(244) & "ng m" & ChrW(432) & ChrW(417) & "i kh" & ChrW(244) & "ng ", "kh" & ChrW(244) & "ng m" & ChrW(432) & ChrW(417) & "i", "l" & ChrW(7867), "m" & ChrW(432) & ChrW(417) & "i kh" & ChrW(244) & "ng", "m" & ChrW(432) & ChrW(417) & "i", "m" & ChrW(432) & ChrW(417) & "i" & " n" & ChrW(259) & "m", "m" & ChrW(432) & ChrW(417) & "i" & " l" & ChrW(259) & "m", "m" & ChrW(7897) & "t " & "m" & ChrW(432) & ChrW(417) & "i", "m" & ChrW(432) & ChrW(7901) & "i", "m" & ChrW(432) & ChrW(417) & "i" & " m" & ChrW(7897) & "t", "m" & ChrW(432) & ChrW(417) & "i" & " m" & ChrW(7889) & "t", ChrW(194) & "m ", ".", " " & ChrW(273) & ChrW(7891) & "ng")
    If Str = "000000000000000000" Then
        VND = MyArray(0)
        GoTo ExitF
    End If
    For i = 1 To Len(Str)
        If Left(Str, i) <> 0 And CLng(Mid(Str, (Int((i + 2) / 3) - 1) * 3 + 1, 3)) <> 0 Then
            VND = VND & MyArray(CLng(Mid(Str, i, 1))) & MyArray(-(9 + i / 3) * (i Mod 3 = 0) - (15 + i Mod 3) * (i Mod 3 <> 0))
        ElseIf i = 9 And CLng(Mid(Str, 7, 3)) = 0 And CLng(Left(Str, 6)) <> 0 Then
            VND = Left(VND, Len(VND) - 2) & " " & MyArray(12)
        End If
    Next i
    VND = Trim(Replace(Replace(Replace(Replace(Replace(Replace(VND, MyArray(18), MyArray(15)), MyArray(19), MyArray(20)), MyArray(21), MyArray(22)), MyArray(23), MyArray(24)), MyArray(25), MyArray(26)), MyArray(27), MyArray(28)))
    If Number < 0 Then
        VND = MyArray(29) & VND
    End If
ExitF:
    VND = Trim(Replace(UCase(Left(VND, 1)) & Mid(VND, 2) & "  ", ",  ", "")) & MyArray(30)
End Function

Function BoDau(ByVal noiDung As String) As String
    Dim i As Long
    Dim iMa As Long
    Dim sChar As String
    Dim k_dau As String
    BoDau = AscW(noiDung)
    For i = 1 To Len(noiDung)
        sChar = Mid(noiDung, i, 1)
        If sChar <> "" Then
            iMa = AscW(sChar)
        End If
        Select Case iMa
            Case 273:   k_dau = k_dau & "d"
            Case 272:   k_dau = k_dau & "D"
            Case 224, 225, 226, 227, 259, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, 7861, 7863:   k_dau = k_dau & "a"
            Case 192, 193, 194, 195, 258, 7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854, 7856, 7858, 7860, 7862:   k_dau = k_dau & "A"
            Case 232, 233, 234, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879:                                     k_dau = k_dau & "e"
            Case 200, 201, 202, 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878:                                     k_dau = k_dau & "E"
            Case 236, 237, 297, 7881, 7883:         k_dau = k_dau & "i"
            Case 204, 205, 296, 7880, 7882:         k_dau = k_dau & "I"
            Case 242, 243, 244, 245, 417, 7885, 7887, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907:   k_dau = k_dau & "o"
            Case 210, 211, 212, 213, 416, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906:   k_dau = k_dau & "O"
            Case 249, 250, 361, 432, 7909, 7911, 7913, 7915, 7917, 7919, 7921:           k_dau = k_dau & "u"
            Case 217, 218, 360, 431, 7908, 7910, 7912, 7914, 7916, 7918, 7920:           k_dau = k_dau & "U"
            Case 253, 7923, 7925, 7927, 7929:       k_dau = k_dau & "y"
            Case 221, 7922, 7924, 7926, 7928:       k_dau = k_dau & "Y"
            Case Else:  k_dau = k_dau & sChar
        End Select
    Next
    BoDau = k_dau
End Function
2_5.png
Đây là 2 hàm tự tạo, hàm thứ nhất VND là hàm đọc số thành chữ của tác giả @huuthang_bd còn hàm thứ hai BoDau dùng để loại bỏ dấu tiếng việt (Hàm này của thành viên nào trên diễn đàn viết mình quên mất). Cả 2 hàm chỉ sử dụng được bảng mã Unicode dựng sẳn nhé các thành viên.

Bây giờ ta trở lại giao diện Excel bằng cách nhấn tổ hợp phím Alt + F11. Trên giao diện Excel ta thử 2 hàm vừa tạo xem nó có hoạt động không bằng cách nhập vào ô A1 số 28719, trên ô A2 mình gõ và dòng chữ: Xin chào các thành viên giải pháp Excel.

Tại ô C1 mình gõ công thức như sau: =VND(A1) và Enter xem sẽ thấy giá trị tại ô C1 là: Hai mươi tám nghìn, bảy trăm mười chín.

Tại ô C2 mình gõ công thức như sau: =BoDau(A2) và nhấn Enter xem sẽ thấy giá trị tại ô C2 là: Xin chao cac thanh vien giai phap Excel.
2_7.png
Hai hàm đã hoạt động tương đối ổn. Ta tiếp tục nhấn Alt + F11 để vào lại của sổ Microsoft Visual Basic For Application.

Nháy chọn Module mdlSub và thêm code này vào.
Mã:
Option Explicit
Private Function CheckSHselect() As Boolean
    Dim iCount As Integer, sh As Worksheet
    For Each sh In ActiveWorkbook.Worksheets
        If sh.Visible = xlSheetVisible Then iCount = iCount + 1
    Next sh
    CheckSHselect = ActiveWindow.SelectedSheets.Count = iCount
End Function
Sub HideSheet()       'An tat ca cac sheet dang chon
    Dim sh As Worksheet
    If CheckSHselect Then
        Application.Assistant.DoAlert "Thông báo!", "B" & ChrW(7841) & "n không " & ChrW(273) & ChrW(432) & ChrW(7907) & "c phép " & _
                                        ChrW(7849) & "n t" & ChrW(7845) & "t c" & ChrW(7843) & " các Sheet có trong b" & ChrW(7843) & "ng tính." _
                                        , msoAlertButtonOK, msoAlertIconCritical, msoAlertDefaultFirst, msoAlertCancelDefault, False
    Else
        For Each sh In ActiveWindow.SelectedSheets
            sh.Visible = xlSheetVeryHidden
        Next sh
    End If
End Sub

Sub UnhideSheet()       'Hien thi tat ca cac sheet dang an
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Worksheets
        If sh.Visible = xlSheetVeryHidden Then sh.Visible = xlSheetVisible
    Next sh
End Sub
Trong code vừa thêm váo có 2 sub HideSheet và UnHideSheet. Sub HideSheet dùng để Ẩn tất cả các sheet đang chọn (Ẩn chế độ siêu ẩn, sẽ không thể Unhide bằng cách thông thường). Sub UnHideSheet sẽ cho hiển thị lại tất cả các sheet ở chế độ siêu ẩn.
Mình có thể test bằng cách chọn nhiều sheet cùng lúc. Ở đây tôi tạo thêm 2 sheet nửa và chọn Sheet1 và Sheet3 như hình.
2_8.png
Bây giờ ta nhấn tổ hợp phím Alt + F8 để hiển thị của sổ Macro lên nháy chọn HideSheet và nháy nút Run.
2_9.png
Sau khi nháy nút Run xong thì trên giao diện Excel hiện tại chỉ còn lại 1 sheet duy nhất chưa ẩn là sheet2. Bây giờ ta cho hiển thị trở lại bằng cách nhấn tổ hợp phím Alt + F8 lần nửa và bây giờ ta nháy chọn UnhideSheet và nháy nút Run.

Ta vừa hoàn thành việc tạo thủ tục ẩn và hiển thị Sheet, nhưng trên thực tế có khi người dùng chỉ muốn hiển thị một vài sheet chứ không hiển thị hết các sheet. Vậy ta sẽ tạo UserForm để cho phép người dùng tùy chọn một vài sheet để hiển thị. Nhấn Alt + F11 để vào lại giao diện Microsoft Visual Basic For Application.
Tao tạo UserForm mới bằng cách vào menu Inser chọn lệnh UserForm
2_10.png
Ta được giao diện UserForm như sau:
2_11.png
Tại mục Name ta xóa chữ UserForm1 và đổi tên lại thành frmUnhide, mục Caption ta cũng xóa chữ Userform1 và đổi lại thành Unhide Sheet.
Ta tiếp tục thêm Control ListBox vào UserForm và đặt tên là listSheet, thay đổi thuộc tín MultiSelect của ListBox là fmMultiSelectMulti như hình dưới.
2_12.png
Ta tiếp tục thêm 2 control Commanbutton vào UserForm và đặt tên lần lượt là cmdOK và cmdHelp, phần caption thì cmdOK là Hiển thị sheet, cmdHelp là Hướng dẫn.
Nháy đúp chuột vào UserForm và xóa tất cả code có trong đó và thay bằng code sau:
Mã:
Option Explicit
Private Sub cmdOk_Click()
    Dim itemp As Integer
    For itemp = 0 To listSheet.ListCount - 1
        If listSheet.Selected(itemp) Then
            ActiveWorkbook.Worksheets(listSheet.List(itemp)).Visible = xlSheetVisible
        End If
    Next itemp
    Unload Me
End Sub

Private Sub UserForm_Initialize()
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Worksheets
        If sh.Visible = xlSheetVeryHidden Then listSheet.AddItem sh.Name
    Next sh
End Sub
Code trên chưa viết cho nút lệnh Hướng dẫn (Phần này để sau sẽ hướng dẫn viết code mở file Help). Bây giờ ta có thể chạy UserForm để xem thử.
Trên hình là danh sách các sheet đã được ẩn bằng Sub HideSheet ở trên, những sheet nào không ẩn (đang hiển thị) sẽ không được liệt kê ở đây. Ta chọn thử Sheet 3 và nháy nút Hiển thị sheet để xem kết quả, có thể chọn cùng lúc nhiều sheet để hiển thị.
Ta trở lại Module mdlSub và xóa đoạn code sau:
Mã:
Sub UnhideSheet()       'Hien thi tat ca cac sheet dang an
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Worksheets
        If sh.Visible = xlSheetVeryHidden Then sh.Visible = xlSheetVisible
    Next sh
End Sub
Đây là đoạn code cho hiển thị các sheet đã ẩn nhưng chúng ta vừa tạo xong UserForm cho phép người dùng chọn Sheet cần hiển thị rồi nên code này sẽ bị thừa khong cần thiết.

Vậy là ta vừa tạo xong 2 hàm (VND và BoDau), 1 thủ tục HideSheet và 1 UserForm. Add-Ins hiện giờ vẫn chưa thể hoạt động ta tạm thời để đây bài sau sẽ hướng dẫn cách tạo nút lệnh Ribbon để người dùng tương tác với thủ tục và UserForm.
 
3. Tạo nút lệnh trên Ribbon của Add-Ins:

Ở bài trước chúng ta đã tạo được 2 hàm, 1 thủ tục và 1 UserForm, ở bài này ta sẽ tạo 3 nút lệnh trên Ribbon, 1 nút dùng để chạy thủ tục, 1 nút mở UserForm và nút còn lại dùng để mở File Help (File hướng dẫ sử dụng Add-Ins).
- Trước hết ta mở chức năng hiển thị phần mở rộng của tệp tin như sau:
Mở Windows Explorer và chọn Tools, chọn lệnh Folder option (Xem hình mình chụp từ Windows 7).
3_1.png
Tiếp theo bạn bỏ chọn mục Hide extensions for known file types và nháy OK.
3_2.png
Nếu máy dùng Windows 10 thì có thể thực hiện như hình dưới.
3_3.png
Tiếp theo ta mở thư mục chứa tệp tin Excel_Add_Ins.xlsm đã tạo ở bài 2. Nháy phải chuột vào tệp tin này và chọn Rename.
3_4.png
Thêm vào phía sau tệp tin phần .zip (vậy tên tệp tin đầy đủ là Excel_Add_Ins.xlsm.zip) và nhấn Enter.
3_5.png
- Ta nháy đúp chuột vào tệp tin Excel_Add_Ins.xlsm.zip, chương trình Winrar sẽ mở tệp tin Excel_Add_Ins.xlsm.zip, ta tiếp tục nháy đúp chuột vào thư mục _rels như hình dưới.
3_6.png
- Tiếp theo ta nháy chọn tệp .rels và nháy chuột vào nút Extract To (xem hình dưới).
3_7.png
Chọn thư mục lưu tệp .rels và nháy OK (xem hình dưới).
3_8.png
- Vào thư mục vừa giải nén tệp .rels, nhấp nút phải chuột vào tệp tin này và chọn Edit with Notepad++ để mở tệp này lên.
3_9.png
Ta điều chỉnh tệp .rels giống như hình phía dưới (mục đích cho dễ nhìn).
3_10.png
Thêm dòng này (Áp dụng cho office 2007 – 2010):
<Relationship Id="rId4" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>
Hoặc nếu muốn áp dụng cho Office 2013 trở về sau thì thêm dòng này:
<Relationship Id="rId4" Type="http://schemas.microsoft.com/office/2007/relationships/ui/extensibility" Target="customUI/customUi14.xml"/>
Vào phía trước </Relationships> (dòng cuối cùng). Hình dưới sau khi đã thêm vào dòng code mới.
3_11.png
Ta nhấn tổ hợp phím Ctrl + S để lưu file .rels lại, sau đó đóng Notepad++.
(Do diễn đàn không cho phép thêm hình nửa nên tôi tạm ngắt sang bài viết kế)
 
Lần chỉnh sửa cuối:
Trở lại giao diện Winrar (Vẫn đang chọn mục _rels), nháy nút Add, chọn tệp .rels và nháy OK, nháy OK thêm lần nửa.
3_12.png
Trên giao diện Winrar nháy nút mũi tên trở ra thư mục ngoài (xem hình).
3_13.png
Nháy nút phải chuột vào vùng trống trong cửa sổ Winrar và chọn lệnh Create a new folder gõ tên thư mục mới là customUI, nhấn Enter.
3_14.png
3_16.png
- Tiếp theo ta mở trình soạn thảo Notepad++ lên và gõ vào đoạn mã XML sau (Dùng cho Office 2007 – 2010):
Mã:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon >
    <tabs>
      <tab id="tab0" label="Công cụ cho Excel" >
        <group id="grp0" label="Nhóm ứng dụng" imageMso="AccountSettings" >
          <button id="btn1" size="large" label="Ẩn sheet" screentip="Chức năng ẩn sheet" supertip="Dùng chức năng này để ẩn tất cả các sheet đang chọn" imageMso="ShapesSubtract" onAction="OnActionButton" />
           <button id="btn2" size="large" label="Hiển thị sheet ẩn" screentip="Chức năng hiển thị sheet" supertip="Dùng chức năng này để hiển thị các sheet đang ẩn" imageMso="ShapesUnion" onAction="OnActionButton" />
           <button id="btn3" size="large" label="Hướng dẫn sử dụng" screentip="Chức năng trợ giúp" supertip="Dùng chức năng này để mở file hướng dẫn sử dụng Add-Ins" imageMso="FunctionsLogicalInsertGallery" onAction="OnActionButton" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
Nếu muốn dùng cho Office 2013 trở về sau thì thay dòng
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
Thành dòng
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
Sau đó lưu file này với tên customUI.xml (nếu dùng cho office 2010 trở về trước) hoặc customUI14.xml (nếu dùng cho office 2013 trở về sau).
Ta có thể tham khảm về cách tạo các nút lệnh bằng mã XML theo đường link sau:
https://bettersolutions.com/vba/ribbon/controls.htm
Tham khảo các biểu tượng cho nút lệnh ở file Office2010_RibbonIcons.xlsm kèm theo bên dưới.
Trở lại giao diện Winrar và nháy đúp chuột vào thư mục customUI, trong thư mục customUI nháy nút Add, chọn tệp tin customUI.xml vừa tạo và nháy OK, nháy OK lần nửa. Sau đó đóng Winrar lại.
3_17.png
- Vào thư mục chứa tệp tin Excel_Add_Ins.xlsm.zip, nháy nút phải chuột vào tệp tin này và chọn Rename, bỏ phần mở rộng .zip đi (tên tin sau khi đổi tên là Excel_Add_Ins.xlsm).
- Nháy đúp chuột vào tệp tin Excel_Add_Ins.xlsm để mở lên (Lúc này các nút lệnh chưa thể hoạt động), nhấn tổ hợp phím Alt + F11 để vào cửa sổ Microsoft Visual Basic For Application, lúc này ta thêm vào một Module mới và đặt tên là mdlCallbacks (Xem cách thêm Module ở bài 2). Thêm đoạn code này vào Module mdlCallbacks.
Mã:
Option Explicit
Public Sub OnActionButton(control As IRibbonControl)
   If Application.Workbooks.Count = 0 Then Exit Sub
    Select Case control.ID
        Case "btn1":    Call HideSheet
        Case "btn2":    frmUnhide.Show
        Case "btn3":    MsgBox "Ban dang chuan bi mo file Help", vbInformation
    End Select
End Sub
3_18.png
Nhấn Ctrl + S để lưu đoạn code lại, nhấn Alt + F11 để trở lại giao diện Excel, bây giờ nhìn trên thanh Ribbon ta đã thấy thẻ Tab có tên Công cụ cho Excel, nháy chuột vào thẻ này ta sẽ thấy 3 nút lệnh như hình dưới.
3_19.png
- Thử nháy chuột vào nút lệnh Ẩn sheet xem đã có tác dụng chưa, tương tự nút lệnh Hiển thị sheet ẩn xem có mở UserForm lên không? Riêng nút lệnh Hướng dẫn sử dụng chỉ hiển thị một thông báo (Do chúng ta chưa tạo file Help nên tạm thời để vậy).
- Chúng ta vừa tạo xong 3 nút lệnh trên Ribbon để điều khiển các lệnh trong Add-Ins, tạm thời Add-Ins đã có thể hoạt động nhưng chưa hoàn thiện, bài tiếp theo chúng ta sẽ tiến hành tạo file help cho Add-Ins.
 

File đính kèm

  • Excel_Add_Ins.xlsm
    31.2 KB · Đọc: 56
  • Office2010_RibbonIcons.xlsm
    92.4 KB · Đọc: 58
Lần chỉnh sửa cuối:
4. Tạo hướng dẫn sử dụng Add-Ins:
Để dễ cho việc quản lý file ta nên tạo thư mục để chứa các file HTML (File hướng dẫn để tạo ra file Help). Cụ thể tôi sẽ tạo thư mục có tên Help trong ô đĩa C, và các nội dung sau tôi sẽ đề cập đến nó và sẽ không nhắc lại trong lần nói phía dưới.
Trước khi tạo file help bằng phần mềm WinCHM Pro các thành viên chú ý là: Để gõ được tiếng việt thì ta điều chỉnh bảng mã của Unikey là Unicede tổ hợp.
4_1.png

Để tạo file help ta khởi động phần mềm WinCHM Pro và chọn như hình dưới, nháy OK.
4_2.png
Gõ tiêu đề file help và đường dẫn lưu dự án như hình dưới và nháy OK.
4_3.png
Tiếp theo ta cấu hình cho file help như sau: Vào Menu Tool và chọn Project Setting…
4_4.png
Trên giao diện Project Setting, thẻ General mục Editor encoding chọn Vietnamese; Windows-1258.
4_5.png
Nháy chọn thẻ HTML Help và thực hiện như hình, xong nháy OK.
4_6.png
Trên giao diện WinCHM Pro nháy mục MSN Style.
4_7.png
Nháy chuột vào vùng soạn thảo HTML (mục XXXX Help) xóa chữ XXXX Help và gõ vào nội dung mới là: Hướng dẫn sử dụng Add-Ins.
4_8.png
Tương tự bạn có thể thay đổi đội dung cuối trang Copyright © 2019. All rights reserved.(To change the copyright info or the title, just edit them in template.). Xong nháy nút Save để lưu lại thay đổi (Xem hình trên).
- Tiếp theo nháy nút phải chuột vào New Item1 và chọn Change title.

4_9.png
Gõ nội dung mới cho Item là Giới thiệu Add-Ins và nhấn Enter.
Vào vùng soạn thảo và gõ nôi dung cho file giới thiệu như hình dưới, tất cả các thao tác soạn thảo, định dạng văn bản giống như phần mềm soạn thảo văn bản Word.

4_10.png
Khi soạn thảo xong nội dung hướng dẫn ta nháy nút Save, chọn đường dẫn C:\Help, mục file name ta gõ tên cho trang HTML là GT.htm, xong nháy OK (Xem hình trên).
Tiếp theo ta nháy nút phải chuột vào mục Folder1 và chọn Change title.

4_11.png
Gõ tên mới cho Folder là Hướng dẫn sử dụng, xong nhấn Enter.
Tiếp tục nháy nút phải chuột vào mục New Item2 và chọn Change title.
Gõ tên mới cho Item2 là Ẩn sheet, xong nhấn Enter.
(Lại hết phép gửi hình)
 
Tiếp tục nháy nút phải chuột vào mục New Item3 và chọn Change title.
Gõ tên mới cho Item3 là Hiển thị sheet ẩn, xong nhấn Enter.
Kết quả sau khi đổi tên các Item và Folder.

4_14.png
Ngoài ra chúng ta còn có thể thêm, xóa các Folder hoặc Item bằng cách sử dụng các nút lệnh được đóng khung đỏ như hình trên (phần này các thành viên có thể khám phá nhiều hơn).
- Tiếp theo ta nháy mục Ẩn sheet và soạn thảo nội dung cho mục này như hình.

4_15.png
Nháy nút Save để lưu nội dung hướng dẫn mục Ẩn Sheet và đặt tên là Hidesheet.htm.
4_16.png
Một điều cần lưu ý là phải lưu nội dung HTML trước khi chèn hình vào.
- Tiếp theo ta nháy mục Hiển thị sheet ẩn và gõ nội dung hướng dẫn như hình.
4_17.png
Lưu trang lại với tên UnhideSheet.htm (Nhớ tên này để sang bài 5 mình sẽ dùng code VBA mở file Help và nhảy đến trang này).
4_18.png
Cuôi cùng ta nhấy Ctrl+S để lưu dự án lại theo các bước như hình dưới.
4_19.png
Đến đây là gần như ta đã tạo xong file Help, việc cuối cùng là ra lệnh cho WinCHM Pro xuất file chm là xong. Trên giao diện WinCHM Pro nháy chuột vào nút Build, một giao diện xuất hiện mình cứ để nguyên như mặc định và nháy nút Start.
4_20.png
Đợi cho ứng dụng chạy và tạo file Help.
4_21.png
Khi tạo xong thì tự động WinCHM Pro sẽ mở file help cho mình. Đây là kết quả file Help vừa tạo được.
4_22.png
Vậy là ta vừa tạo xong file Help hướng dẫn sử dụng Add-Ins theo đúng chuẩn Help của Windows. File Help sau khi tạo ra theo mặc định sẽ nằm tại đường dẫn C:\Help_output\HTML Help\Help.chm
Bài tiếp theo tôi sẽ hướng dẫn các thành viên mở file Help từ ứng dụng của VBA và nhảy đến một mục bất kỳ trong hướng dẫn.
(Các thành viên có thể tải thư mục Help về xem)
 

File đính kèm

  • Help.rar
    56.7 KB · Đọc: 36
Trở lại giao diện Winrar (Vẫn đang chọn mục _rels), nháy nút Add, chọn tệp .rels và nháy OK, nháy OK thêm lần nửa.
Đây là cách tạo ribbon không dùng các công cụ của bên thứ ba để thêm các controls - tạo "bằng tay".

Theo tôi nếu là tạo "bằng tay" thì không ai làm thế. Làm bằng tay như kiểu đó khác gì lội suối trèo đèo thay vì đi ô tô trên xa lộ.

Tải về và cài đặt Custom UI Editor thôi. Lúc đó viết code XML trong Editor hoặc copy / paste từ nơi khác vào Editor. Tạo "khung" các callback cũng trong Editor luôn. Sau đó chỉ copy / paste các callback vào Module trong VBA. Còn tự viết cái "khung" hàng chục callback vào module có lẽ là con đường đau khổ. Nếu dùng Custom UI Editor thì nó sẽ tạo cho các callback. Còn dùng cách của tác giả thì ngoài việc phải tự gõ các callback trong module thì trước hết phải đọc để biết dạng các callback kia thế nào. Tác giả chỉ cho 1 ví dụ về OnActionButton với 1 tham số kiểu interface IRibbonControl. Nhưng callback có vô vàn loại, phải đọc để biết chúng có những tham số gì, kiểu ra sao. Trong khi đó Custom UI Editor tự tạo cho ta các callback.

Nếu cố tình làm bằng tay không dùng Custom UI Editor mà dùng WinRAR thì cũng không phải chọn con đường đau khổ như này: đổi tên tập tin thành ZIP -> mở bằng WinRAR -> thực hiện các thao thác -> đóng WinRAR -> đổi lại tên tập tin. Chỉ cần: phải chuột trên tập tin và chọn Open With -> chọn WinRAR -> thực hiện các thao thác -> đóng WinRAR. Thế thôi.
 
Lần chỉnh sửa cuối:
Tải về và cài đặt Custom UI Editor thôi. Lúc đó viết code XML trong Editor hoặc copy / paste từ nơi khác vào Editor. Tạo "khung" các callback cũng trong Editor luôn. Sau đó chỉ copy / paste các callback vào Module trong VBA. Còn tự viết cái "khung" hàng chục callback vào module có lẽ là con đường đau khổ. Nếu dùng Custom UI Editor thì nó sẽ tạo cho các callback. Còn dùng cách của tác giả thì ngoài việc phải tự gõ các callback trong module thì trước hết phải đọc để biết dạng các callback kia thế nào. Tác giả chỉ cho 1 ví dụ về OnActionButton với 1 tham số kiểu interface IRibbonControl. Nhưng callback có vô vàn loại, phải đọc để biết chúng có những tham số gì, kiểu ra sao. Trong khi đó Custom UI Editor tự tạo cho ta các callback.
Da em cũng biết cách này, nhưng cái Add-Ins chỉ sử dụng 3 button nên em cố tình lách sang cách tạo bằng tay để hướng dẫn nhẹ hơn. Vì em nghĩ (Cá nhân nghĩ thôi) ai viết Add-Ins thì chắc chắn sẽ tìm hiểu về cách tạo các nút lệnh trên Ribbon, đây chỉ mô phỏng cách đơn giản nhất để người xem thực hiện theo nhằm tạo ra 1 sản phẩm cá nhân cho riêng mình. Còn nếu tìm hiểu sâu hơn thì chắc em cũng chưa đủ khả năng để hướng dẫn cách tạo từng control 1, em nghĩ vấn đề Ribbon chắc phải có một chuyên đề nhiều trang viết về nó, sách của anh @PhanTuHuong dành hẳn một chương (khong 30 trang để nói về nó) nhưng chỉ đề cập đến một vài control thôi. Mà nói thiệt về Ribbon em còn non xanh lắm ạ.
Nếu cố tình làm bằng tay không dùng Custom UI Editor mà dùng WinRAR thì cũng không phải chọn con đường đau khổ như này: đổi tên tập tin thành ZIP -> mở bằng WinRAR -> thực hiện các thao thác -> đóng WinRAR -> đổi lại tên tập tin. Chỉ cần: phải chuột trên tập tin và chọn Open With -> chọn WinRAR -> thực hiện các thao thác -> đóng WinRAR. Thế thôi.
Cái này nào giờ em chưa thử, nhưng thấy anh nói em mở thử vẫn được, mở ngon luôn à. Cảm ơn anh vì một kiến thức mới.
 
5. Mở file Help từ Add-Ins:
Ta tiếp tục tạo thêm một thư mục trong đĩa C với tên là Add-Ins, sau đó copy file Excel_Add_Ins.xlsm (File Add-Ins đã tạo ở bài 2) và file Help.chm (File hướng dẫn sử dụng đã tạo ở bài 4).
5_1.png
Mở file Excel_Add_Ins.xlsm lên và nhấn tổ hợp phím Alt+F11 để vào cửa sổ Microsoft Visual Basic For Application. Nháy đúp chuột vào Module mdlSub, sau đó thêm vào phía dưới Option Explicit đoạn code sau:
Mã:
#If VBA7 Then
Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#Else 
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If
5_2.png
Nháy đúp chuột vào Module mdlCallbacks và xóa dòng code:
Mã:
MsgBox "Ban dang chuan bi mo file Help", vbInformation
Thay thế dòng code này bằng dòng code sau:
Mã:
Shell "hh.exe  " & """" & ThisWorkbook.Path & "\Help.chm" & """", vbMaximizedFocus
5_3.png
Nhất tổ hợp phím Alt+F11 để trở lại giao diện Excel, giờ ta thử nháy chuột vào nút lệnh Hướng dẫn sử dụng (Lệnh này nằm trong Thẻ Công cụ cho Excel) xem nó có mở được file Help hay chưa? Nếu nó mở được file Help coi như đã thành công một phần.
Ta tiếp tục nhấn tổ hợp phím Alt+F11 để vào cửa sổ Microsoft Visual Basic For Application. Nháy đúp chuột vào UseForm frmUnhide, tiếp tục nháy đúp chuột vào nút lệnh Hướng dẫn trên UserForm. Sau đó ta thêm đoạn code này vào.
Mã:
Shell "hh.exe  " & """" & ThisWorkbook.Path & "\Help.chm ::/UnhideSheet.htm" & """", vbMaximizedFocus
Chú ý chổ UnhideSheet.htm (Đây là tên trang HTML mà tôi đã có nhắc tới ở bài 4 lúc tạo file Help).
5_4.png
Bây giờ ta mở UseForm frmUnhide lên và nháy chuột vào nút lệnh Hướng dẫn xem nó có mở file Help và nhảy tới mục Hiển thị sheet ẩn hay không? (Nếu làm đúng tôi nghĩ nó sẽ nhảy đến chổ như mong đợi).
Vậy là ta đã liên kết được giữa Add-Ins và file Help rồi, việc còn lại là ta đặt mật khẩu bảo vệ code VBA nửa là xong.
Nháy nút phải chuột vào VBAProject(Excel_Add_Ins.xlsm) và chọn lệnh VBAProject Properties

5_5.png
Chọn thẻ Protection, đánh dấu chọn mục Lock project for viewing, Password và Confirm Passwword bạn đặt mật khẩu tùy ý (nhưng phải giống nhau), ở đây tôi đặt là GPE (Lưu ý: Mật khẩu này chủ yếu là chặn người ngay, còn kẻ gian thì bẻ cái một)
5_6.png
Tiếp tục nhấn tổ hợp phím Alt+F11 để trở lại giao diện Excel, vào File chọn Save As và Computer, chọn tiếp Browse.
5_7.png
Mục Save as type chọn Excel Add-Ins (*.xlam), chọn thư mục lưu file là c:\Add-Ins, đặt tên file ở mục File name là: Excel_Add_Ins.xlam, xong nháy nút Save.
5_8.png
Sau khi Save xong đóng Excel lại, vào thư mục C:\Add-Ins sẽ có 3 tệp tin như sau:
5_9.png
File Excel_Add_Ins.xlsm bạn có thể xóa đi hoặc copy sang nơi khác để lưu trữ, Add-Ins của chúng ta chỉ cần 2 file Excel_Add_Ins.xlam và file Help.chm là được.
Tôi đã hướng dẫn xong phần liên kết giữa Add-Ins và file help, bài sau tôi sẽ hướng dẫn dùng phần mềm Inno Setup để tạo file đóng gói cài đặt Add-Ins này sang máy tính người dùng khác.
 

File đính kèm

  • Add-Ins.rar
    80.3 KB · Đọc: 28
6. Tạo file cài đặt cho Add-Ins

Chúng ta sẽ tiếp tục với bài viết cuối cùng là tạo file cài đạt cho Add-Ins.
Trước hết hãy tải file Add-Ins.rar (Đường link phía dưới) về và giải nén tệp tin vào ổ đĩa C trong máy tính. Khi giải nén xong thì sẽ được thư mục Add-Ins trong đĩa C gồm 3 tệp tin: Excel_Add_Ins.xlam, help.chm và tệp tin Setup Add-Ins.iss (Đây là file tạo Setup của Inno setup).
6_1.png

Nháy đúp chuột vào tệp tin Setup Add-Ins.iss, phần mềm Inno Setup sẽ mở tệp tin này lên.
6_2.png
Trên giao diện này ta có thể điều chỉnh các mục sau cho phù hợp.
AppName: Tên ứng dụng cài đặt.
AppVersion: Phiên bản ứng dụng.
AppVerName: Tên ứng dụng kèm phiên bản của ứng dụng.
DefaultDirName: Thư mục mặc định khi cài ứng dụng. Chổ {autopf}\ để nguyên, chỉ được phép sửa chổ ToolsExcel thôi nhé.
VersionInfoVersion: Mục này có thể không quan tâm.
DefaultGroupName: Tên nhóm mặc định khi tạo trong Program file.
OutputDir: Đường dẫn đến thư mục lưu file khi tạo xong file Setup.
OutputBaseFilename: Tên file setup khi tao ra.
Những phần còn lại cứ để mặc định. Nếu muốn tìm hiểu thêm về các lệnh trong Inno setup có thể tham khảo ở link sau: http://caulacbovb.com/forum/viewtopic.php?t=775
Trên giao diện Inno setup nhấn tổ hợp phím Ctrl + F9 hoặc vào Menu Build và chọn Compile.
6_3.png
Đợi cho Inno Setup Build xong và sẽ thông báo hoàn thành như hình dưới.
6_4.png
Ta vào thư mục C:\Add-Ins sẽ thấy xuất hiện file ToolsExcel_Setup.exe, đây chính là file cài đặt Add-Ins của mình.
6_5.png
Khi muốn chia sẻ Add-Ins này cứ việc copy file ToolsExcel_Setup.exe cho người dùng để họ cài vào máy là xong.
Để kiểm tra thành quả hãy nháy đúp chuột vào tệp tin ToolsExcel_Setup.exe và cài đặt thử. Khi cài xong và mở Excel lên để kiểm tra, có thể mở file mới và test thử hàm VND, BoDau và các lệnh trong đó có hoạt động không.
OK, vậy là tôi đã hướng dẫn xong các bước để tạo một Add-Ins hoàn chỉnh để có thể chia sẻ Add-Ins mới mọi người. Nếu trong quá trình thực hiện có chổ nào chưa được hoặc có những góp ý gì có thể nêu ở đây, tôi sẽ trả lời trong khả năng và hiểu biết của mình.
 

File đính kèm

  • Add-Ins.rar
    81.8 KB · Đọc: 72
Chào các thành viên diễn đàn GPE. Trong thời gian vừa qua có một số thành viên GPE nhắn tin riêng hoặc mail riêng cho tôi xin chia sẻ cách tạo Add-Ins cũng như cách tạo file cài đặt Add-Ins để dùng ở một máy tính bất kỳ mà không phải cài đặt thủ công.

Hôm nay tôi xin chia sẻ tất cả những gì mình biết cũng như dùng tất cả những công cụ cần thiết để tạo một Add-Ins hoàn chỉnh sau đó tạo file cài đặt (đóng gói Add-Ins) để dùng cho máy tính khác.

Trước tiên xin các thành viên bỏ qua cho những gì mình viết có sai xót, hoặc chưa chuẩn lắm về kiến thức tin học (những từ ngữ chuyên nghành). Phần lớn đây là kiến thức mình học mót được thôi.

Tôi sẽ trình bày từng bước 1 những vấn đề có liên quan đến việc tạo ra một add-ins hoàn chỉnh và sẽ trình bày những cái gọi là cơ bản chứ không khai thác nâng cao từng chi tiết một. Cụ thể tôi sẽ có 6 bài viết như sau:

  1. Những phần mềm cần thiết để tạo ra Add-Ins (Có thể sẽ không cần thiết cho những ai đã rành về việc tạo Add-Ins vì họ có thể sẽ đi tắt hoặc dùng ứng dụng khác thay thế).
  2. Viết hàm và thủ tục cho tiện ích (Chỉ hướng dẫn viết 2 hàm và 2 thủ tục của các thành viên trong diễn đàn).
  3. Tạo Ribbon tương tác (Chỉ hướng dẫn cách tạo nút lệnh để gọi thủ tục trong Add-ins).
  4. Tạo hướng dẫn sử dụng Add-Ins (Viết một file hướng dẫn sử dụng Add-ins dạng file help chm giống như file help của Windows).
  5. Mở file Help từ Add-Ins (Từ ứng dụng Add-Ins có thể mở file Help và nhảy đến chổ người dùng cần xem).
  6. Tạo file cài đặt cho Add-Ins (Sử dụng Inno Setup để tạo một File Add-Ins tự động cài đặt vào trong máy tính cá nhân người dùng).

Hôm nay tôi sẽ bắt đầu ở bài viết thứ nhất.
1. Những phần mềm cần thiết:
Dưới đây là 4 phần mềm tôi thường dùng để tạo một Add-Ins hoàn chỉnh (Có thể các thành viên khác không dùng giống tôi).
  1. Notepad++: Đây là phần mềm dùng để soạn thảo file XML nhằm tạo nút lệnh trên Ribbon cho Add-Ins, có thể dùng Notepad có sẳn trong Windows cũng được.
  2. WinCHMPro: Phần mềm dùng để tạo file hướng dẫn sử dụng add-ins dạng chm giống như các file help của Windows.
  3. Winrar: Phần mềm dùng để giải nén tệp tin Excel trích xuất file XML.
  4. Inno Setup: Phần mềm dùng để tạo file cài đặt Add-Ins.
Đây là 4 phần mềm tôi nghĩ nó sẽ là cần thiết cho ai có nhu cầu tạo Add-Ins. Những phần mềm này các thành viên có thể tải theo đường link phía dưới, tôi sẽ không đi sâu vào vấn đề cài đặt cũng như sử dụng nó, nếu các thành viên có nhu cầu có thể tham khảo hướng dẫn cài đặt và sử dụng có thể tìm kiếm trên Google.

Em cảm ơn anh @giaiphap .
Nhờ anh xem giúp file link anh gửi download nó báo lỗi như hình dưới:

1590381251589.png
 
Da em cũng biết cách này, nhưng cái Add-Ins chỉ sử dụng 3 button nên em cố tình lách sang cách tạo bằng tay để hướng dẫn nhẹ hơn. Vì em nghĩ (Cá nhân nghĩ thôi) ai viết Add-Ins thì chắc chắn sẽ tìm hiểu về cách tạo các nút lệnh trên Ribbon, đây chỉ mô phỏng cách đơn giản nhất để người xem thực hiện theo nhằm tạo ra 1 sản phẩm cá nhân cho riêng mình.
Tôi không nói về tạo controls, tức viết nội dung <customUI ...> ... </customUI>, bởi muốn viết được thì phải đọc tài liệu. Tôi chỉ so sánh với giả thiết là ta đã có tập tin XML.

Với cách của bạn thì phải: thêm bằng tay <Relationship Id ... />, và thêm nội dung XML. Sau cùng phải tự gõ nội dung vd. 10 callback vào module VBA. Trước đó phải đọc tài liệu để biết 10 callback kia có dạng như thế nào, có mấy tham số, kiểu tham số như thế nào. Tất nhiên dùng Custom UI Editor cũng phải đọc để hiểu ý nghĩa của các tham số, nhưng làm như bạn thì mỗi khi tạo menu lại phải kiểm tra xem dạng của callback như thế nào. Và phải tự gõ 10 callback trong module VBA. Dùng Custom UI Editor bạn bỏ được các khâu:
- thêm bằng tay <Relationship Id ... />
- phải tự gõ nội dung vd. 10 callback vào module VBA - chỉ nhấn nút trong Custom UI Editor để nó tạo callback, sau đó copy / paste vào module VBA.

Đấy là tôi chưa nói tới trường hợp ai đó muốn dùng icon, ảnh của mình thay cho dùng đồ của office. Lúc đó làm tay bằng cách mở bằng WinRAR và thêm một số nội dung vào đâu đó rất cực.

Tuy ví dụ chỉ là 3 button nhưng nếu bạn đã có nội dung <customUI ...> ... </customUI> rồi thì dùng Custom UI Editor để thêm nó vào tập tin Excel sẽ nhẹ nhàng hơn rất nhiều so với mở bằng WinRAR.

Tóm lại có 2 cách: hoặc dùng phần mềm của ai đó, hoặc nếu tự làm thì dùng Custom UI Editor.
 
1/ nếu bạn nào biết chút VB6 thì cũng viết file cài đặt kiểu như "Inno setup" ok đấy ... tuy nhiên giao diện chạy đẹp hay ko thì phụ thuộc vào người thiết kế form cho nó Run Sertup

2/ Sẻ có bạn hỏi làm sao và như thế nào ??? Trả lời là: cách đây vài năm chi đó Mạnh đã làm và xài Úp trên GPE rồi ... đam mê tìm là thấy ???

3/ VB6 Viết Add-Ins DLL tạo Menu Ribbon cho Excel ok đấy .... mới biết cuối năm rồi ... Viết Add-ins chạy cho Office X32 hay X64 thì cũng thế như nhau cả chạy chung 1 File duy nhất

4/ Delphi cũng viết Add-ins DLL có menu Ribbon chạy ok đó .... vào cái Thớt Delphi trên GPE Mạnh úp cái File DLL khi đăng ký xong mở file Excel lên thấy menu Ribbon các kiểu đấy
Tha hồ cho mà vọc ... code két như biển cả chỉ sợ ko có lòng kiên nhẫn và sự đam mê ... dốt như Mạnh mà cũng vọc ra ối thứ đấy chứ -0-0-0- ===\.
 
Em làm theo bác hướng dẫn nhưng khi em đổi từ zip sang xlms thì báo lỗi file . h sửa sao ạ. Nếu em ấn yes thì nó quay về file ban đầu khi chưa sửa .rels và thêm customUI
nScreenshot_1.png
 

File đính kèm

  • New Microsoft Excel Worksheet.xlsm.zip
    24.5 KB · Đọc: 10
XML nó nấp trong file dll đó Mạnh úp GPE hết rồi ko đến nổi như lần trước thớt khác keo mạnh nói xạo ấy chứ
Ra là vậy, nếu vậy có phải tính đến trường hợp file được dùng ở nhiều phiên bản excek hông bạn, ví như excel 2003 nó không có xml thì phải.
 
Em làm theo bác hướng dẫn nhưng khi em đổi từ zip sang xlms thì báo lỗi file . h sửa sao ạ. Nếu em ấn yes thì nó quay về file ban đầu khi chưa sửa .rels và thêm customUI
nView attachment 238766
Do .rels mình chỉ đường dẫn đến customUI/customUi14.xml nhưng trong thư mục customUI lại lưu file là customUI.xml nên nó sai đường dẫn (Đây là sơ suất của mình và đã cập nhật lại ở #4). Mình đã sửa lại file của bạn, bạn có thể tải về xem thử.
 

File đính kèm

  • New Microsoft Excel Worksheet.xlsm
    24.6 KB · Đọc: 23
Ra là vậy, nếu vậy có phải tính đến trường hợp file được dùng ở nhiều phiên bản excek hông bạn, ví như excel 2003 nó không có xml thì phải.
Bài #17 làm kiểu office2003 đó nha ... chạy từ 2003 to 2019 đó
1592100958516.png


Bài 1 #1 làm XML đó nha .. chạy từ Office 2010 to 2019
1592101035993.png

Vẫn câu nói cũ ... Trên GPE có hết rồi he :p:p
 
Web KT
Back
Top Bottom