Lỗi add in không hoạt động khi mở file excel lên

Liên hệ QC

Bùi Thúy Thúy

Thành viên thường trực
Tham gia
2/7/18
Bài viết
289
Được thích
38
Em đã load add in vào và chạy thành công trong lần load đầu tiên, sau đó em tắt file excel đi và mở file excel mới lên.
Lúc này nhấn phím (Ctrl + Tab) để chạy add in đã load vào, nhưng không có tác dụng.
Em phải vào trực tiếp môi trường vba và chạy code thì mới được và sau đó quay lại trang tính đó và phím tắt (Ctrl + tab) mới chạy được add in.
Anh, chị giúp em mới ạ! làm thế nào để mỗi khi mở file mới lên mà sử dụng được add in bằng cách nhấn phím (Ctrl + tab) luôn ạ!
Mã:
Sub ShowAllSheets()
Application.OnKey "^{TAB}", "ShowAllSheets"
  Application.CommandBars("Workbook tabs").ShowPopup
End Sub
 

File đính kèm

  • Quan ly sheet (Ctrl + tab).xlam
    13.1 KB · Đọc: 10
Alt+F11 -> đúp chuột vào module Sô_la_mvie_cNa_y -> nhập
Mã:
Private Sub Workbook_Open()
    Application.OnKey "^{TAB}", "ShowAllSheets"
End Sub
-> trong Module1 sửa thành
Mã:
Sub ShowAllSheets()
    Application.CommandBars("Workbook tabs").ShowPopup
End Sub
-> ̣vẫn trong VBE File -> Save Quan ly sheet (Ctrl + tab).xlam - đóng Excel.
 
Upvote 0
Alt+F11 -> đúp chuột vào module Sô_la_mvie_cNa_y -> nhập
Mã:
Private Sub Workbook_Open()
    Application.OnKey "^{TAB}", "ShowAllSheets"
End Sub
-> trong Module1 sửa thành
Mã:
Sub ShowAllSheets()
    Application.CommandBars("Workbook tabs").ShowPopup
End Sub
-> ̣vẫn trong VBE File -> Save Quan ly sheet (Ctrl + tab).xlam - đóng Excel.
Dạ được rồi thầy ạ, Cám ơn thầy, chúc thầy ngày mới nhiều niềm vui!
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ được rồi thầy ạ, Cám ơn thầy, chúc thầy ngày mới nhiều niềm vui!
Alt+F11 -> đúp chuột vào module Sô_la_mvie_cNa_y -> nhập
Mã:
Private Sub Workbook_Open()
    Application.OnKey "^{TAB}", "ShowAllSheets"
End Sub
-> trong Module1 sửa thành
Mã:
Sub ShowAllSheets()
    Application.CommandBars("Workbook tabs").ShowPopup
End Sub
-> ̣vẫn trong VBE File -> Save Quan ly sheet (Ctrl + tab).xlam - đóng Excel.
Thầy ơi em làm phiền thầy chút ạ!
File excel của em có nhứng hơn 30 sheet, khi sử dụng code trên nó chỉ hiển lên được tầm 15 sheet, còn muốn hiện lên nhiều hơn cần ấn vào "Nhiều trang tính" khi đó sẽ hiện ra bảng tiếp theo, Thầy có thể giúp em có cách nào (sửa code) để nó hiện hết lên tên sheet luôn mà không phải ấn vào "Nhiều trang tính" được không ạ?
Mong được sự giúp đỡ của thầy!
111.png22.png
 
Upvote 0
Thầy ơi em làm phiền thầy chút ạ!
File excel của em có nhứng hơn 30 sheet, khi sử dụng code trên nó chỉ hiển lên được tầm 15 sheet, còn muốn hiện lên nhiều hơn cần ấn vào "Nhiều trang tính" khi đó sẽ hiện ra bảng tiếp theo, Thầy có thể giúp em có cách nào (sửa code) để nó hiện hết lên tên sheet luôn mà không phải ấn vào "Nhiều trang tính" được không ạ?
2 năm trước tôi cũng từng "vọc" cái này nên có viết một code. Nhưng tôi chỉ test trên Windows Home 32 bit + Excel 2007 của mình.

Bạn hãy test và cho kết quả. Ghi rõ code chạy trên Windows gì, Excel gì.

Toàn bộ code trong Module1
Mã:
#If VBA7 then
    Private Declare PtrSafe Function SetKeyboardState Lib "user32.dll" (ByRef lppbKeyState As Byte) As Long
#Else
    Private Declare Function SetKeyboardState Lib "user32.dll" (ByRef lppbKeyState As Byte) As Long
#End If

Sub ShowAllSheets()
Dim kbs(0 To 255) As Byte
        SetKeyboardState kbs(0)
        Dim MySheets As CommandBar
        Set MySheets = CommandBars("Workbook Tabs")
        With MySheets
            Select Case Sheets.Count
                Case Is > 16: .Controls(16).Execute
                Case Else: .ShowPopup
            End Select
        End With
        Set MySheets = Nothing
End Sub
Tại sao có SetKeyboardState kbs(0)? Thực ra lúc đầu tôi có code
Mã:
Sub ShowAllSheets()
        Dim MySheets As CommandBar
        Set MySheets = CommandBars("Workbook Tabs")
        With MySheets
            Select Case Sheets.Count
                Case Is > 16: .Controls(16).Execute
                Case Else: .ShowPopup
            End Select
        End With
        Set MySheets = Nothing
End Sub
Nhưng khi hiện cửa sổ tôi chọn sheet nào đó rồi nhấn OK thì không thấy chuyển và hiển thị sheet được chọn. Do ShowAllSheets được chạy khi nhấn phím chứ không phải khi nhả phím nên có thể code được gọi > 1 lần và vì lý do nào đó làm "rối loạn". Nghĩ như thế nên khi vào sub thì trước hết tôi xóa trạng thái của bàn phím - không có phím nào được nhấn. Thấy thành công nên tôi kết thúc cuộc chơi và có code ở đầu. Nên nhớ là mảng kbs được định nghĩa có 256 bai và ở thời điểm "Chào buổi sáng" thì 256 bai của mảng được thiết lập là 0. Do vậy ta truyền vào SetKeyboardState mảng 256 giá trị 0.
 
Upvote 0
2 năm trước tôi cũng từng "vọc" cái này nên có viết một code. Nhưng tôi chỉ test trên Windows Home 32 bit + Excel 2007 của mình.

Bạn hãy test và cho kết quả. Ghi rõ code chạy trên Windows gì, Excel gì.

Toàn bộ code trong Module1
Mã:
#If VBA7 then
    Private Declare PtrSafe Function SetKeyboardState Lib "user32.dll" (ByRef lppbKeyState As Byte) As Long
#Else
    Private Declare Function SetKeyboardState Lib "user32.dll" (ByRef lppbKeyState As Byte) As Long
#End If

Sub ShowAllSheets()
Dim kbs(0 To 255) As Byte
        SetKeyboardState kbs(0)
        Dim MySheets As CommandBar
        Set MySheets = CommandBars("Workbook Tabs")
        With MySheets
            Select Case Sheets.Count
                Case Is > 16: .Controls(16).Execute
                Case Else: .ShowPopup
            End Select
        End With
        Set MySheets = Nothing
End Sub
Tại sao có SetKeyboardState kbs(0)? Thực ra lúc đầu tôi có code
Mã:
Sub ShowAllSheets()
        Dim MySheets As CommandBar
        Set MySheets = CommandBars("Workbook Tabs")
        With MySheets
            Select Case Sheets.Count
                Case Is > 16: .Controls(16).Execute
                Case Else: .ShowPopup
            End Select
        End With
        Set MySheets = Nothing
End Sub
Nhưng khi hiện cửa sổ tôi chọn sheet nào đó rồi nhấn OK thì không thấy chuyển và hiển thị sheet được chọn. Do ShowAllSheets được chạy khi nhấn phím chứ không phải khi nhả phím nên có thể code được gọi > 1 lần và vì lý do nào đó làm "rối loạn". Nghĩ như thế nên khi vào sub thì trước hết tôi xóa trạng thái của bàn phím - không có phím nào được nhấn. Thấy thành công nên tôi kết thúc cuộc chơi và có code ở đầu. Nên nhớ là mảng kbs được định nghĩa có 256 bai và ở thời điểm "Chào buổi sáng" thì 256 bai của mảng được thiết lập là 0. Do vậy ta truyền vào SetKeyboardState mảng 256 giá trị 0.
Em làm như Thầy hướng dẫn, rất ổn ạ!
Em chạy trên nền Excel 2019 bản 32b và Win 10 bản 64b
Code chạy ổn định ạ!
Cảm ơn thầy đã chia sẻ và giúp em.
View attachment 223592
 
Upvote 0
2 năm trước tôi cũng từng "vọc" cái này nên có viết một code. Nhưng tôi chỉ test trên Windows Home 32 bit + Excel 2007 của mình.

Bạn hãy test và cho kết quả. Ghi rõ code chạy trên Windows gì, Excel gì.

Toàn bộ code trong Module1
Mã:
#If VBA7 then
    Private Declare PtrSafe Function SetKeyboardState Lib "user32.dll" (ByRef lppbKeyState As Byte) As Long
#Else
    Private Declare Function SetKeyboardState Lib "user32.dll" (ByRef lppbKeyState As Byte) As Long
#End If

Sub ShowAllSheets()
Dim kbs(0 To 255) As Byte
        SetKeyboardState kbs(0)
        Dim MySheets As CommandBar
        Set MySheets = CommandBars("Workbook Tabs")
        With MySheets
            Select Case Sheets.Count
                Case Is > 16: .Controls(16).Execute
                Case Else: .ShowPopup
            End Select
        End With
        Set MySheets = Nothing
End Sub
Tại sao có SetKeyboardState kbs(0)? Thực ra lúc đầu tôi có code
Mã:
Sub ShowAllSheets()
        Dim MySheets As CommandBar
        Set MySheets = CommandBars("Workbook Tabs")
        With MySheets
            Select Case Sheets.Count
                Case Is > 16: .Controls(16).Execute
                Case Else: .ShowPopup
            End Select
        End With
        Set MySheets = Nothing
End Sub
Nhưng khi hiện cửa sổ tôi chọn sheet nào đó rồi nhấn OK thì không thấy chuyển và hiển thị sheet được chọn. Do ShowAllSheets được chạy khi nhấn phím chứ không phải khi nhả phím nên có thể code được gọi > 1 lần và vì lý do nào đó làm "rối loạn". Nghĩ như thế nên khi vào sub thì trước hết tôi xóa trạng thái của bàn phím - không có phím nào được nhấn. Thấy thành công nên tôi kết thúc cuộc chơi và có code ở đầu. Nên nhớ là mảng kbs được định nghĩa có 256 bai và ở thời điểm "Chào buổi sáng" thì 256 bai của mảng được thiết lập là 0. Do vậy ta truyền vào SetKeyboardState mảng 256 giá trị 0.
Em chào thầy! thầy ơi em làm phiền thầy chút xíu được không ạ?
Em có sử dụng code thầy giúp trên vào một add in khác để ứng dụng, em làm như sau:
Em có copy đoạn code sau vào "ThisWorbook"
Mã:
Private Sub Workbook_Open()
    Application.OnKey "^{TAB}", "ShowAllSheets"
End Sub
sau đó vào Mudule1 coppy đoạn code sau vào :
Mã:
#If VBA7 Then
    Private Declare PtrSafe Function SetKeyboardState Lib "user32.dll" (ByRef lppbKeyState As Byte) As Long
#Else
    Private Declare Function SetKeyboardState Lib "user32.dll" (ByRef lppbKeyState As Byte) As Long
#End If

Sub ShowAllSheets()
Dim kbs(0 To 255) As Byte
        SetKeyboardState kbs(0)
        Dim MySheets As CommandBar
        Set MySheets = CommandBars("Workbook Tabs")
        With MySheets
            Select Case Sheets.Count
                Case Is > 16: .Controls(16).Execute
                Case Else: .ShowPopup
            End Select
        End With
        Set MySheets = Nothing
End Sub
Khi chạy code trực tiếp thì chạy được còn nhấn tổ hợp phím (Ctrl + tab ) không có tác dụng, thầy giúp em mới ạ!
Em có đính kèm video thầy giúp em mới nhé!
1111.png22222.png
 
Upvote 0
Nó báo lỗi chình ình đó em: có cái Sub trùng tên là "Sub Workbook_Open". Kiếm 1 cái sub Workbook_Open nữa rồi gộp code lại là được rồi.
 
Upvote 0
Web KT
Back
Top Bottom