This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Tùy biến thanh Ribbon của Microsoft Word

dathv

Búa Gỗ Đôi
Phần I: Đầu tiên mình sẽ lược dịch bài này (dựa theo Google dịch), mình thấy bài này tương đối đầy đủ và bài bản:
https://gregmaxey.com/word_tip_pages/customize_ribbon_main.html
Bài này trình bày nỗ lực của tác giả để giúp người dùng tùy biến thanh Ribbon mà không cần mua các công cụ có phí (Ở đây chỉ dùng các công cụ miễn phí).
Tác giả sẽ trình bày cách tùy biến thanh Ribbon thông qua việc tùy biến đoạn code xml (Tác giả gọi là RibbonXML).
Lưu ý: Từ sau Word 2010, Microsoft đã tích hợp công cụ tùy biến thanh Ribbon một cách cơ bản, bài này không tập trung vào công cụ tích hợp này của Microsoft.
Nguồn tài liệu về tùy chỉnh thanh Ribbon do Microsoft cung cấp:
Trong các ví dụ ở dưới, tác giả trình bày cách tùy biến thông qua việc sử dụng 2 công cụ là Office Custom UI Editor và Word template add-ins. Tác giả sử dụng chúng vì:
  • Office Custom UI Editor tự động tạo ra file Open Office XML cần thiết và giao diện tương đối rõ ràng với người dùng.
  • Cách làm này không yêu cầu bất kì phần mềm có phí nào.
  • Any specialized customization involving ribbon callbacks can be done using VBA available to the Word user. (Cái này mình không biết dịch thế nào?)
Office Custom UI Editor có thể download miễn phí từ OpenXMLDeveloper.org hoặc link do tác giả cung cấp: Download
Dùng cách được trình bày ở bài này, có thể tùy chỉnh thanh Ribbon cho từng file cụ thể; hoặc cho các file được tạo nên từ cùng một file Word template; hoặc cho tất cả các file trong máy bằng cách sử dụng Word template Add-In.


VÍ DỤ

VD1: Crawl
Một ví dụ cơ bản, ẩn công cụ có sẵn trên thanh Ribbon: cụ thể là ẩn group "Macros" trong tab "View". Việc này giúp tạo không gian cho các công cụ cần thiết khác.


Thanh Ribbon trước khi sửa đôi


Thanh Ribbon sau khi sửa đôi​
Các bước thực hiện:
  • Mở Word, tạo và lưu một file template trắng với macro được enable. Với VD này, tác giả đã tạo và lưu một file template với tên "Customize Ribbon Example 1.dotm".
  • Đóng file đã tạo và đóng Word.
  • Mở Office Custom UI Editor, trong Office Custom UI Editor mở file template đã lưu ở bước trên.



    Bảng RibbonXML trống



    Chọn và chèn phần thích hợp


    Notes:
    1. Do Custom UI Editor có thể được cập nhật nên giao diện trong các hình trên có thể khác so với thực tế.
    2. Khi tạo RibbonXML, ta có thể tạo một file kép gồm cả CustomUI14 và CustomUI12. Việc này giúp các tùy chỉnh có thể thay đổi phụ thuộc vào việc đang sử dụng Word 2007 hay 2010. Ron de Bruin đã tạo một VD cho Excel, có thể dễ dàng áp dụng cho Word, Link: Load different RibbonX when opening file in Excel 2007 or 2010
  • Sao chép và dán đoạn RibbonXML sau vào Office Custom UI Editor
    XML:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
      <ribbon>
        <tabs>
          <tab idMso="TabView">
            <group idMso="GroupMacros" visible="false" />
          </tab>
        </tabs>
      </ribbon>
    </customUI>



    Sau khi dán RibbonXML​

    Notes: Ta không thể xóa một công cụ mặc định trên thanh Ribbon. Thay vào đó ta sử dụng thuộc tính "visible" của công cụ để xác định nó có được hiển thị trên thanh Ribbon hay không.
  • Trong bài này tác giả không nói kĩ về cấu trúc của RibbonXML. Đơn giản là: ribbon sẽ gồm một hoặc nhiều tab; tab sẽ gồm một hoặc nhiều group; group sẽ gồm nhiều thứ như buttons, splitButtons, dropdowns, menus, separators, etc.. Mỗi thứ này và các thuộc tính của chúng nằm trong một cấu trúc xml và thuộc một cấu trúc khác (parent element). Cấu trúc của RibbonXML quyết định cấu trúc của thanh Ribbon.
  • Trong đoạn RibbonXML trên, tác giả đã miêu tả cấu trúc để ẩn đi GroupMacro mặc định của tab View.
  • Lưu và thoát Custom UI Editor.
    Bonus Tips:
    1. Khi sử dụng Office Custom UI Editor nên sử dụng tính năng Validate để phát hiện lỗi trong cấu trúc RibbonXML sớm nhất có thể. Các quy tắc trong cấu trúc của RibbonXML được cung cấp bởi MSDN: Office2007XML Schema & Office2010XML Schema ("https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=1574") (Redirect của vn-z.vn bị lỗi với link này, các bạn copy link nhé)
    2. Kể cả khi RibbonXML đúng về cấu trúc vẫn có thể có lỗi. Luôn sử dụng tính năng hiển thị lỗi của Microsoft Word.



      Tính năng Validate của Office Custom UI Editor.



      Tùy chọn của Microsoft Word giúp phát hiện và sửa lỗi.​
  • Sau khi tạo và lưu RibbonXML bằng Office Custom UI Editor, ta có file template .dotm chứa thư mục CustomUI, trong thư mục này có file CustomUI14.xml (hoặc CustomUI12.xml), file này chứa nội dung tùy biến thanh Ribbon.
  • Trong VD này, ta đã tạo một file Word template add-in. Khi Word load file add-in này, Word sẽ mở thư mục _rels bên trong file add-in, rồi đọc file .rels bên trong thư mục này để xem thông tin tùy biến thanh Ribbon ở đâu và load thông tin này.
  • Lợi ích của Office Custom UI Editor là tự động tạo ra các file cần thiết cho việc tùy biến thanh Ribbon. Để tìm hiểu chi tiết hơn Office Custom UI Editor tạo ra các file nào, ta có thể đọc tài liệu do MSDN cung cấp phía trên.
  • Chép file template đã lưu vào thư mục Word Startup và khởi động Word. Thanh Ribbon sẽ được tùy chỉnh như trong hình minh họa phía trên.
    Notes: Để hiểu thêm về template add-ins của Word có thể đọc thêm phần: Organizing Your Macros/Template Add-ins của bài: Installing Macros
VD2: Baby Step
Trong VD này, ta sẽ mở rộng VD trên. Ta sẽ sử dụng Tab Home mặc định của Word; xóa bỏ, sắp xếp lại và thêm vào một số công cụ. Tab Home có Group "Clipboard" ở bên trái và Group "Editing" ở bên phải. Ta sẽ gộp 2 Group này lại thành Group "Editing and Clipboard" ở bên trái của Tab như trong hình dưới.

Group Editing and Clipboard mới​
Ta làm lại các bước sau:
  • Mở Word, tạo và lưu một file template trắng với macro được enable. Với VD này, tác giả đã tạo và lưu một file template với tên "Customize Ribbon Example 2.dotm".
  • Đóng file đã tạo và đóng Word.
  • Mở Office Custom UI Editor, trong Office Custom UI Editor mở file template đã lưu ở bước trên.
  • Chèn Office Custom UI Part thích hợp.
  • Dán đoạn code sau vào Office Custom UI Editor.
    XML:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
      <ribbon>
        <tabs>
          <tab idMso="TabHome">
            <group idMso="GroupEditing" visible="false" />
            <group idMso="GroupClipboard" visible="false" />
            <group id="CustomGroup" label="Editing and Clipboard" insertBeforeMso="GroupFont">
              <splitButton idMso="PasteMenu" size="large" />
              <button idMso="Cut" />
              <button idMso="Copy" />
              <control idMso="FormatPainter" />
              <separator id="Sep1" />
              <button idMso="FindDialog" />
              <button idMso="ReplaceDialog" />
              <menu idMso="SelectMenu" />
              <dialogBoxLauncher >
                <button idMso="ShowClipboard" />
              </dialogBoxLauncher>
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>



    Nhắc nhở lần nữa: Ta không thể xóa hay chỉnh sửa một công cụ mặc định trên thanh Ribbon. Thay vào đó ta sử dụng thuộc tính "visible" của công cụ để xác định nó có được hiển thị trên thanh Ribbon hay không.
  • Trong đoạn code RibbonXML trên, ta đã:
    • Ẩn Group Clipboard và Group Editing trong tab Home.
    • Tạo group "Editing and Clipboard" mới ngay trước Group Font mặc định.
    • Thêm các buttons, control, menu, và dialogBoxLauncer mặc định vào group mới cùng với một separator.
  • Kiểm tra lại đoạn code trên.
    Notes:
    1. "idMso" cố định cho các công cụ mặc định của Word; có thể xác định "idMso" bằng cách vào: Word Options>Customize (or Word Options>Customize Ribbon), di chuột vào công cụ cần tìm, "idMso" sẽ xuất hiện trong phần screen tip. Hoặc, toàn bộ danh sách của các công cụ mặc định trong thanh Ribbon (bao gồm tên và phân loại) có thể được tải về từ Microsoft: List of Control IDs (Office 2007) & List of Control IDs (Office 2010)
    2. "id" có thể là bất kì cái gì nhưng phải là duy nhất cho một công cụ mà ta thêm vào. (Trong đoạn code trên "id" của separator là "Sep1")
  • Lưu và đóng Office Custom UI Editor.
  • Chép file template vào thư mục Word Startup và khởi động Word.
Một chút nghỉ ngơi
Việc tùy biến thanh Ribbon sử dụng các công cụ có sẵn của Word và một vài separator rất đa dạng; với một đoạn code XML đúng; đủ dài ta có thể tạo được một tab mới với hầu hết các menu và công cụ của Word 2003. Để tải file template này, có thể truy cập bài viết sau của tác giả: Ribbon Menu Controls


VD3: Running on your own two feet!!
(Mình không hiểu gì về VBA nên phần này cũng không hiểu lắm.)
Với VD cuối cùng này, tác giả muốn chỉ cho chúng ta cách để tạo và thêm các công cụ tùy biến của riêng mình vào thanh Ribbon.
Chúng ta sẽ tạo tab "My Tab" như hình dưới; bao gồm 2 group là "Macros" và "Shortcuts".
  • Group "Macros" bao gồm button để hiển thị VB Editor và dropdown để thực thi các macro có trong danh sách.
  • Group "Shortcuts" bao gồm 2 toggle button. Một cái để ẩn/hiện bookmarks và một cái để ẩn/hiện hidden text.

Vẫn là các bước quen thuộc:
  • Mở Word, tạo và lưu một file template trắng với macro được enable. Với VD này, tác giả đã tạo và lưu một file template với tên "Customize Ribbon Example 3.dotm".
  • Đóng file đã tạo và đóng Word.
  • Mở Office Custom UI Editor, trong Office Custom UI Editor mở file template đã lưu ở bước trên.
  • Chèn Office Custom UI Part thích hợp.
  • Dán đoạn code sau vào Office Custom UI Editor.
    XML:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="RibbonControl.Onload">
      <ribbon>
        <tabs>
          <tab id="CustomTab1" label="My Tab">
            <group id="CustGrp1" label="Macros" >
                <button id="Btn1" label="Show Visual Basic Editor" imageMso="VisualBasic"
                        onAction="RibbonControl.MyBtnMacro" />
                <dropDown id="DD1" label="Run Macro"
                          getItemCount="RibbonControl.GetItemCount"
                          getItemLabel="RibbonControl.GetItemLabel"
                          getSelectedItemIndex="RibbonControl.GetSelectedItemIndex"
                          onAction="RibbonControl.MyDDMacro" />
            </group>
            <group id="CustGrp2" label="Shortcuts" >
              <toggleButton id="TB1" size="normal"
                            getImage="RibbonControl.getImage"
                            getLabel="RibbonControl.getLabel"
                            onAction="RibbonControl.ToggleonAction"
                            getPressed="RibbonControl.buttonPressed" />
              <toggleButton id="TB2" size="normal"
                            getImage="RibbonControl.getImage"
                            getLabel="RibbonControl.getLabel"
                            onAction="RibbonControl.ToggleonAction"
                            getPressed="RibbonControl.buttonPressed" />
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>
    Notes:
    1. Có một vài sự khác nhau giữa 2 đoạn code RibbonXML ở 2 VD trên với đoạn code này. Chúng ta chỉ tập trung vào việc đoạn code ở VD này không có thuộc tính "idMso", tác giả chỉ sử dụng "id". Nhấn mạnh lại lần nữa, "idMso" là thuộc tính cố định của các công cụ mặc định trong Word; còn "id" là thuộc tính chúng ta tự gán cho công cụ chúng ta tự tạo ra.
    2. Tác giả đã thêm "onLoad="RibbonControl.Onload" và dòng 2 và các thuộc tính khác của công cụ ngoài "id"; đây là các thuộc tính hoặc cách thức để thanh Ribbon cũng như các công cụ của nó có thể liên kết với một project VBA có trong file template.
    3. Khi Word load đoạn code RibbonXML này, Word vẫn chưa biết các thông tin về các công cụ chúng ta thêm vào. Sau đó Word sẽ lấy các thông tin này từ project VBA khi chúng ta thực hiện các lệch này.
  • Lưu và đóng Office Custom UI Editor.
  • Bây giờ ta sẽ tập trung vào project VBA.
    WARNING ** Luôn luôn lưu và đóng file template trong Office Custom UI Editor trước khi mở file template đó trong Word. Luôn luôn lưu và đóng file template trong Word trước khi mở file template đó trong Office Custom UI Editor. Không bao giờ được làm việc trên 1 file template trong cả 2 phần mềm cùng một lúc. ** WARNING
    Lưu ý:
    Khi lần đầu mở file template này trong Word hoặc khi dùng các công cụ trong tab mới vừa tạo, Word sẽ báo lỗi do ta chưa tạo đoạn code VBA tương ứng.
  • Mở Word, mở file template, mở VB Editor (VBE) (ALT+F11).
  • Using the VBE Insert menu, insert two standard project modules List item 2. Rename the modules "RibbonControl" and "Macros". (Các bạn tự dịch nhé!)
    Lưu ý: Tên của module là tùy ý, bạn có thể sử dụng tên nào tùy thích, miễn là chúng giống nhau trong RibbonXML và trong VBA.
  • Dán đoạn code sau vào "RibbonControl" module:
    Mã:
    Option Explicit
    Public myRibbon As IRibbonUI
    Sub Onload(ribbon As IRibbonUI)
      'Creates a ribbon instance for use in this project
      Set myRibbon = ribbon
    End Sub
    'Callback for DropDown GetItemCount
    Sub GetItemCount(ByVal control As IRibbonControl, ByRef count)
      'Tell the ribbon to show 4 items in the dropdown
      count = 4
    End Sub
    'Callback for DropDown GetItemLabel
    Sub GetItemLabel(ByVal control As IRibbonControl, Index As Integer, ByRef label)
      'This procedure fires once for each item in the dropdown. Index is _
       received as 0, 1, 2, etc. and label is returned.
      label = Choose(Index + 1, "Select from list", "Macro 1", "Macro 2", "Macro 3")
    End Sub
    'Callback DropDown GetSelectedIndex
    Sub GetSelectedItemIndex(ByVal control As IRibbonControl, ByRef Index)
      'This procedure is used to ensure the first item in the dropdown is selected _
       when the control is displayed
      Select Case control.id
        Case Is = "DD1"
          Index = 0
        Case Else
          'Do nothing
      End Select
    End Sub
    'Callback for DropDown onAction
    Sub myDDMacro(ByVal control As IRibbonControl, selectedID As String, selectedIndex As Integer)
      Select Case selectedIndex
        Case 0
          'Do nothing
        Case 1
          Macros.Macro1
        Case 2
          Macros.Macro2
        Case 3
          Macros.Macro3
      End Select
      'Force the ribbon to restore the control to its original state
      myRibbon.InvalidateControl control.id
    End Sub
    'Callback for Button onAction
    Sub MyBtnMacro(ByVal control As IRibbonControl)
      Select Case control.id
        Case Is = "Btn1"
          Macros.ShowEditor
        Case Else
          'Do nothing
      End Select
    End Sub
    'Callback for Toogle onAction
    Sub ToggleonAction(control As IRibbonControl, pressed As Boolean)
      Select Case control.id
        Case Is = "TB1"
          ActiveWindow.View.ShowBookmarks = Not ActiveWindow.View.ShowBookmarks
        Case Is = "TB2"
          'Note: "pressed" represents the toggle state. So we could use this instead.
          If pressed Then
            ActiveWindow.View.ShowHiddenText = False
          Else
            ActiveWindow.View.ShowHiddenText = True
          End If
          If Not ActiveWindow.View.ShowHiddenText Then
            ActiveWindow.View.ShowAll = False
          End If
      End Select
      'Force the ribbon to redefine the control wiht correct image and label
      myRibbon.InvalidateControl control.id
    End Sub
    'Callback for togglebutton getLabel
    Sub getLabel(control As IRibbonControl, ByRef returnedVal)
      Select Case control.id
        Case Is = "TB1"
          If Not ActiveWindow.View.ShowBookmarks Then
            returnedVal = "Show Bookmarks"
          Else
            returnedVal = "Hide Bookmarks"
          End If
        Case Is = "TB2"
          If Not ActiveWindow.View.ShowHiddenText Then
            returnedVal = "Show Text"
          Else
           returnedVal = "Hide Text"
          End If
      End Select
    End Sub
    'Callback for togglebutton getImage
    Sub GetImage(control As IRibbonControl, ByRef returnedVal)
      Select Case control.id
        Case Is = "TB1"
          If ActiveWindow.View.ShowBookmarks Then
            returnedVal = "_3DTiltRightClassic" 'The idMso of a built-in control
          Else
            returnedVal = "_3DTiltLeftClassic" 'The idMso of a built-in control
          End If
        Case Is = "TB2"
          If ActiveWindow.View.ShowHiddenText Then
            returnedVal = "WebControlHidden" 'The idMso of a built-in control
          Else
            returnedVal = "SlideShowInAWindow" 'The idMso of a built-in control
         End If
      End Select
    End Sub
    'Callback for togglebutton getPressed
    Sub buttonPressed(control As IRibbonControl, ByRef toggleState)
      'toggleState (i.e., true or false) determines how the 'toggle appears _
       on the ribbon (i.e., flusn or sunken).
      Select Case control.id
        Case Is = "TB1"
          If Not ActiveWindow.View.ShowBookmarks Then
            toggleState = True
          Else
            toggleState = False
          End If
        Case Is = "TB2"
          If Not ActiveWindow.View.ShowHiddenText Then
            toggleState = True
          Else
            toggleState = False
          End If
      End Select
    End Sub
    Bonus Tip: Notice the Select Case statements in the callback procedures. Get used to using same callback procedures and appropriate Case statements to process multiple controls. It will save you countless lines of code in larger projects. (Mình không thể dịch được cái này.)
  • Dán đoạn code sau vào "Macros" module:
    Mã:
    Option Explicit
    Sub ShowEditor()
    ShowVisualBasicEditor = True
    End Sub
    Sub Macro1()
    MsgBox "Macro 1 running" 'Replace this with whatever code you would wish to run.
    End Sub
    Sub Macro2()
    MsgBox "Macro 2 running" 'Replace this with whatever code you would wish to run.
    End Sub
    Sub Macro3()
    MsgBox "Macro 3 running" 'Replace this with whatever code you would wish to run.
    End Sub
  • Lưu và đóng template.
  • Đóng Word và chuyển file template vào thư mục Word start-up.
  • Mở Word và thử.
    Lưu ý: Rất nhiều người gặp vấn đề khi copy và paste các đoạn code trong bài này, tác giả cho rằng đó là do định dạng của trang web nên tác giả đã upload toàn bộ các file có chứa các đoạn code RibbonXML và code VBA để chúng ta có thể download (Các file kết thúc bằng chữ "A" là dành cho Word 2007 (CustomUI12)): Ribbon Customization Demo Templates
Tổng kết:
  1. Tất cả các vấn đề chi tiết đều đã được tác giả cung cấp qua các link tham chiếu.
  2. Chúng ta có thể xác định được hầu hết "idMso" của các công cụ mặc định của Word thông qua tính năng QAT/Ribbon customization của Word. Toàn bộ danh sách có thể được download từ Microsoft: List of Control IDs (Office 2007) & List of Control IDs (Office 2010)
  3. Chúng ta học bằng cách thực hành.
  4. Tác giả giới thiệu cuốn sách: RibbonX: Customizing the Office 2007 Ribbon của Robert Martim, Ken Puls và Teresa Hennig.

HẾT
Đây là lần đầu tiên mình nghiêm túc dịch cái gì đó, quá khó, có một số câu không biết dịch thế nào mình đã để nguyên; một số câu nêu cảm nghĩ của tác giả mình đã bỏ qua và một số câu dịch bừa. Một số link không vào được nhưng mình để nguyên như trong bài gốc của tác giả.
Cảm ơn các bạn đã đọc!
Phần II: Một số bài viết khác của cùng tác giả cũng rất hay:
Phần III: Bây giờ là một số kinh nghiệm của mình (một người dùng thuần túy):
  • Theo như bài trên thì:
    • Word 2007 dùng một file template riêng (Cái này mình chưa Test vì không có Word 2007).
    • Word 2010; 2013; 2016; 2019 dùng chung một file template (Cái này đã Test).
  • Cái này đã test trên Office 2010:
    • Nếu bạn muốn chỉ tùy biến thanh Ribbon trên 1 file thì chèn RibbonXML vào file đó.
    • Nếu bạn muốn tùy biến thanh Ribbon cho các file được tạo nên từ 1 template thì chèn RibbonXML vào file template đó.
    • Nếu bạn muốn tùy biến thanh Ribbon cho Word thì sao chép file template đã chèn RibbonXML vào thư mục Startup của Word.
      VD với Window 8.1 và Office 2010: "C:\Program Files\Microsoft Office\Office14\STARTUP"
  • Một phần mềm khác chức năng tương tự: (Mình không dùng cái này nhưng đưa lên đây là vì nó mới hơn, vẫn đang được phát triển nên có lẽ tốt hơn)
    https://github.com/fernandreu/office-ribbonx-editor
  • Office Custom UI Editor yêu cầu .NET Framework version 3.0.




  • Với bạn nào không muốn cài thêm .NET Framework hoặc không muốn cài thêm một phần mềm lạ hoắc vào máy (giống mình) có thể dùng cách sau:
    • Tải file .dotm do tác giả của bài viết trên cung cấp: Ribbon Customization Demo Templates
    • Dùng 7-zip mở file .dotm:




    • Chép file CustomUI14.xml ra đâu đó.




    • Dùng Notepad của chính Window để sửa file .xml này. Hoặc có thể dùng Notepad++ lên màu cho đẹp:




    • Sau khi sửa xong lại kéo file .xml vào file template:




  • Nếu các bạn tick như thế này:



    Thì nếu có lỗi Word sẽ báo:




  • Danh sách các công cụ mặc định của bộ Office:
  • Các bạn có thể đọc thêm về cấu trúc của RibbonXML bằng link này: [MS-CUSTOMUI]: Custom UI XML Markup Specification
    Một số thuộc tính mà mình hay dùng:
    • idMso="" : Xác định công cụ mặc định của Word.
    • label="" : Tên được hiển thị.
    • showLabel="false": Không hiển thị tên; nếu không có thì tên được hiển thị.
    • size="large": Công cụ sẽ hiển thị thành nút to; nếu không có thì là nút nhỏ.
    • insertAfterMso="" hoặc insertBeforeMso="": Vị trí trên thanh Ribbon.
    • visible="false": Không hiển thị công cụ; nếu không có thì công cụ sẽ được hiển thị.
  • Với các bước hoàn toàn tương tự, ta có thể tùy biến thanh Ribbon của Excel và Powerpoint:
    • Thư mục khởi động của Excel 2010 là: "C:\Program Files\Microsoft Office\Office14\XLSTART"




    • Mình chưa tìm ra cách nào để Powerpoint 2010 tự khởi động cùng với file template cả. Việc chèn RibbonXML vào từng file Powerpoint cụ thể hoàn toàn bình thường.




  • Một số vấn đề mà mình chưa thể giải quyết được, mong các bạn cùng thảo luận:
    • Mình không thể tạo được một group có 2 hàng như group Fonts mặc định, chỉ có thể tạo được group có 3 hàng như group Clipboards mặc định.




    • Mình không thể làm một file template khởi động mặc định cùng Powerpoint.
 
Sửa lần cuối:

malemkhoang

Rìu Chiến
Any specialized customization involving ribbon callbacks can be done using VBA available to the Word user
==========

Dịch mộc:
specialized = thiết kế cho một mục đích riêng;
customization = tùy biến;
involving = liên quan đến (liên quan);
ribbon callbacks = [để nguyên không dịch]
be done = được thực hiện (sẽ được thực hiện) [bỏ]
to the Word user = [lấy nghĩa theo ngữ cảnh]

Bất kỳ thiết kế cho một mục đích riêng (nào) liên quan đến (việc) tùy biến ribbon callbacks (đều) có thể dùng VBA có sẵn trong Word.

Notice the Select Case statements in the callback procedures. Get used to using same callback procedures and appropriate Case statements to process multiple controls. It will save you countless lines of code in larger projects
==========

Dịch mộc:
Notice = lưu ý (để ý/lưu ý);
Select Case statements = lệnh Select Case;
callback = gọi ngược (gọi lại/gọi ngược/gọi ngược về);
Get used to using (used to V-ing) = dần quen với việc dùng ;
appropriate = đặc biệt (riêng biệt/đặc biệt);
process = xử lý;


==========
 

dathv

Búa Gỗ Đôi

Cảm ơn bác
Mặc dù do không biết gì về VBA nên dịch rồi đọc cũng chẳng hiểu mấy
 

malemkhoang

Rìu Chiến
Mình không thể tạo được một group có 2 hàng như group Fonts mặc định, chỉ có thể tạo được group có 3 hàng như group Clipboards mặc định.
==========

Tôi sử dụng cụm từ "Office Menu Control" (OMC)
để chỉ toàn bộ hệ thống menu điều khiển của MS Office.
OMC bao gồm:
- Quick Access Toolbar (QAT): thường nằm cùng với thanh tiêu đề, chứa các Button;
- Ribbon: chứa các "Tab" chức năng;
- BackStage: là Tab File nằm đầu tiên bên trái chứa các lệnh hoặc lệnh truy xuất nhanh.

Ribbon là cái "thùng" chứa các Tab;
Tab là cái "thúng" chứa các Group;
Group là cái "mủng" chứa các Box (có lẽ chỉ dùng đến 3 Box thôi);
Box là cái hộp chứa các Button, Menu...;
Button là cái... cúc áo
Menu là cái...

Như vậy, muốn có một Group chứa 2 hàng thì bạn cần tạo Group chứa 2 Box là được.


Mã:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    <ribbon>
        <tabs>
            <tab id="mlk" label="Công cụ của tôi" insertBeforeMso="TabHome">
                <group id="groupmlk1" label="Ma Lem Khoang (Group 2 hàng)">
                    <box id="box21" boxStyle="horizontal">
                        <button id="h11" label="Hàng 1:" imageMso="Heart"/>
                        <button idMso="FileNewDefault" showLabel="false"/>
                        <button idMso="FileOpen" showLabel="false"/>
                        <button idMso="FileSave" showLabel="false"/>
                        <button idMso="FilePermission" showLabel="false"/>
                        <button idMso="FilePrintQuick" showLabel="false"/>
                        <toggleButton idMso="FilePrintPreview" showLabel="false"/>
                        <button idMso="SpellingAndGrammar" showLabel="false"/>
                        <toggleButton idMso="ResearchPane" showLabel="false"/>
                        <button idMso="Cut" showLabel="false"/>
                        <button idMso="Copy" showLabel="false"/>
                        <button idMso="Paste" showLabel="false"/>
                        <control idMso="FormatPainter" showLabel="false"/>
                    </box>
                    <box id="box22" boxStyle="horizontal">
                        <button id="h12" label="Hàng 2:" imageMso="Diamond"/>
                        <button idMso="StylesPane" showLabel="false"/>
                        <comboBox idMso="StyleGalleryClassic" />
                        <comboBox idMso="Font" />
                        <comboBox idMso="FontSize" />
                    </box>
                </group>
                <group id="groupmlk2" label="Group 3 hàng">
                    <box id="box31" boxStyle="horizontal">
                        <button id="h21" label="Hàng 1:" imageMso="SadFace"/>
                        <button id="b21" label="1" imageMso="NewAlert" showLabel="false"/>
                        <button id="static" label="Menu cổ lỗ" />
                    </box>
                    <box id="box32" boxStyle="horizontal">
                        <button id="h22" label="Hàng 2:" imageMso="HappyFace"/>
                        <button id="b22" label="2" imageMso="SignatureLineInsert" showLabel="false"/>
                        <menu id="menuEdit" label="Menu Edit">
                            <control idMso="Undo"/>
                            <control idMso="RedoOrRepeat"/>
                            <menuSeparator id="menuEditSeparator1"/>
                            <button idMso="Cut"/>
                            <button idMso="Copy"/>
                            <button idMso="ShowClipboard"/>
                            <button idMso="Paste"/>
                            <button idMso="PasteSpecialDialog"/>
                            <button idMso="PasteAsHyperlink"/>
                            <menuSeparator id="menuEditSeparator2"/>
                            <menu idMso="ClearMenuWord"/>
                            <button idMso="SelectAll"/>
                            <menuSeparator id="menuEditSeparator3"/>
                            <button idMso="FindDialog"/>
                            <button idMso="ReplaceDialog"/>
                            <button idMso="GoTo"/>
                            <menuSeparator id="menuEditSeparator4"/>
                            <button idMso="FileLinksToFiles" visible="true"/>
                            <button idMso="ObjectEditDialog"/>
                        </menu>
                    </box>
                    <box id="box33" boxStyle="horizontal">
                        <button id="h23" label="Hàng 3:" imageMso="Piggy"/>
                        <button id="b23" label="3" imageMso="AccessNavigationOptions" showLabel="false"/>
                        <menu id="menuView" label="Menu View">
                            <toggleButton idMso="ViewDraftView"/>
                            <toggleButton idMso="ViewWebLayoutView"/>
                            <toggleButton idMso="ViewPrintLayoutView"/>
                            <toggleButton idMso="ViewFullScreenReadingView"/>
                            <toggleButton idMso="ViewOutlineView"/>
                            <menuSeparator id="menuViewSeparator1"/>
                            <checkBox idMso="ViewRulerWord"/>
                            <toggleButton idMso="ParagraphMarks"/>
                            <toggleButton idMso="TableShowGridlines"/>
                            <menuSeparator id="menuViewSeparator2"/>
                            <checkBox idMso="ViewDocumentMap"/>
                            <checkBox idMso="ViewThumbnails"/>
                            <menuSeparator id="menuViewSeparator3"/>
                            <button idMso="HeaderFooterEditHeader"/>
                            <button idMso="FootnotesEndnotesShow"/>
                            <menu idMso="ReviewShowMarkupMenu"/>
                            <menuSeparator id="menuViewSeparator4"/>
                            <button idMso="ViewFullScreenView"/>
                            <button idMso="ZoomDialog"/>
                        </menu>
                    </box>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
 

dathv

Búa Gỗ Đôi

Ý em là group 2 hàng của Microsoft nó tự động to ra bằng với group 3 hàng, cái này không có tác dụng gì lắm, chỉ để trông cho đẹp thôi


Em cũng đang cố làm cái này mà vẫn chưa được:
Em cài Uoffice 2.0, nó tạo ra một cái Tab Addin như hình dưới, em đang muốn thêm cái group Custom Toolbars vào Tab của mình, bác có cách gì không?

 

malemkhoang

Rìu Chiến
Em cài Uoffice 2.0, nó tạo ra một cái Tab Addin như hình dưới, em đang muốn thêm cái group Custom Toolbars vào Tab của mình, bác có cách gì không?
==========
Thứ nhất, khuyên bạn đẩy nó lên QAT (Add Group to Quick Access Toolbar).
Thứ hai, Office sau 2003 đã tạo ra cái này, nhưng theo phong cách Ribbon và VBA cũ,
do vậy, nó đành thể hiện công cụ trong Tab Add-ins
và ta sẽ không tóm được nó như các đối tượng idMso
mà phải tiến hành tương tự như trong VD3, Phần I, #1.


(Hình chỉ mang tính chất ví dụ)

 

dathv

Búa Gỗ Đôi

Quá xuất sắc!
Cảm ơn bác rất nhiều