Lấy tên Button trên Ribbon bị báo lỗi.

Liên hệ QC

giaiphap

==(^o^)==
Tham gia
12/3/07
Bài viết
5,769
Được thích
6,243
Donate (Momo)
Donate
Giới tính
Nam
Tôi có tạo một button trên Ribbon của Excel bằng code, nhưng gặp phải vấn đề kiểm tra xem nút lệnh nào đã nhấn (để linh động hơn trong lúc tạo nút lệnh). Nếu dùng sub bình thường như phía dưới thì chạy không vấn đề gì.
Mã:
Public Sub RunMacro()
    MsgBox "Muon biet button dang click co ten gi "
End Sub
Nhưng cái tôi cần ở đây là muốn biết cái button mình vừa click có tên gì thì làm như thế nào? Tôi cũng dùng code tương tự như phía dưới nhưng nó lại báo lỗi.
Mã:
Sub RunMacro(control As IRibbonControl)
    MsgBox "Muon biet button dang click co ten gi " & control.ID
End Sub
Rất mong các thành viên biết chỉ giúp cảm ơn mọi người.
 

File đính kèm

  • AddButtonRibbon.xlsm
    21.3 KB · Đọc: 17
Bác @giaiphap có thể làm theo cách sau đây

+ Nếu tìm hết từ tất cả các Menu của CommandBars:
Application.CommandBars.FindControl(control.ID).Caption​
Application.CommandBars.FindControl(control.ID).Parent.Name​
+ Nếu biết Item của CommandBar:
Application.CommandBars("Menu B").FindControl(control.ID).Caption​

Dùng vòng lặp lặp qua các Menu để tìm kiếm:
JavaScript:
Sub FindControlCommandBar()
    Dim cmdBar As CommandBar
    Dim oControl As CommandBarControl
       For Each cmdBar In CommandBars
        Set oControl = cmdBar.FindControl(ID:=253)
        If Not oControl Is Nothing Then
            Debug.Print cmdBar.Name, oControl.Caption
        End If
       Next cmdBar
End Sub
 
Bác @giaiphap có thể làm theo cách sau đây

+ Nếu tìm hết từ tất cả các Menu của CommandBars:
Application.CommandBars.FindControl(control.ID).Caption​
Application.CommandBars.FindControl(control.ID).Parent.Name​
+ Nếu biết Item của CommandBar:
Application.CommandBars("Menu B").FindControl(control.ID).Caption​

Dùng vòng lặp lặp qua các Menu để tìm kiếm:
JavaScript:
Sub FindControlCommandBar()
    Dim cmdBar As CommandBar
    Dim oControl As CommandBarControl
       For Each cmdBar In CommandBars
        Set oControl = cmdBar.FindControl(ID:=253)
        If Not oControl Is Nothing Then
            Debug.Print cmdBar.Name, oControl.Caption
        End If
       Next cmdBar
End Sub
Cái này chưa đúng ý tôi rồi bạn ơi. Cái tôi cần là khi click vào Button nào thì nó cho biết tên Button vừa click.
 
lang thang trên Google tìm thấy file này nó tạo Ribbon... trong DLL xong nó làm thủ tục gọi từ Excel thấy cũng là 1 cách hay .... tuy nhiên Code DLL (Delphi) nó tính $ :p ... Khi nào rảnh Mạnh cũng tập quậy viết xem sao .... nay rất bận chỉ à ơi tẹo

Tại vì cũng biết chút Ribbon trên Delphi đã làm ở bài #1026

Mã:
Public Sub CreateUI()
    
    With CustomUI
        .Clear         
        With .ribbon.tabs.Add(New rxTab)
            .Label = "Workflow Demo"
            .ID = MAIN_TAB_ID
            
            ' Create the navigation group (initially invisible)
            With .groups.Add(New rxGroup)
                .ID = NAVIGATION_GROUP_ID
                .Visible = rxFalse
                With .Buttons.Add(New rxButton)
                    .Size = rxsLarge
                    .Label = "Restart"
                    .imageMso = "Redo"
                    .OnAction = CustomUI.make_delegate("RestartButton_OnAction")
                End With
            End With
            
            ' Create the workflow group
            With .groups.Add(New rxGroup)
                .ID = WORKFLOW_GROUP_ID
                .Label = "Process Tasks"
            End With
            
            ' Create the status group
            With .groups.Add(New rxGroup)
                .ID = STATUS_GROUP_ID
                .Label = "Status"
                    
                ' Gallery with status history
                With .galleries.Add(New rxGallery)
                    .ID = HISTORY_GALLERY_ID
                    .Columns = GALLERY_COLUMNS
                    .imageMso = "SourceControlShowHistory"
                    .Size = rxsLarge
                      
                    With .items.Add(New rxItem)
                        .Label = PadString("[Action]", 16)
                        .imageMso = "NewTask"
                    End With
                    
                    .items.Add(New rxItem).Label = PadString("[Start Date/Time]", 16)
                    .items.Add(New rxItem).Label = PadString("[End Time]", 10)
                    .items.Add(New rxItem).Label = PadString("[Duration]", 12)
                    .items.Add(New rxItem).Label = PadString("[Status]", 4)
                    
                    UpdateHistoryGalleryLabel
                End With                 
            End With '.groups.Add             
        End With '.ribbon.tabs
        
        ShowReadInput
        
        .Refresh
        .ActivateTab MAIN_TAB_ID         
    End With
    
End Sub
 
Lỗi là do bạn dùng mẹo tạo Ribbon bằng code, chứ không phải tạo kiểu chính tắc nên nó không xác nhận được control As IRibbonControl.
 
Web KT
Back
Top Bottom