Với excel 2007, tôi muốn cái Menu tự tạo (nó tự động group lại trong tab Add-Ins), khi tôi mở file, thì mặc định tab Add-Ins này hiển thị, không phải là tab Home có được không?
Với excel 2007, tôi muốn cái Menu tự tạo (nó tự động group lại trong tab Add-Ins), khi tôi mở file, thì mặc định tab Add-Ins này hiển thị, không phải là tab Home có được không?
Can thiệp vào menu 2007, 2010 thì phải dùng ngôn ngữ xml môtar cấu trúc của menu chứ không dùng cách làm kiểu CommandBar như trước đây.
Thiện có thể dùng chương trình OfficeCustomUIEditor để tạo menu cho file của mình.
download tại đây: http://openxmldeveloper.org/articles/customuieditor.aspx
Để thiết kế menu Ribbon cần phối hợp các công cụ để soạn thảo cấu trúc file CustomUI.XML.
Đây là đoạn xml tạo menu trong tab "Home" với nhóm lệnh "www.bluesofts.net" với 3 nút lệnh bên trong: Mở tệp", "Lưu têph", "Đóng tệp"
c. Mở Excel --> mở tập tin chan_dai.xlsm --> ta đã thấy có menu mà ta thêm vào. Nhưng nhấn chuột vào thì chưa có gì, thậm chí Excel thông báo lỗi, vì ta chưa viết code để gán cho các nút ta thêm vào.
Nhấn Alt + F11 để mở VBA. Nhấn Insert --> Module để thêm môđun --> Dán code đã lưu vào bộ nhớ đệm ở điểm b (Ctrl + V) --> bổ sung code để phục vụ các nút.
Chọn save để lưu lại chan_dai.xlsm
d. Nếu chan_dai.xlsm ta định làm addin thì ta làm như sau:
Trong cửa sổ VBA ta nhấn vào ThisWorkbook --> chuyển IsAddin sang TRUE --> chọn save --> VBA chỉ cho phép ta lưu lại thành chan_dai.xlam.
chan_dai.xlam ta thêm vào Add_ins để mỗi lần mở Excel là có.
Nếu tạo Menu trên word thì thế nào hả bác, nó có tương tự như excel ko? em tìm mãi mà ko thể nào add được, chỉ sử dụng code chạy trong VBA để tạo, mà ko gán được toán tử với tiếng Việt?
Các bác cho em hỏi: phải viết như thế nào thì trong menu mới hiển thị tiếng việt.
ví dụ: trong file chan_dai có đoạn "N u & # 7 6 9 ; t th & # 4 3 2 ; & # 7 6 9 ; 4"<---> "nút thứ 4", e phải viết nó như thế nào ạ.
p/s: E không phải là dân tin học, làm ơn càng chi tiết càng tốt.
Em xin cảm ơn !
Các bác cho em hỏi: phải viết như thế nào thì trong menu mới hiển thị tiếng việt.
ví dụ: trong file chan_dai có đoạn "N u & # 7 6 9 ; t th & # 4 3 2 ; & # 7 6 9 ; 4"<---> "nút thứ 4", e phải viết nó như thế nào ạ.
p/s: E không phải là dân tin học, làm ơn càng chi tiết càng tốt.
Em xin cảm ơn !
tôi có đọc có sử dụng tập tin mà nó lỗi code vba ko cho xài. tiếng việt lỗi như bên dưới. Còn viết như "N u & # 7 6 9 ", này thì được mà bảng mã ASCCII mở rộng có nhưng không đủ chữ, bảng tra chữ Ư là &#.... mấy vậy, và tra ở đâu vậy, cám ơn nhiều. Mình viết Notepad không nhúng vào excel được. Tks bạn nhiều
c. Mở Excel --> mở tập tin chan_dai.xlsm --> ta đã thấy có menu mà ta thêm vào. Nhưng nhấn chuột vào thì chưa có gì, thậm chí Excel thông báo lỗi, vì ta chưa viết code để gán cho các nút ta thêm vào.
Nhấn Alt + F11 để mở VBA. Nhấn Insert --> Module để thêm môđun --> Dán code đã lưu vào bộ nhớ đệm ở điểm b (Ctrl + V) --> bổ sung code để phục vụ các nút.
Chọn save để lưu lại chan_dai.xlsm
d. Nếu chan_dai.xlsm ta định làm addin thì ta làm như sau:
Trong cửa sổ VBA ta nhấn vào ThisWorkbook --> chuyển IsAddin sang TRUE --> chọn save --> VBA chỉ cho phép ta lưu lại thành chan_dai.xlam.
chan_dai.xlam ta thêm vào Add_ins để mỗi lần mở Excel là có.
Chào các bạn
Tôi muốn thêm menu trên excel 2010
Ở bài 7 tôi đã thêm được Menu (xem hình)nó nằm trong Menu Home
Cũng đã tạo được Addin chan_dai.xlsm
Khi nhấn Nút thứ 1 thì nó ra hình dưới
Và thấy code trong module1:
'Callback for customButton1 onAction
Sub Macro1(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton21 onAction
Sub Macro2(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton24 onAction
Sub Macro3(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton25 onAction
Sub Macro4(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton28 onAction
Sub Macro5(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton31 onAction
Sub Macro6(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton42 onAction
Sub Macro7(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton44 onAction
Sub Macro8(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton36 onAction
Sub Macro9(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton38 onAction
Sub Macro10(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton40 onAction
Sub Macro11(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton22 onAction
Sub Macro12(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton46 onAction
Sub Macro13(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton26 onAction
Sub Macro14(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton29 onAction
Sub Macro15(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton32 onAction
Sub Macro16(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton43 onAction
Sub Macro17(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton45 onAction
Sub Macro18(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton41 onAction
Sub Macro19(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton23 onAction
Sub Macro20(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton47 onAction
Sub Macro21(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton27 onAction
Sub Macro22(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton30 onAction
Sub Macro23(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton33 onAction
Sub Macro24(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton34 onAction
Sub Macro25(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton35 onAction
Sub Macro26(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton37 onAction
Sub Macro27(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton39 onAction
Sub Macro28(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton20 onAction
Sub Macro29(control As IRibbonControl)
MsgBox control.ID
End Sub
Bây giờ tôi muốn đưa 1 đoạn code ở dưới vào để tạo addin
Sub DelObjects()
Dim i As Long, wks As Worksheet
On Error Resume Next
Set wks = ActiveSheet
For i = 1 To 10000
wks.Shapes(1).Delete
Next
MsgBox "Còn " & wks.Shapes.Count & " objects"
End Sub
(1)Đưa code vào chỗ nào để bấm vào nút thứ 1 thì nó chạy code?
(2)Muốn đổi tên “Nút thứ 1” thành “DelObjects” thì đổi như thế nào?
(3)Trong mục “Menu của riêng tôi” nó có 5 nút từ Nút thứ 4 -> Nút thứ 8: Nếu tôi muốn thêm các nút thì thế nào ạ?
Tôi đã đọc các bài của mục này nhưng vẫn chưa biết làm,
Xin các bạn hướng dẫn tôi chi tiết vì tôi không biết nhiều về máy tính
Xin cảm ơn các bạn
'Callback for customButton40 onAction
Sub Macro11(control As IRibbonControl)
MsgBox control.ID
End Sub
Và thấy code trong module1:
...
'Callback for customButton40 onAction
Sub Macro11(control As IRibbonControl)
MsgBox control.ID
End Sub
...
Bây giờ tôi muốn đưa 1 đoạn code ở dưới vào để tạo addin
Sub DelObjects()
Dim i As Long, wks As Worksheet
On Error Resume Next
Set wks = ActiveSheet
For i = 1 To 10000
wks.Shapes(1).Delete
Next
MsgBox "Còn " & wks.Shapes.Count & " objects"
End Sub
(1)Đưa code vào chỗ nào để bấm vào nút thứ 1 thì nó chạy code?
Cảm ơn sự hướng dẫn tận tình của bạn
Ở bài trên bạn có nói: Bạn đang nói tới menu được tạo bởi nội dung sau trong XML
Tôi thực sự không biết file XML này ở đâu & mở nó = cái gì? vì code trong File Chân dài chỉ có 1 module1 (đã nói ở trên)
Ở bài 7 của bạn Tôi chỉ biết tải 2 file nén về, rồi chạy OfficeCustomUIEditor.msi
Rồi chạy file chan_dai.xlsm sau đó chọn file này làm addin
Hình như bạn í không biết mở cái này
Nếu đúng vậy thì bạn xem lúc cài đặt nó ở đâu thì tìm ở đó
Thông thường thì ổ C ->program Files -> Custom UIEditor
Cho em hỏi anh @batman1 và các anh/chị trên GPE,
Như anh Batman1 có hướng dẫn viết code trên custom UI, việc tạo nút dùng thẻ Button id, tạo menu dùng thẻ menu id...
Nếu em muốn thêm 1 textbox vào Group id, thì code trên custom UI sẽ làm thế nào ạ?
Mục đích: để nhập đường dẫn vào (hoặc có nút Browse chọn đường dẫn đưa vào textbox) xong thực hiện việc lưu file/sheet theo textbox đó.
(ý tưởng như hình vẽ)
Cho em hỏi anh @batman1 và các anh/chị trên GPE,
Như anh Batman1 có hướng dẫn viết code trên custom UI, việc tạo nút dùng thẻ Button id, tạo menu dùng thẻ menu id...
Nếu em muốn thêm 1 textbox vào Group id, thì code trên custom UI sẽ làm thế nào ạ?
Mục đích: để nhập đường dẫn vào (hoặc có nút Browse chọn đường dẫn đưa vào textbox) xong thực hiện việc lưu file/sheet theo textbox đó.
(ý tưởng như hình vẽ)
Tôi giải thích từ A đến Z cho bạn hiểu cách thức hoạt động của editBox.
Khi ribbon cần text để hiển thị trong editBox thì nó sẽ gọi call back getText nếu có. Nhìn XML ở trên thì có getText="GetEditBoxText", và ribbon gọi GetEditBoxText mỗi khi cần text để hiển thị trong editBox. Khi nào ribbon cần hiển thị text trong editBox? Vd. khi bạn chọn thẻ mà mình tạo. Ở thời điểm "chào buổi sáng" thì ribbon phải có text để nhập vào editBox. Vì thế nó sẽ gọi GetEditBoxText. Trong code của GetEditBoxText bạn phải trả về text mà ribbon sẽ hiển thị trong editBox. GetEditBoxText cũng được gọi khi code của bạn gọi InvalidateControl ("editBox1") để làm mới editBox.
Mỗi khi có sự thay đổi trong editBox thì onChange sẽ được thực hiện nếu có. Nhìn ở trên thấy onChange="EditBoxTextChanged" nên mỗi khi nhập gì đó trong editBox rồi click ô nào đó trên sheet (kết thúc nhập trong editBox) hoặc nhấn Button1 trên sheet (kết thúc nhập trong editBox) thì EditBoxTextChanged sẽ được gọi để thực thi. Trong call back EditBoxTextChanged thì tham số text chính là nội dung đang có trong editBox.
Trong ví dụ bạn không thể nhập "thich con gai" được (nhập xong rồi nhấn Button1 hoặc chọn ô bất kỳ trên sheet để ra hiệu là việc nhập editBox đã hoàn tất). Nếu nhập "thich con gai" thì thông báo sẽ hiện ra và editBox được phục hồi về giá trị cuối cùng trước lỗi.
Nhìn code ở dưới thì thấy ở mọi thời điểm thì nội dung trong editBox và currText là như nhau.
Code trong Module1
Mã:
Private rb As IRibbonUI
Public currText As String
'Callback for customUI.onLoad
Sub RibbonLoad(ribbon As IRibbonUI)
Set rb = ribbon
currText = "hichic" ' ghi nho noi dung cua editBox o thoi diem "chao buoi sang" trong bien currText
End Sub
'Callback for editBox1 onChange
Sub EditBoxTextChanged(control As IRibbonControl, text As String)
' khong cho phep nhap "thich con gai". Neu cau nay duoc nhap thi noi dung cu se duoc phuc hoi
If text <> "thich con gai" Then
currText = text
Else
MsgBox "thich con gai la cau noi bi cam. Khong duoc phep nhe!" ' thong bao lenh cam
rb.InvalidateControl ("editBox1") ' goi InvalidateControl cho editBox1 nen GetEditBoxText se duoc goi de thuc hien
End If
End Sub
'Callback for editBox1 getText
Sub GetEditBoxText(control As IRibbonControl, ByRef returnedVal)
returnedVal = currText ' lay currText de lam nguon nhap vao, lam moi editBox
End Sub
Tôi giải thích từ A đến Z cho bạn hiểu cách thức hoạt động của editBox.
Khi ribbon cần text để hiển thị trong editBox thì nó sẽ gọi call back getText nếu có. Nhìn XML ở trên thì có getText="GetEditBoxText", và ribbon gọi GetEditBoxText mỗi khi cần text để hiển thị trong editBox. Khi nào ribbon cần hiển thị text trong editBox? Vd. khi bạn chọn thẻ mà mình tạo. Ở thời điểm "chào buổi sáng" thì ribbon phải có text để nhập vào editBox. Vì thế nó sẽ gọi GetEditBoxText. Trong code của GetEditBoxText bạn phải trả về text mà ribbon sẽ hiển thị trong editBox. GetEditBoxText cũng được gọi khi code của bạn gọi InvalidateControl ("editBox1") để làm mới editBox.
Mỗi khi có sự thay đổi trong editBox thì onChange sẽ được thực hiện nếu có. Nhìn ở trên thấy onChange="EditBoxTextChanged" nên mỗi khi nhập gì đó trong editBox rồi click ô nào đó trên sheet (kết thúc nhập trong editBox) hoặc nhấn Button1 trên sheet (kết thúc nhập trong editBox) thì EditBoxTextChanged sẽ được gọi để thực thi. Trong call back EditBoxTextChanged thì tham số text chính là nội dung đang có trong editBox.
Trong ví dụ bạn không thể nhập "thich con gai" được (nhập xong rồi nhấn Button1 hoặc chọn ô bất kỳ trên sheet để ra hiệu là việc nhập editBox đã hoàn tất). Nếu nhập "thich con gai" thì thông báo sẽ hiện ra và editBox được phục hồi về giá trị cuối cùng trước lỗi.
Nhìn code ở dưới thì thấy ở mọi thời điểm thì nội dung trong editBox và currText là như nhau.
Code trong Module1
Mã:
Private rb As IRibbonUI
Public currText As String
'Callback for customUI.onLoad
Sub RibbonLoad(ribbon As IRibbonUI)
Set rb = ribbon
currText = "hichic" ' ghi nho noi dung cua editBox o thoi diem "chao buoi sang" trong bien currText
End Sub
'Callback for editBox1 onChange
Sub EditBoxTextChanged(control As IRibbonControl, text As String)
' khong cho phep nhap "thich con gai". Neu cau nay duoc nhap thi noi dung cu se duoc phuc hoi
If text <> "thich con gai" Then
currText = text
Else
MsgBox "thich con gai la cau noi bi cam. Khong duoc phep nhe!" ' thong bao lenh cam
rb.InvalidateControl ("editBox1") ' goi InvalidateControl cho editBox1 nen GetEditBoxText se duoc goi de thuc hien
End If
End Sub
'Callback for editBox1 getText
Sub GetEditBoxText(control As IRibbonControl, ByRef returnedVal)
returnedVal = currText ' lay currText de lam nguon nhap vao, lam moi editBox
End Sub
Ngay dòng đầu của Code Xml để tạo Ribbon có đoạn: <?xml version="1.0" encoding="UTF-8"?>
Cái này có liên quan gì đến phiên bản của Excel không? Vì em đang gặp thực trạng sau:
- Add-in vào Excel 2016 dùng ổn.
- Add-in vào Excel 365 thì sau khi add, ribbon có hiện lên. Nhưng khi tắt file đi bật lại thì Ribbon lại mất. Kiểm tra trong hộp thoại Add-in thì vẫn check.
Ngay dòng đầu của Code Xml để tạo Ribbon có đoạn: <?xml version="1.0" encoding="UTF-8"?>
Cái này có liên quan gì đến phiên bản của Excel không? Vì em đang gặp thực trạng sau:
- Add-in vào Excel 2016 dùng ổn.
- Add-in vào Excel 365 thì sau khi add, ribbon có hiện lên. Nhưng khi tắt file đi bật lại thì Ribbon lại mất. Kiểm tra trong hộp thoại Add-in thì vẫn check.
Ngay dòng đầu của Code Xml để tạo Ribbon có đoạn: <?xml version="1.0" encoding="UTF-8"?>
Cái này có liên quan gì đến phiên bản của Excel không? Vì em đang gặp thực trạng sau:
- Add-in vào Excel 2016 dùng ổn.
- Add-in vào Excel 365 thì sau khi add, ribbon có hiện lên. Nhưng khi tắt file đi bật lại thì Ribbon lại mất. Kiểm tra trong hộp thoại Add-in thì vẫn check.
Vâng, em cũng thấy hơi lạ, không hiểu có phải do xung đột các Add-in hay không? mặc dù e cũng thử gỡ tất cả các addin chỉ để mình nó, vẫn bị tình trạng vậy.
Add-in vào Excel 365 thì sau khi add, ribbon có hiện lên. Nhưng khi tắt file đi bật lại thì Ribbon lại mất. Kiểm tra trong hộp thoại Add-in thì vẫn check.
Khi bạn mở trực tiếp file.xlam mà không hiện được ribbon -> chứng tỏ file.xlam đó có vấn đề.
Còn vấn đề của bạn
là do MS Excel không mở được file.xlam đó lên thôi (mặc dù vẫn có cái bạn mô tả là "vẫn check").
Cách khắc phục đơn giản đó là chép file.xlam vào thư mục Excel\XLSTART.
Bạn thử gửi file xml lên đi, có khi bạn viết sai mã cũng nên ấy. Chỉ cần sai một lỗi nhỏ như chữ hoa mà bạn lại viết thường hoặc quên dấu "/" là Ribbon cũng không hiện lên được rồi, mặc dù trong mục addin vẫn tích như thường
Bạn thử gửi file xml lên đi, có khi bạn viết sai mã cũng nên ấy. Chỉ cần sai một lỗi nhỏ như chữ hoa mà bạn lại viết thường hoặc quên dấu "/" là Ribbon cũng không hiện lên được rồi, mặc dù trong mục addin vẫn tích như thường
là do MS Excel không mở được file.xlam đó lên thôi (mặc dù vẫn có cái bạn mô tả là "vẫn check").
Cách khắc phục đơn giản đó là chép file.xlam vào thư mục Excel\XLSTART.
là do MS Excel không mở được file.xlam đó lên thôi (mặc dù vẫn có cái bạn mô tả là "vẫn check").
Cách khắc phục đơn giản đó là chép file.xlam vào thư mục Excel\XLSTART.
Bây giờ e mới tìm được nguyên nhân, và cách khắc phục, em Post lên để nếu anh/chị nào gặp tình huống không load được Addin khi mở Excel có thể có giải pháp.
Bước 1: Click phải chuột vào File addin chọn Properties
Bước 2: Tab General, tích chọn Unblock
Bạn làm theo người ta chỉ mà máy móc không hiểu.
Bạn đọc dòng ghi chú cạnh nút unlock ở hình bài bạn gửi nghĩa là gì.
Tự tạo trên một máy tính nào đó, rồi chép file đó sang máy tính khác thì dính chưởng thôi.
Bạn làm theo người ta chỉ mà máy móc không hiểu.
Bạn đọc dòng ghi chú cạnh nút unlock ở hình bài bạn gửi nghĩa là gì.
Tự tạo trên một máy tính nào đó, rồi chép file đó sang máy tính khác thì dính chưởng thôi.
Chời.
Thì rõ thông báo đó nó ghi là "might be", chứ không phải là chắc chắn.
Tức là nếu không bỏ khóa (unblock) thì chạy được hay không phụ thuộc vào thiết lập UAC của từng hệ điều hành.
Nếu bạn unblock thì chạy trên mọi máy tính cho kết quả như nhau.
Nếu bạn muốn hiểu sâu xa hơn thì tìm hiểu về 'policy' của Windows.