Add-Ins Tạo Menu RibbonTiếng Việt Có Dấu Cho Office

Liên hệ QC
Trả lời ý 1&3: Tốt nhất là làm theo cách của Hữu Thắng (đổi lại vị trí cột A và B)(Sửa lại code trong module MyCoder)
Trả lời ý 4: Mình chưa biết Fso, bạn có thể sửa lại mã nguồn theo ý. Hoặc có thể gửi 1 vài đường link cơ bản về Fso để mình nghiên cứu.

(Đính chính : Không đổi vị trí cột A và B cũng được, tương đối giống nhau mà, có điều bẫy lỗi chưa chuẩn nên bạn không thấy, bạn chọn Type ở cột B xong click ô bất kỳ cùng dòng là sẽ thấy)
Nếu bạn chưa hiểu Fso co thể tham khảo thêm Link chữ ký của mình FileSystemObject

Từ từ ta điều chỉnh lại làm sao thân thiện và dễ sử dụng nhất ...

Nếu Hiên đại quá mà khó sử dụng rắc rối và lỗi thì thật sự rất bất tiện
 
chọn type ở cột B nếu chọn menu thì mình chưa thấy nó tạo "end menu" ( có thể gà mờ chưa biết sử dụng)
còn fso hình như là vầy nà, copy code thôi nhoa nên khó hiểu chút.
Mã:
Public Sub XulyChenAnhBenNgoai(DuongDan, TenFile)
    ReDim Arr_Image(1 To 1000, 1 To 4)
    Dim Arr()
    Dim Obj1, GetAName
[COLOR=#ff0000][B]    Set Obj1 = CreateObject("Scripting.FileSystemObject")[/B][/COLOR]
    Dim RwC As Long, ColC As Long, i As Long, x As Byte
    Dim Path_Images As String, Path_rels As String
    RwC = Sheet1.UsedRange.Rows.Count
    ColC = Sheet1.UsedRange.Columns.Count
    Arr = Sheet1.Range(Cells(1, 1), Cells(RwC, ColC)).Value
    'lay link hinh anh vao mang
    For i = Row_Type + 2 To RwC
        If Len(Arr(i, Col_Image)) > 0 Then
            x = x + 1
            Arr_Image(x, 1) = Arr(i, Col_Image) 'C:\VanTan\Image1.png
            Arr_Image(x, 2) = Function_NameFiles(Arr_Image(x, 1), 1) 'Image1.png
            Arr_Image(x, 3) = Function_NameFiles(Arr_Image(x, 1), 2) 'Image1
            Arr_Image(x, 4) = Function_NameFiles(Arr_Image(x, 1), 3) 'png
        End If
    Next i
    'Ten 2 duong dan image va _rels
    Path_Images = DuongDan & "\images"
    Path_rels = DuongDan & "\_rels"
    'neu co 2 thu muc do thi xoa di
    If Obj1.FolderExists(Path_Images) Then _
            Obj1.DeleteFolder Path_Images
    Path_rels = DuongDan & "\_rels"
    If Obj1.FolderExists(Path_rels) Then _
            Obj1.DeleteFolder Path_rels
    'Neu khong co hinh anh nao duoc chen ti thoat Sub
    If x = 0 Then Exit Sub
    'Tao thu muc images
    MkDir Path_Images
    'copy hinh anh tu duong dan vao thu muc vua tao
    For i = 1 To x
        FileCopy Arr_Image(i, 1), Path_Images & "\" & Arr_Image(i, 2)
    Next i
    'tao thu muc _rels
    MkDir Path_rels
    'tao file customUI.xml.rels
[COLOR=#ff0000][B]    Const ForReading = 1, ForWriting = 2, ForAppending = 8[/B]
[B]    Set GetAName = Obj1.OpenTextFile(Path_rels & "\" & TenFile & ".rels", ForWriting, True)[/B]
[B]    With GetAName[/B]
[B]        .Write Get_RELS(Arr_Image, x)[/B]
[B]        .Close[/B]
[B]    End With[/B][/COLOR]
End Sub
hình như bác mạnh muốn là công việc ở chỗ in đậm thì phải. nó quất được chuỗi unicode vào file xml luôn ý. chả cần chuyển mã, dịch mã gì cả.
thấy file bác hình như còn chưa có code tạo file _rels chèn ảnh bên ngoài nhỉ. ngta tạo nghịch đủ trò hết bác ak, mấy cái imageMso sẵn có không thỏa mãn hết nhu cầu đâu bác ạ. (mong bác hoàn thành để học hỏi thêm)
chưa text tạo ribbon ra sao. không biết là có chèn cả code theo onAction với onChange theo người dùng không, hay là phải qua sheet VBA copy dán vào. có gì bác update file trang 1 cho người ta dễ tải, chứ ng mới vô đọc đến trang 9 mới có được file cuối cùng hoàn thiện của bác.
đúng rồi đó nó xử Uncode trực tiếp vào File customUI.xml luôn mà như file đơn giản nhất chỉ tạo Tab mình Úp bài 1 đó nó xử Ok mà ....

Còn code Bạn úp đó áp dụng cho File nào vậy Mình mới coi chưa nghiên cứu kỹ

Nếu Ghi vào file .res không thì mạnh tách ra sử dụng như sau
Mã:
Private Sub AddrelsFile(ByVal Fso As Object, ByVal Extension As String, ByVal relsFile As String)
    Dim XML As String
    XML = "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" & vbNewLine:
    XML = XML & "<Relationships xmlns=""http://schemas.openxmlformats.org/package/2006/relationships"">"
    XML = XML & "<Relationship Id=""rId3"" Type=""http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"" Target=""docProps/app.xml""/>"
    XML = XML & "<Relationship Id=""rId2"" Type=""http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"" Target=""docProps/core.xml""/>"
    XML = XML & "<Relationship Id=""rId1"" Type=""http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"" Target=""xl/workbook." & _
    IIf(UCase(Extension) = "XLSB", "bin""/>", "xml""/>") & Get_IDrels
    With Fso.CreateTextFile(relsFile, True) 
        .Write XML
        .Close
    End With
End Sub

Hay sử dụng Hàm sau nó tương tự như vậy
Mã:
Private Sub AddCustomUIToRels(ByVal sRels As String)
    Dim oXMLDoc  As Object, oXMLElement As Object
    Dim oXMLAttrib As Object, oNamedNodeMap As Object
    Dim oXMLRelsList As Object
    Set oXMLDoc = CreateObject("Msxml2.DOMDocument.3.0")
    oXMLDoc.Load sRels
    Set oXMLElement = oXMLDoc.createNode(1, "Relationship", _
        "http://schemas.openxmlformats.org/package/2006/relationships")
    Set oNamedNodeMap = oXMLElement.Attributes
    Set oXMLAttrib = oXMLDoc.createAttribute("Id")
    If AppVersion < 12 Then
        oXMLAttrib.NodeValue = "cuID"      ''// Office 2007
    Else
        oXMLAttrib.NodeValue = "cuID14"    ''// Office 2010 Va Office 2016
    End If
    oNamedNodeMap.setNamedItem oXMLAttrib
    Set oXMLAttrib = oXMLDoc.createAttribute("Type")
    If AppVersion < 12 Then     ''// For Office2007
        oXMLAttrib.NodeValue = "http://schemas.microsoft.com/office/2006/relationships/ui/extensibility"
    Else                        ''// For Office 2010 Va Office 2016
        oXMLAttrib.NodeValue = "http://schemas.microsoft.com/office/2007/relationships/ui/extensibility"
    End If
    oNamedNodeMap.setNamedItem oXMLAttrib
    Set oXMLAttrib = oXMLDoc.createAttribute("Target")
    If AppVersion < 12 Then
        oXMLAttrib.NodeValue = "customUI/customUI.xml"          ''// Office 2007
    Else
        oXMLAttrib.NodeValue = "customUI/customUI14.xml"        ''// Office 2010  Va Office 2016
    End If
    oNamedNodeMap.setNamedItem oXMLAttrib
    Set oXMLRelsList = oXMLDoc.SelectNodes("/Relationships")
    oXMLRelsList.Item(0).appendChild oXMLElement
    oXMLDoc.Save sRels
    Set oXMLDoc = Nothing
    Set oXMLAttrib = Nothing
    Set oXMLElement = Nothing
End Sub
 
Lần chỉnh sửa cuối:
đã inbox cho bác, toàn lụm lọc rồi chỉnh sửa lại không à. chả có cái gì của mình cả.
Mình mới thử lần 1 lỗi dòng sau: Vì máy Bạn Win64 Máy mình Win32 cái này đơn giản ta làm cái If là xong

Rem MyFile = "C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB"
MyFile = "C:\Program Files\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB"


sửa lỗi Lần 1 chạy lại lỗi dòng sau ....Coi code nhức đầu quá

FileCopy Arr_Image(i, 1), Path_Images & "" & Arr_Image(i, 2)
 
Mình mới thử lần 1 lỗi dòng sau: Vì máy Bạn Win64 Máy mình Win32 cái này đơn giản ta làm cái If là xong

Rem MyFile = "C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB"
MyFile = "C:\Program Files\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB"


sửa lỗi Lần 1 chạy lại lỗi dòng sau ....Coi code nhức đầu quá

FileCopy Arr_Image(i, 1), Path_Images & "" & Arr_Image(i, 2)
lỗi dòng đó là do đường link đến file ảnh sai ấy bác mạnh ạ. dòng 40 41 ở cột G có 2 link file ảnh.bác nhấn đúp vào ô tương ứng rồi chọn icon trong máy bác thôi là xong. nhỏ hơn 500x500 pixel nhe bác
 
lỗi dòng đó là do đường link đến file ảnh sai ấy bác mạnh ạ. dòng 40 41 ở cột G có 2 link file ảnh.bác nhấn đúp vào ô tương ứng rồi chọn icon trong máy bác thôi là xong. nhỏ hơn 500x500 pixel nhe bác
Ok thấy Rồi ...Nhưng mới thử File đã có customUI14.xml (2010) nó chen code vao được nhưng Ribbon ko tạo được
 
lạ nhỉ. e chọn 2010 nó vẫn ra mà ta
Bạn Thêm 2 dòng sau vào Hàm ExportLanguage

xử lý lỗi Khi Folder đã tồn tại ... mà tại sao Xài Fso thì chơi Fso luôn đi còn Xài hàm MkDir của VB6 làm chi vậy Hàm đó nếu Folder là Tiếng Việt có dấu là Tèo đó VD: D:\Kiều Mạnh\lan

Language = DefPath & "\lan" '' ====>> Folder luu Ngon ngu
MkDir DefPath & "\lan"

Sửa dòng trên như sau

If Not Obj1.FolderExists(Language) Then Obj1.CreateFolder (Language)

Nhờ Bạn gửi cho một ít Ảnh
500x500 pixel ....để quậy một chút ... Mình ko có
 
Lần chỉnh sửa cuối:
Bạn Thêm 2 dòng sau vào Hàm ExportLanguage

xử lý lỗi Khi Folder đã tồn tại ... mà tại sao Xài Fso thì chơi Fso luôn đi còn Xài hàm MkDir của VB6 làm chi vậy Hàm đó nếu Folder là Tiếng Việt có dấu là Tèo đó VD: D:\Kiều Mạnh\lan

Language = DefPath & "\lan" '' ====>> Folder luu Ngon ngu
MkDir DefPath & "\lan"

Sửa dòng trên như sau

If Not Obj1.FolderExists(Language) Then Obj1.CreateFolder (Language)

Nhờ Bạn gửi cho một ít Ảnh
500x500 pixel ....để quậy một chút ... Mình ko có
fso e không biết nhiều, chỉ biết có 1 vài thứ à. với lại gõ lệnh nó không hiện gợi ý tiếp theo nên chả biết nó có cái gì và chức năng ra sao nữa.
chủ yếu sử dụng code có sẵn của phan ngoc lan. để nào rảnh rồi mổ sẻ file của phan ngoc lan làm 1 file hỗ trợ viết code.
còn lúc tạo ribbon 2010 thì chắc là sửa lại tại
Mã:
Public Function Get_XML(ByRef GTri As Boolean) As String
    Dim a As Long, b As Long, c As Long, s As String, Arrs, Arrd(1 To 10000)
[COLOR=#ff0000]    If Sheet1.Range("B1").Value = "2007" Then CustUI = [/COLOR][B][COLOR=#0000ff]"2006/01"[/COLOR][/B][COLOR=#ff0000] Else CusUI = [/COLOR][B][COLOR=#0000ff]"2009/07"[/COLOR][/B][COLOR=#ff0000][/COLOR]
[COLOR=#ff0000]    Arrd(1) = Replace("<customUI xmlns=""http://schemas.microsoft.com/office/[/COLOR][COLOR=#0000ff][B]CusUI[/B][/COLOR][COLOR=#ff0000]/customui""" & IIf(Len(Sheet1.Cells(2, 2).Value) > 0, " onLoad=""" & Sheet1.Cells(2, 2).Value & """", "") & ">", "CusUI", CusUI)[/COLOR]
chắc là do chỗ đó đối với file customUI với customUI14
còn chèn ảnh bên ngoài nó báo lỗi lúc mở lên thì chịu. e dùng thử chương trình khác tạo ribbon nó cũng báo tương tự vậy.
còn ảnh đây bác. tha hồ chọn
 
fso e không biết nhiều, chỉ biết có 1 vài thứ à. với lại gõ lệnh nó không hiện gợi ý tiếp theo nên chả biết nó có cái gì và chức năng ra sao nữa.
chủ yếu sử dụng code có sẵn của phan ngoc lan. để nào rảnh rồi mổ sẻ file của phan ngoc lan làm 1 file hỗ trợ viết code.
còn lúc tạo ribbon 2010 thì chắc là sửa lại tại
Mã:
Public Function Get_XML(ByRef GTri As Boolean) As String
    Dim a As Long, b As Long, c As Long, s As String, Arrs, Arrd(1 To 10000)
[COLOR=#ff0000]    If Sheet1.Range("B1").Value = "2007" Then CustUI = [/COLOR][B][COLOR=#0000ff]"2006/01"[/COLOR][/B][COLOR=#ff0000] Else CusUI = [/COLOR][B][COLOR=#0000ff]"2009/07"[/COLOR][/B]
[COLOR=#ff0000]    Arrd(1) = Replace("<customUI xmlns=""http://schemas.microsoft.com/office/[/COLOR][COLOR=#0000ff][B]CusUI[/B][/COLOR][COLOR=#ff0000]/customui""" & IIf(Len(Sheet1.Cells(2, 2).Value) > 0, " onLoad=""" & Sheet1.Cells(2, 2).Value & """", "") & ">", "CusUI", CusUI)[/COLOR]
chắc là do chỗ đó đối với file customUI với customUI14
còn chèn ảnh bên ngoài nó báo lỗi lúc mở lên thì chịu. e dùng thử chương trình khác tạo ribbon nó cũng báo tương tự vậy.
còn ảnh đây bác. tha hồ chọn

dòng màu đỏ đã tìm ra nguyên nhân lỗi Format khi mở File lên là do File [Content_Types].xml nó chưa load được sự thay đổi khi chèn Ảnh ngoài vào ..

Test Như Sau:
1/ Tạo 1 file xong mở lên thấy lỗi Save As File đó sang tên khác cùng đuôi File xong Close lại

2/ Xong Mở file vừa vừa Save As đó lên xem hết lỗi xong đóng lại ... Xong Mở nó Với WinRaR giải nén File [Content_Types].xml ra xong đóng lại

3/ Mở File lỗi lên với WinRaR kéo File vừa giải nén vào file Lỗi Lưu đè trong Giao diện WinRaR ....OK

4/ Nghiên cứu Code cho File [Content_Types].xml Nó load khi chèn Hình ngoài vào là OK

5/ Bạn mở File [Content_Types].xml lỗi lên Copy ra Word xong Mở File OK lên Copy ra Word so sánh là thấy sự khác biệt của nó ...Từ đó nghiên cứu mà code cho nó load khi chèn Ảnh ngoài vào là Ok
 
dòng màu đỏ đã tìm ra nguyên nhân lỗi Format khi mở File lên là do File [Content_Types].xml nó chưa load được sự thay đổi khi chèn Ảnh ngoài vào ..

Test Như Sau:
1/ Tạo 1 file xong mở lên thấy lỗi Save As File đó sang tên khác cùng đuôi File xong Close lại

2/ Xong Mở file vừa vừa Save As đó lên xem hết lỗi xong đóng lại ... Xong Mở nó Với WinRaR giải nén File [Content_Types].xml ra xong đóng lại

3/ Mở File lỗi lên với WinRaR kéo File vừa giải nén vào file Lỗi Lưu đè trong Giao diện WinRaR ....OK

4/ Nghiên cứu Code cho File [Content_Types].xml Nó load khi chèn Hình ngoài vào là OK

5/ Bạn mở File [Content_Types].xml lỗi lên Copy ra Word xong Mở File OK lên Copy ra Word so sánh là thấy sự khác biệt của nó ...Từ đó nghiên cứu mà code cho nó load khi chèn Ảnh ngoài vào là Ok
xong code cho file [content_Types].xml mà không biết cách nén nó vào bác ạ.
đã thử với
Set Obj1 = CreateObject("Scripting.FileSystemObject")
Set Obj2 = CreateObject("Shell.Application")
copy hay move vào cũng toàn báo lỗi e làm cái đường dẫn là để lôi ra bên ngoài hay di chuyển vào file zip như này <tên file excel> & ".zip\[Content_Types].xml"
còn nội dung file đó thì đây
áp dụng cho file em gửi nhé
Mã:
Public Function Get_Content_Types(ByVal Arr As Variant, ByVal x As Byte)
    '<Default Extension=^png^ ContentType=^image/png^/>
    Dim i As Byte
    Dim DinhDangAnh, NDungKhaiBao As String, NDung_Content_Types As String
    For i = 1 To x 'lay nhung dinh dang anh chen tu ben ngoai
        If Not (DinhDangAnh Like "* " & Arr(i, 4) & " *") Then DinhDangAnh = DinhDangAnh & " " & Arr(i, 4) & " "
    Next i
    'xoa nhung khoang trang du
    DinhDangAnh = Application.WorksheetFunction.Trim(DinhDangAnh)
    'xoa mang
    Set Arr = Nothing
    'lay dinh dang duoi anh vao mang
    Arr = Split(DinhDangAnh, " ")
    For i = LBound(Arr) To UBound(Arr) 'viet code khai bao dinh dang
        NDungKhaiBao = NDungKhaiBao & Replace("<Default Extension=^xxx^ ContentType=^image/xxx^/>", "xxx", Arr(i))
    Next i
    'noi dung xml
    NDung_Content_Types = "<Types xmlns=^http://schemas.openxmlformats.org/package/2006/content-types^>" & vbNewLine & _
            NDungKhaiBao & _
            "<Default Extension=^wmf^ ContentType=^image/x-wmf^/>" & _
            "<Default Extension=^rels^ ContentType=^application/vnd.openxmlformats-package.relationships+xml^/>" & _
            "<Default Extension=^xml^ ContentType=^application/xml^/>" & _
            "<Override PartName=^/xl/workbook.xml^ ContentType=^application/vnd.ms-excel.sheet.macroEnabled.main+xml^/>" & _
            "<Override PartName=^/xl/worksheets/sheet1.xml^ ContentType=^application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml^/>" & _
            "<Override PartName=^/xl/theme/theme1.xml^ ContentType=^application/vnd.openxmlformats-officedocument.theme+xml^/>" & _
            "<Override PartName=^/xl/styles.xml^ ContentType=^application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml^/>" & _
            "<Override PartName=^/docProps/core.xml^ ContentType=^application/vnd.openxmlformats-package.core-properties+xml^/>" & _
            "<Override PartName=^/docProps/app.xml^ ContentType=^application/vnd.openxmlformats-officedocument.extended-properties+xml^/></Types>"
    Get_Content_Types = Replace(NDung_Content_Types, "^", """")
End Function
 
Lần chỉnh sửa cuối:
xong code cho file [content_Types].xml mà không biết cách nén nó vào bác ạ.
đã thử với
Set Obj1 = CreateObject("Scripting.FileSystemObject")
Set Obj2 = CreateObject("Shell.Application")
copy hay move vào cũng toàn báo lỗi e làm cái đường dẫn là để lôi ra bên ngoài hay di chuyển vào file zip như này <tên file excel> & ".zip\[Content_Types].xml"
còn nội dung file đó thì đây
áp dụng cho file em gửi nhé
Mã:
Public Function Get_Content_Types(ByVal Arr As Variant, ByVal x As Byte)
    '<Default Extension=^png^ ContentType=^image/png^/>
    Dim i As Byte
    Dim DinhDangAnh, NDungKhaiBao As String, NDung_Content_Types As String
    For i = 1 To x 'lay nhung dinh dang anh chen tu ben ngoai
        If Not (DinhDangAnh Like "* " & Arr(i, 4) & " *") Then DinhDangAnh = DinhDangAnh & " " & Arr(i, 4) & " "
    Next i
    'xoa nhung khoang trang du
    DinhDangAnh = Application.WorksheetFunction.Trim(DinhDangAnh)
    'xoa mang
    Set Arr = Nothing
    'lay dinh dang duoi anh vao mang
    Arr = Split(DinhDangAnh, " ")
    For i = LBound(Arr) To UBound(Arr) 'viet code khai bao dinh dang
        NDungKhaiBao = NDungKhaiBao & Replace("<Default Extension=^xxx^ ContentType=^image/xxx^/>", "xxx", Arr(i))
    Next i
    'noi dung xml
    NDung_Content_Types = "<Types xmlns=^http://schemas.openxmlformats.org/package/2006/content-types^>" & vbNewLine & _
            NDungKhaiBao & _
            "<Default Extension=^wmf^ ContentType=^image/x-wmf^/>" & _
            "<Default Extension=^rels^ ContentType=^application/vnd.openxmlformats-package.relationships+xml^/>" & _
            "<Default Extension=^xml^ ContentType=^application/xml^/>" & _
            "<Override PartName=^/xl/workbook.xml^ ContentType=^application/vnd.ms-excel.sheet.macroEnabled.main+xml^/>" & _
            "<Override PartName=^/xl/worksheets/sheet1.xml^ ContentType=^application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml^/>" & _
            "<Override PartName=^/xl/theme/theme1.xml^ ContentType=^application/vnd.openxmlformats-officedocument.theme+xml^/>" & _
            "<Override PartName=^/xl/styles.xml^ ContentType=^application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml^/>" & _
            "<Override PartName=^/docProps/core.xml^ ContentType=^application/vnd.openxmlformats-package.core-properties+xml^/>" & _
            "<Override PartName=^/docProps/app.xml^ ContentType=^application/vnd.openxmlformats-officedocument.extended-properties+xml^/></Types>"
    Get_Content_Types = Replace(NDung_Content_Types, "^", """")
End Function
Đây Cắt Ra Cắt vào ....

Mã:
Sub Test_CutRa()
    Dim ZipFile, Path
    Path = ThisWorkbook.Path
    ZipFile = Path & "\YourApp.xlsm.zip"
    With CreateObject("Shell.Application")
        .Namespace(Path).MoveHere .Namespace(ZipFile).items.Item("[Content_Types].xml")
    End With
End Sub


Sub Test_CutVao()
    Dim Path, ZipFile
    Path = ThisWorkbook.Path
    ZipFile = Path & "\YourApp.xlsm.zip"
        
    With CreateObject("Shell.Application")
        .Namespace(ZipFile).MoveHere .Namespace(Path).items.Item("[Content_Types].xml")
    End With
End Sub

Mình đang bận chút tối coi lại Bạn thử xem có gì Báo lại
 
Mình đang bận chút tối coi lại Bạn thử xem có gì Báo lại
có vấn đề rồi bác ạ. khi sửa file [Content_Types].xml thì toàn bộ code đã chèn trước đó sẽ mất.
còn nếu sửa xong rồi mới chèn code ở bước cuối thì khi chèn code thì phải nhấn F8 từ từ mới chèn được vì lúc mở lên nó bị lỗi 400, không là không tạo được ribbon luôn. và chèn code xong rồi thì lúc mở lên có thông báo "thành công" nhưng hình ảnh chèn ở bên ngoài thì không load vào được khai báo ảnh ở [Content_Types].xml cũng mất luôn, chắc phải sống chung với lũ, chơi 1 phát nữa. mở file lên dùng senkey thao tác tự sửa lỗi quá.
 
có vấn đề rồi bác ạ. khi sửa file [Content_Types].xml thì toàn bộ code đã chèn trước đó sẽ mất.
còn nếu sửa xong rồi mới chèn code ở bước cuối thì khi chèn code thì phải nhấn F8 từ từ mới chèn được vì lúc mở lên nó bị lỗi 400, không là không tạo được ribbon luôn. và chèn code xong rồi thì lúc mở lên có thông báo "thành công" nhưng hình ảnh chèn ở bên ngoài thì không load vào được khai báo ảnh ở [Content_Types].xml cũng mất luôn, chắc phải sống chung với lũ, chơi 1 phát nữa. mở file lên dùng senkey thao tác tự sửa lỗi quá.
Hàm Get_Content_Types

không xài được
Test bằng cách tạo File Lỗi xong Xuất File [Content_Types].xml ra chạy hàm đó xong kéo trả lại file thì mở File lên hỏng luôn File

Trình độ Code két của Mình còn hạn chế nên Tách ra nhiều phần Test khi nào kiểm soát ok thì mới ghép lại là phương Án tôt nhất ...

Chứ cứ viết cả một Rừng Code test không biết đâu mà lần cả ....mệt lắm +-+-+-+--=0
 
Nhờ Bạn langtuchungtinh360

Kiểm tra dùm Sub sau xem trên Máy Bạn Win64 có Ok không ...Nó tương tự như Sub CheckKey

Mình không xài Win64 nên không kiểm tra được ....Win32 thì Ok ...nếu Ok trên Win64 nữa thì Tốt
Mã:
''// Check Microsoft Visual Basic for Applications Extensibility 5.3
Public Sub Check_Extensibility()
    On Error Resume Next ''// Neu chay LAN 2 la loi nen Bay loi
    ThisWorkbook.VBProject.References.AddFromGuid _
    GUID:="{0002E157-0000-0000-C000-000000000046}", Major:=5, Minor:=3
End Sub

Tương tự Như code Sau
Mã:
Public Sub CheckKey()
    Dim MyFile As String
    Rem MyFile = "C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB"
    MyFile = "C:\Program Files\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB"
    AddFromFileDLL (MyFile)
End Sub
 
Nhờ Bạn langtuchungtinh360

Kiểm tra dùm Sub sau xem trên Máy Bạn Win64 có Ok không ...Nó tương tự như Sub CheckKey

Mình không xài Win64 nên không kiểm tra được ....Win32 thì Ok ...nếu Ok trên Win64 nữa thì Tốt
Mã:
''// Check Microsoft Visual Basic for Applications Extensibility 5.3
Public Sub Check_Extensibility()
    On Error Resume Next ''// Neu chay LAN 2 la loi nen Bay loi
    ThisWorkbook.VBProject.References.AddFromGuid _
    GUID:="{0002E157-0000-0000-C000-000000000046}", Major:=5, Minor:=3
End Sub

Tương tự Như code Sau
Mã:
Public Sub CheckKey()
    Dim MyFile As String
    Rem MyFile = "C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB"
    MyFile = "C:\Program Files\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB"
    AddFromFileDLL (MyFile)
End Sub
được bác. check OK
mà sao biết được nó là cái này thế "{0002E157-0000-0000-C000-000000000046}"
xem trong cmd à?
 
được bác. check OK
mà sao biết được nó là cái này thế "{0002E157-0000-0000-C000-000000000046}"
xem trong cmd à?

Bạn Bạn Thích thư Viện Nào thì Check Xong Chạy Code Sau là thấy hết Nó xong lấy cái Mình cần Viết Thành code
Mã:
Sub ListReference()
    Dim i As Long
    Range("A1:F100").ClearContents
    Range("A1:F1").Value = Array("Description", "References Name", _
                "GUID:", "Major:", "Minor:", "Full Path To References")
    For i = 1 To ThisWorkbook.VBProject.References.Count
        With ThisWorkbook.VBProject.References(i)
            Range("A65536").End(xlUp).Offset(1, 0) = .Description
            Range("A65536").End(xlUp).Offset(0, 1) = .Name
            Range("A65536").End(xlUp).Offset(0, 2) = .GUID
            Range("A65536").End(xlUp).Offset(0, 3) = .Major
            Range("A65536").End(xlUp).Offset(0, 4) = .Minor
            Range("A65536").End(xlUp).Offset(0, 5) = .FullPath
        End With
    Next i
End Sub
 
To thaipv

Mấy hôm nay Mạnh đang nghiên cứu đăng Ký File Ảnh do mình thiết kế cho Ribbon bằng code ....Như Bài #151 mà test tới lui các Kiểu xem thế nào mà cứ lỗi Hoài ...

Bạn có kinh nghiệm nhiều về Ribbon Mong Bạn trợ Giúp cách Viết code thế nào đăng ký khi chèn thêm Ảnh Ngoài Vào ribbon khi nó load lần đầu không báo Lỗi

Xin Cảm Ơn
 
Lần chỉnh sửa cuối:
To langtuchungtinh360

Cái vụ chèn Hình ngoài vào Mình mới thử mấy cái phần mềm nước ngoài nó cũng bị lỗi Y trang vậy...khi mở lên đó ...Thôi sống chung vối Lũ vậy....khi nào trình độ code két cao thêm một chút ta coi lại

Code trong File [Content_Types].xlm nó sẻ thay đổi liên tục theo từng File ...Phụ thuộc vào có mấy Sheet và bao nhiêu Hình chèn vào vì vậy Mình nghĩ U cả đầu mà chưa nghĩ ra được cách nó Load ....khó quá Bỏ vây
 
To langtuchungtinh360

Cái vụ chèn Hình ngoài vào Mình mới thử mấy cái phần mềm nước ngoài nó cũng bị lỗi Y trang vậy...khi mở lên đó ...Thôi sống chung vối Lũ vậy....khi nào trình độ code két cao thêm một chút ta coi lại

Code trong File [Content_Types].xlm nó sẻ thay đổi liên tục theo từng File ...Phụ thuộc vào có mấy Sheet và bao nhiêu Hình chèn vào vì vậy Mình nghĩ U cả đầu mà chưa nghĩ ra được cách nó Load ....khó quá Bỏ vây
thì vụ chèn hình trước em có nói rồi, em sử dụng chương trình khác để tạo nó cũng báo lỗi y chang vậy. mà office nó tự động sửa được cũng đỡ.
hnay xung. bung ghost cài office 64 bit để text code thì mất hết trơn hình vẽ làm hồ sơ, ngồi mấy ngày nay mới xong. @@ mất luôn cái addins viết phục vụ công việc **~**
 
Web KT
Back
Top Bottom