Sheet Menu (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

jack nt

Thành viên thường trực
Tham gia
23/12/07
Bài viết
304
Được thích
208
1/ Import frmMenu (đã giải nén)
2/ Copy đoạn codes sau vào ThisWorkbook
Mã:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If ActiveCell.Address = "[COLOR=#0000cd]$A$1[/COLOR]" Then
        Cancel = True
        [COLOR=#0000cd]frmMenu.Show[/COLOR]
    End If
End Sub
Từ sheet bất kỳ, Right-Click vào ô A1 là có liền.
P/S: có thể dùng nhiều cách khác để gọi Sheet Menu, miễn sao gọi được frmMenu.Show
 

File đính kèm

1/ Import frmMenu (đã giải nén)
2/ Copy đoạn codes sau vào ThisWorkbook
Mã:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If ActiveCell.Address = "[COLOR=#0000cd]$A$1[/COLOR]" Then
        Cancel = True
        [COLOR=#0000cd]frmMenu.Show[/COLOR]
    End If
End Sub
Từ sheet bất kỳ, Right-Click vào ô A1 là có liền.
P/S: có thể dùng nhiều cách khác để gọi Sheet Menu, miễn sao gọi được frmMenu.Show
IMPORT FILE nó báo lỗi thế này là sao hả bạn? Tôi lưu file trên Excel 2010, Enable-Macro.

Trong Notepad báo lỗi: "Line 8: Property OleObjectBlob in frmMenu had an invalid file reference."
 

File đính kèm

  • LOI.jpg
    LOI.jpg
    28.3 KB · Đọc: 52
Lần chỉnh sửa cuối:
Upvote 0
Đến mệt. Có cái gì bí mật mà phải export form? Gửi đại cái file excel lên xem nào.
Tôi thì chẳng Import được, nhưng code trong đó thế này:

Mã:
VERSION 5.00
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} frmMenu 
   Caption         =   "MENU"
   ClientHeight    =   5250
   ClientLeft      =   45
   ClientTop       =   375
   ClientWidth     =   4860
   OleObjectBlob   =   "frmMenu.frx"':0000
   ShowModal       =   0   'False
   StartUpPosition =   1  'CenterOwner
End
Attribute VB_Name = "frmMenu"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit


Private Sub chkHideOthers_Change()
    If chkHideOthers.Value Then
        chkShowAll.Value = False
    End If
End Sub


Private Sub chkShowAll_Click()
    If chkShowAll.Value Then
        chkHideOthers.Value = False
    End If
End Sub


Private Sub cmdClose_Click()
    Unload Me
End Sub


Private Sub cmdSelect_Click()
    Application.ScreenUpdating = False
    Dim i&, StrSheetName$
    With lstSheets
        If .ListIndex <> -1 Then
            StrSheetName = .List(.ListIndex)
        End If
    End With
    Unload Me
    ActiveWorkbook.Sheets(StrSheetName).Visible = True
    ActiveWorkbook.Sheets(StrSheetName).Select
    Application.EnableEvents = False
    With lstSheets
        If chkHideOthers.Value Then
            For i = 0 To lstSheets.ListCount - 1
                If .List(i, 0) <> StrSheetName Then
                    ActiveWorkbook.Sheets(.List(i, 0)).Visible = False
                End If
            Next
        ElseIf chkShowAll.Value Then
            For i = 0 To lstSheets.ListCount - 1
                ActiveWorkbook.Sheets(.List(i, 0)).Visible = True
            Next
        Else
            For i = 0 To lstSheets.ListCount - 1
                If .List(i, 0) = StrSheetName Then
                    ActiveWorkbook.Sheets(.List(i, 0)).Visible = True
                End If
            Next
        End If
    End With
    Application.EnableEvents = True
End Sub


Private Sub lstSheets_Change()
    Dim Cll As Range
    With lstSheets
        If .ListIndex <> -1 Then
            For Each Cll In ActiveSheet.UsedRange.Cells
                If Cll = .List(.ListIndex) Then
                    Application.EnableEvents = False
                    Cll.Select
                    Application.EnableEvents = True
                End If
            Next
        End If
    End With
End Sub


Private Sub UserForm_Activate()
    Dim Ws As Worksheet, CurIndex&
    With lstSheets
        For Each Ws In ActiveWorkbook.Worksheets
            .AddItem
            .List(.ListCount - 1, 0) = Ws.Name
            .List(.ListCount - 1, 1) = Ws.CodeName
            If Ws.Name = ActiveSheet.Name Then
                CurIndex = .ListCount - 1
            End If
        Next
        If CurIndex <> -1 Then
            .Selected(CurIndex) = True
        End If
        cmdSelect.Enabled = .ListIndex <> -1
    End With
End Sub
 
Upvote 0
Tôi thì chẳng Import được, nhưng code trong đó thế này:

Mã:
VERSION 5.00
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} frmMenu 
   Caption         =   "MENU"
   ClientHeight    =   5250
   ClientLeft      =   45
   ClientTop       =   375
   ClientWidth     =   4860
   OleObjectBlob   =   "frmMenu.frx"':0000
   ShowModal       =   0   'False
   StartUpPosition =   1  'CenterOwner
End
Attribute VB_Name = "frmMenu"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit


Private Sub chkHideOthers_Change()
    If chkHideOthers.Value Then
        chkShowAll.Value = False
    End If
End Sub


Private Sub chkShowAll_Click()
    If chkShowAll.Value Then
        chkHideOthers.Value = False
    End If
End Sub


Private Sub cmdClose_Click()
    Unload Me
End Sub


Private Sub cmdSelect_Click()
    Application.ScreenUpdating = False
    Dim i&, StrSheetName$
    With lstSheets
        If .ListIndex <> -1 Then
            StrSheetName = .List(.ListIndex)
        End If
    End With
    Unload Me
    ActiveWorkbook.Sheets(StrSheetName).Visible = True
    ActiveWorkbook.Sheets(StrSheetName).Select
    Application.EnableEvents = False
    With lstSheets
        If chkHideOthers.Value Then
            For i = 0 To lstSheets.ListCount - 1
                If .List(i, 0) <> StrSheetName Then
                    ActiveWorkbook.Sheets(.List(i, 0)).Visible = False
                End If
            Next
        ElseIf chkShowAll.Value Then
            For i = 0 To lstSheets.ListCount - 1
                ActiveWorkbook.Sheets(.List(i, 0)).Visible = True
            Next
        Else
            For i = 0 To lstSheets.ListCount - 1
                If .List(i, 0) = StrSheetName Then
                    ActiveWorkbook.Sheets(.List(i, 0)).Visible = True
                End If
            Next
        End If
    End With
    Application.EnableEvents = True
End Sub


Private Sub lstSheets_Change()
    Dim Cll As Range
    With lstSheets
        If .ListIndex <> -1 Then
            For Each Cll In ActiveSheet.UsedRange.Cells
                If Cll = .List(.ListIndex) Then
                    Application.EnableEvents = False
                    Cll.Select
                    Application.EnableEvents = True
                End If
            Next
        End If
    End With
End Sub


Private Sub UserForm_Activate()
    Dim Ws As Worksheet, CurIndex&
    With lstSheets
        For Each Ws In ActiveWorkbook.Worksheets
            .AddItem
            .List(.ListCount - 1, 0) = Ws.Name
            .List(.ListCount - 1, 1) = Ws.CodeName
            If Ws.Name = ActiveSheet.Name Then
                CurIndex = .ListCount - 1
            End If
        Next
        If CurIndex <> -1 Then
            .Selected(CurIndex) = True
        End If
        cmdSelect.Enabled = .ListIndex <> -1
    End With
End Sub
Xem code mà không thấy Form thì cũng như không, xem mớ bồng bông đó mệt lắm.
 
Upvote 0
Xem code mà không thấy Form thì cũng như không, xem mớ bồng bông đó mệt lắm.
Suy luận ra thì ta thấy có vài cái CheckBox, ListBox, CommandButton trong đó, nếu chịu khó thiết kế chúng trên Form thì sẽ ra. Nhưng mà .... lười quá .... bỏ qua! --=0--=0--=0
 
Upvote 0
Tui xài Exc 10, không thấy vấn đề gì. Không biết có phải rar rồi unrar gây lỗi không. Các bạn chịu khó tải file đính kèm, Export rồi Import vậy.
 

File đính kèm

Upvote 0
Suy luận ra thì ta thấy có vài cái CheckBox, ListBox, CommandButton trong đó, nếu chịu khó thiết kế chúng trên Form thì sẽ ra. Nhưng mà .... lười quá .... bỏ qua! --=0--=0--=0
cũng vì sợ các vị lười nên mới export trước cho tiện import vào file khác, có điều GPE không cho upload .frm nên phải chuyển sang .rar, không ngờ lại sinh chuyện
 
Upvote 0
Tưởng gì ghê gớm lắm nào ngờ chỉ là chọn Sheet thôi mà :=\+
nhân đọc bài này http://www.giaiphapexcel.com/forum/content.php?tabid=144
mà gởi thêm chút góp vui. đâu dám làm gì ghê gớm
P/S: tui chỉ muốn giúp ai cần thôi, biết rồi thì dễ chứ chưa biết thì không hẳn.
ngày xưa ông Colombo phát hiện ra châu mỹ, có người bảo việc này ai chả làm được, cứ đi về phía tây là phát hiện ra thôi mà. nhân lúc đang ăn tiệc ổng thách mọi người dựng đứng quả trứng lên đĩa, không ai làm được cả. đến lượt mình ổng cầm quả trứng (luộc/nấu) đập một cái rồi để lên đĩa và nói đại ý "chưa biết thì mới khó chứ biết rồi ai chẳng làm được".
 
Upvote 0
Nếu mà chỉ chọn sheet đó các bạn, tôi có kinh nghiệm như vầy, tại 4 mũi tên của sheet tab đó (vòng màu đỏ), click chuột phải sẽ có một menu tên sheet, click vào tên sheet nào thì sheet đó được chọn.

Vậy cho nên không cần tạo code kiếc gì cho phức tạp vụ ra phải không?
 

File đính kèm

  • ChonSheet.jpg
    ChonSheet.jpg
    44.7 KB · Đọc: 28
Upvote 0
Nhân vụ này nhớ bữa có anh chàng nào đó hỏi làm sao để lấy đuợc cái menu thần thánh đó = code ấy...
Hồi mới biết VBA đó là một việc thần thánh, bây giờ thì càng đơn giản càng tốt, ngày xưa đủ thứ màu mè hoành tá tràng, cái gì cũng làm cho nó lộng lẫy, cái có sẳn cũng tạo form để làm, giờ cái nào đáng màu mè thì màu mè (giao diện) còn những cái có sẳn thì cứ thế mà dùng.

Nói chung chắc là già rồi nên đổi tính.-\\/.
 
Upvote 0
Tôi thấy bài bạn post lúc Chiều....Cũng nghĩ ngay là chắc bạn đang Vọc & chia sẽ cho mọi người nhân topic chia sẽ này của thầy Phong http://www.giaiphapexcel.com/forum/content.php?tabid=144
Nhưng tiếc rằng chiều giờ chưa xem được file. Giờ mới thấy file............Ai dè y chang mình nghĩ...hihi--=0--=0--=0
bạn đoán trúng rồi.
không biết bạn có xài mấy cái workbook có hàng trăm sheets chưa? bấm mấy cái mũi tên cũng mệt lắm đấy. nếu bạn để ý sẽ thấy có cái checkbox cho phép hide tất, chỉ giữ lai 1 sheet cho gọn.
 
Upvote 0
bạn đoán trúng rồi.
không biết bạn có xài mấy cái workbook có hàng trăm sheets chưa? bấm mấy cái mũi tên cũng mệt lắm đấy. nếu bạn để ý sẽ thấy có cái checkbox cho phép hide tất, chỉ giữ lai 1 sheet cho gọn.
Hàng trăm sheet thì cái đó nó trở thành như vầy nè bạn:
 

File đính kèm

  • ChonSheet.jpg
    ChonSheet.jpg
    62.7 KB · Đọc: 28
Upvote 0
Nếu mà chỉ chọn sheet đó các bạn, tôi có kinh nghiệm như vầy, tại 4 mũi tên của sheet tab đó (vòng màu đỏ), click chuột phải sẽ có một menu tên sheet, click vào tên sheet nào thì sheet đó được chọn.

Vậy cho nên không cần tạo code kiếc gì cho phức tạp vụ ra phải không?
không biết các bạn có bao giờ giấu mấy cái sheet tabs không. lúc đó không biết phải click vào đâu?
P/S: nhân đọc bài của a phong, chỉ làm cho vui thôi mà, có thêm lựa chọn, làm màu chút.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom