Khi bạn nhấp chuột phải vào một ô, Excel sẽ cung cấp cho bạn menu Ngữ cảnh giàu tính năng cho phép bạn thực hiện bất kỳ thao tác nào. Bạn có thể muốn thêm một số tính năng vào menu Ngữ cảnh đó, đặc biệt nếu chúng là những tính năng bạn sử dụng thường xuyên.

Rất tiếc, bạn không thể chỉnh sửa menu Ngữ cảnh giống như cách bạn có thể chỉnh sửa các menu khác — bằng cách sử dụng Tùy chỉnh từ menu Công cụ. Thay vào đó, bạn phải thao tác các menu Ngữ cảnh thông qua VBA.

Nếu bạn muốn thêm một mục vào menu Ngữ cảnh xuất hiện khi bạn nhấp chuột phải vào một ô, bạn có thể sử dụng đoạn mã sau:

Sub AddItemToContextMenu()

Dim cmdNew As CommandBarButton     Set cmdNew = CommandBars("cell").Controls.Add

With cmdNew         .Caption = "My Procedure"

.OnAction = "MyProcedure"

.BeginGroup = True     End With End Sub

Tất cả những gì bạn cần làm là đặt thuộc tính .Caption thành bất kỳ văn bản menu nào bạn muốn sử dụng, sau đó thay đổi thuộc tính .OnAction để nó trỏ đến macro hoặc lệnh bạn muốn sử dụng. Sau này, khi bạn muốn xóa tùy chọn menu, bạn có thể sử dụng macro sau:

Sub RemoveContextMenuItem()

On Error Resume Next     CommandBars("cell").Controls("My Procedure").Delete End Sub

Để sử dụng điều này, hãy thay đổi văn bản “Thủ tục của tôi” thành bất kỳ văn bản nào bạn đã sử dụng trong thuộc tính .Caption của macro trước đó. Câu lệnh On Error được sử dụng trong macro này chỉ trong trường hợp mục macro được chỉ định chưa được thêm trước đó.

Chỉ cần sửa đổi macro của bạn một chút, bạn có thể chỉ định rằng việc bổ sung vào menu Ngữ cảnh chỉ xảy ra khi nhấp chuột phải vào các ô cụ thể. Macro sau sẽ kiểm tra xem bạn có đang nhấp vào ô trong phạm vi C10: E25 hay không. Nếu đúng như vậy, nó sẽ thêm một tùy chọn menu cho quy trình của bạn ở cuối menu Ngữ cảnh.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _   Cancel As Boolean)

Dim cmdNew As CommandBarButton

For Each icbc In Application.CommandBars("cell").Controls         If icbc.Tag = "brccm" Then icbc.Delete     Next icbc

If Not Application.Intersect(Target, Range("c10:e25")) _       Is Nothing Then         Set cmdNew = CommandBars("cell").Controls.Add         With cmdNew             .Caption = "My Procedure"

.OnAction = "MyProcedure"

.BeginGroup = True             .Tag = "brccm"

End With     End If End Sub

Trong trình chỉnh sửa VBA, macro này cần được thêm vào trang tính cụ thể mà bạn muốn nó được sử dụng với. Tất cả những gì bạn cần làm là bấm đúp vào trang tính đó, trong Trình khám phá dự án (góc trên bên trái của trình soạn thảo VBA), rồi nhập vào cửa sổ mã cho trang tính đó.

Như với macro trước đó, tất cả những gì bạn cần làm là sửa đổi cài đặt được chỉ định cho thuộc tính .Caption và .OnAction. Ngoài ra, bạn có thể muốn thay đổi phạm vi ô được coi là “hợp lệ” khi thêm lựa chọn menu — chỉ cần thay đổi đặc tả phạm vi “c: 10: e25” thành phạm vi mong muốn. Bạn thậm chí có thể sử dụng một phạm vi đã đặt tên thay cho phạm vi ô, điều này thật tuyệt nếu phạm vi hợp lệ của bạn thực sự là một tập hợp các ô không liền kề.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (2064) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.