Page 1 of 1
เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Tue Nov 20, 2018 10:12 pm
by akekorn
สวัสดีครับ คุณคนควน และเพื่อนสมาชิกทุกท่าน
วันนี้ผมพบปัญหาแปลก ๆ คือผมได้เขียน เมนูบาร์ ขึ้นใช้เอง excel ที่ผมใช้ในที่ทำงานเป็น 2016 แต่เกิด error คือ หากผมเปิด file นี้อย่างเดียว ปุ่ม process cognos จะไม่
เป็นอะไร ทำงานได้ปกติ แต่พอผมเปิด file ใหม่ขึ้นมา ปุ่ม process cognos จะเพิ่มขึ้นเรื่อยๆหากผมสลับไปมาระหว่าง file นี้ และ file ใหม่
แต่พอมาลองเปิดที่บ้านซึ่ีงเป็น excel 2010 กลับไม่พบปํญหาดังกล่าว และใช้งานได้ปกติ
ผมจึงอย่ากรบกวน เพื่อนสมาชิกทุกท่านช่วยอนุเคราะห์ ปัญหาที่ผมเจอมาด้วยครับ
ขอบคุณมากครับ
เอก
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Tue Nov 20, 2018 11:04 pm
by snasui
เปลี่ยนจาก Activate, Deactivate มาเป็น Open และ BeforeClose แทนตามด้านล่างครับ
Code: Select all
Private Sub Workbook_Open()
'On Error Resume Next
Call COGNOSoolbar
Call COGNOSButton
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' On Error Resume Next
Application.CommandBars("Analyst_Toolbar").Delete
End Sub
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Wed Nov 21, 2018 9:15 am
by akekorn
ขอบคุณครับผม
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Fri Nov 23, 2018 9:10 pm
by OOjaoQQ
ขออนุญาติผู้มีความรู้ ช่วยแนะนำ ถ้าผมจะเพิ่ม level ต่อไป จะต้องเขียน code อย่างไรครับ พยายามแกะแล้ว แต่ไม่เข้าใจ code ครับ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Fri Nov 23, 2018 9:59 pm
by snasui
ไม่ทราบว่าเพิ่ม Level อะไร ตรงไหน อย่างไรครับ
คำอธิบายภาษาอังกฤษในไฟล์แนบเป็นการแนะนำให้เพิ่มเมนูไปที่ Quick Access Toolbar ไม่ทราบติดปัญหาตรงไหนครับ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Fri Nov 23, 2018 10:29 pm
by OOjaoQQ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Fri Nov 23, 2018 10:39 pm
by OOjaoQQ
เท่าที่ผมแกะได้คือ select case case2 if next level = 3 then
Code: Select all
Sub WBCreatePopUp()
' NOTE: There is no error handling in this subroutine
Dim MenuSheet As Worksheet
Dim MenuItem As Object
Dim SubMenuItem As CommandBarButton
Dim Row As Integer
Dim MenuLevel, NextLevel, MacroName, Caption, Divider, FaceId
''''''''''''''''''''''''''''''''''''''''''''''''''''
' Location for menu data
Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
''''''''''''''''''''''''''''''''''''''''''''''''''''
' Make sure the menus aren't duplicated
Call WBRemovePopUp
' Initialize the row counter
Row = 5
' Add the menu, menu items and submenu items using
' data stored on MenuSheet
' First we create a PopUp menu with the name of the value in B2
With Application.CommandBars.Add(ThisWorkbook.Sheets("MenuSheet"). _
Range("B2").Value, msoBarPopup, False, True)
Do Until IsEmpty(MenuSheet.Cells(Row, 1))
With MenuSheet
MenuLevel = .Cells(Row, 1)
Caption = .Cells(Row, 2)
MacroName = .Cells(Row, 3)
Divider = .Cells(Row, 4)
FaceId = .Cells(Row, 5)
NextLevel = .Cells(Row + 1, 1)
End With
Select Case MenuLevel
Case 2 ' A Menu Item
If NextLevel = 3 Then
Set MenuItem = .Controls.Add(Type:=msoControlPopup)
Else
Set MenuItem = .Controls.Add(Type:=msoControlButton)
MenuItem.OnAction = ThisWorkbook.Name & "!" & MacroName
End If
MenuItem.Caption = Caption
If FaceId <> "" Then MenuItem.FaceId = FaceId
If Divider Then MenuItem.BeginGroup = True
Case 3 ' A SubMenu Item
Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
SubMenuItem.Caption = Caption
SubMenuItem.OnAction = ThisWorkbook.Name & "!" & MacroName
If FaceId <> "" Then SubMenuItem.FaceId = FaceId
If Divider Then SubMenuItem.BeginGroup = True
End Select
Row = Row + 1
Loop
End With
End Sub
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Fri Nov 23, 2018 11:02 pm
by snasui
Code นั้นอ้างถึงชีต (MenuSheet) ที่มีการเขียน Level ของเมนูเอาไว้ ช่วยแนบไฟล์ต้นทางมาด้วยครับ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Fri Nov 23, 2018 11:09 pm
by OOjaoQQ
ไฟลน์นี้ครับ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Sat Nov 24, 2018 11:05 am
by snasui
ตัวอย่าง Code ครับ
Code: Select all
Sub WBCreatePopUp()
' NOTE: There is no error handling in this subroutine
Dim MenuSheet As Worksheet
Dim MenuItem As Object
Dim SubMenuItem As CommandBarButton
Dim MenuItem2 As Object
Dim SubMenuItem2 As CommandBarButton
Dim Row As Integer
Dim MenuLevel, NextLevel, MacroName, Caption, Divider, FaceId
''''''''''''''''''''''''''''''''''''''''''''''''''''
' Location for menu data
Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
''''''''''''''''''''''''''''''''''''''''''''''''''''
' Make sure the menus aren't duplicated
Call WBRemovePopUp
' Initialize the row counter
Row = 5
' Add the menu, menu items and submenu items using
' data stored on MenuSheet
' First we create a PopUp menu with the name of the value in B2
With Application.CommandBars.Add(ThisWorkbook.Sheets("MenuSheet"). _
Range("B2").Value, msoBarPopup, False, True)
Do Until IsEmpty(MenuSheet.Cells(Row, 1))
With MenuSheet
MenuLevel = .Cells(Row, 1)
Caption = .Cells(Row, 2)
MacroName = .Cells(Row, 3)
Divider = .Cells(Row, 4)
FaceId = .Cells(Row, 5)
NextLevel = .Cells(Row + 1, 1)
End With
Select Case MenuLevel
Case 2 ' A Menu Item
If NextLevel = 3 Then
Set MenuItem = .Controls.Add(Type:=msoControlPopup)
Else
Set MenuItem = .Controls.Add(Type:=msoControlButton)
MenuItem.OnAction = ThisWorkbook.Name & "!" & MacroName
End If
MenuItem.Caption = Caption
If FaceId <> "" Then MenuItem.FaceId = FaceId
If Divider Then MenuItem.BeginGroup = True
Case 3 ' A SubMenu Item
Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
SubMenuItem.Caption = Caption
SubMenuItem.OnAction = ThisWorkbook.Name & "!" & MacroName
If FaceId <> "" Then SubMenuItem.FaceId = FaceId
If Divider Then SubMenuItem.BeginGroup = True
Case 4 ' A Menu2 Item
If NextLevel = 5 Then
Set MenuItem2 = MenuItem.Controls.Add(Type:=msoControlPopup)
Else
Set MenuItem2 = MenuItem.Controls.Add(Type:=msoControlButton)
MenuItem.OnAction = ThisWorkbook.Name & "!" & MacroName
End If
MenuItem2.Caption = Caption
If FaceId <> "" Then MenuItem2.FaceId = FaceId
If Divider Then MenuItem2.BeginGroup = True
Case 5 ' A SubMenu2 Item
Set SubMenuItem2 = MenuItem2.Controls.Add(Type:=msoControlButton)
SubMenuItem2.Caption = Caption
SubMenuItem2.OnAction = ThisWorkbook.Name & "!" & MacroName
If FaceId <> "" Then SubMenuItem2.FaceId = FaceId
If Divider Then SubMenuItem2.BeginGroup = True
End Select
Row = Row + 1
Loop
End With
End Sub
และต้องปรับข้อมูลเป็นลักษณะตามด้านล่างครับ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Sat Nov 24, 2018 12:05 pm
by OOjaoQQ
Level 4 ยังอยู่ใน Level 3 ครับ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Sat Nov 24, 2018 12:08 pm
by snasui
นั่นไม่ใช่เลข Running ครับ มันคือ FaceID ถ้าไม่ต้องการให้มีก็ลบทิ้งไปครับ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Sat Nov 24, 2018 12:17 pm
by OOjaoQQ
อาจารย์ตอบเร็วมาก กำลังแก้ไขโพสต์ครับ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Sat Nov 24, 2018 12:22 pm
by snasui
ถามใหม่ได้เลย แต่ต้องปรับ Code มาเองเสมอครับ
ก่อนหน้านี้ผมอนุโลมตอบไปก่อน ครั้งถัด ๆ มาต้องแก้เอง ติดแล้วค่อยถามกันครับ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Sun Nov 25, 2018 8:52 pm
by OOjaoQQ
มาขอความรู้อาจารย์ครับ code เดิม กับ code ที่อาจารย์ปรับแก้ให้ เมื่อนำไปใส่ แมโคร เช่น แมโคร เรียก userform แล้ว เกิดมีอาการช้าของ excel จนถึง error นั้น เกิดจาก code ตัวไหนครับ
ปัจจุบัน ผมใช้ code ตามลิงค์ที่แนบครับ
https://docs.microsoft.com/en-us/previo ... office.14)
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Sun Nov 25, 2018 9:02 pm
by snasui
ไม่สามารถตอบได้จนกว่าจะเห็นว่าเรียกใช้อย่างไร สำหรับ Code ที่นำมาถามและตาม Link ของ Microsoft เท่าที่ดูเร็ว ๆ คือ Code ของ Ron เองทั้งสองที่ครับ
Re: เขียน เมนู บน toolbar เกิด error ใน excel 2016 แต่เปิดใน excel 2010 ไม่เกิด error
Posted: Sun Nov 25, 2018 9:59 pm
by OOjaoQQ
ขอบคุณอาจารย์ที่ให้แนวทางครับตอนนี้จะสร้างกี่ level ก็ได้แล้วครับ
2222.jpg