Tạo nút nhấn để link đến các sheet

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,905
Thấy các bạn thường xuyên hỏi về chủ đề này và trên diễn đàn cũng đã có rất nhiều giải pháp thực thi nhưng hầu hết đều dùng vòng lập FOR
Hôm nay tôi hướng dẩn các bạn làm 1 file thuộc dạng này nhưng với các bước thao tác và code cực kỳ đơn giản!
1> Viết code
Hãy viết code trước để các bước chuẩn bị sau này được thuận tiện hơn
Chèn code này vào Module
PHP:
Sub Link2Sh()
  With ActiveSheet
    With Sheets(.Shapes(Application.Caller).AlternativeText)
      .Visible = True: .Select
    End With
    .Visible = 2
  End With
End Sub
2> Các bước chuẩn bị
- Giả sử các bạn đã có 1 file gồm nhiều sheet, hãy chèn thêm 1 sheet và đặt tên là Trang chủ
- Tại sheet Trang chủ này, hãy vẽ các Button bằng công cụ Drawing Object
- Click phải vào Button, chọn Add Text và gõ nhản tùy ý
- Click phải vào Button, chọn Format AutoShape, chuyển sang tab Web và gõ tên sheet cần link vào khung Alternative text (bước này vô cùng quan trọng)

untitled1.JPG





























- Click phải vào Button, chọn Assign Macro và double click vào tên sub Link2Sh

untitled2.JPG






















- Thực hiện thao tác trên cho tất cả các Button trên sheet Trang chủ
- Vẽ Button ở các sheet con và thực hiện các thao tác như trên đối với các Button này
--------------------------
Vậy là xong! Giờ hãy bấm nút và... tận hưởng thành quả
(Xem file đính kèm)
--------------------------
Lưu ý: Bạn có thể vẽ Button bằng bất cứ công cụ nào nhưng nhất định không được dùng các object của thanh Control Toolbox
 

File đính kèm

  • Link2Sh.xls
    68 KB · Đọc: 3,606
Chỉnh sửa lần cuối bởi điều hành viên:
Lần chỉnh sửa cuối:
Upvote 0
Bạn dùng lệnh Select đối với sheet đang ẩn nên bị báo lỗi. Unhide trước khi select sẽ hết lỗi.
Mã:
Sub Button2_Click()
    With Sheets("San_xuat")
     .Visible = True
     .Select
    End With
End Sub
Vậy trong trường hợp dùng cái Link24 này nó bị ẩn sheet có cách nào làm cho sheet này hiện lên không? xin cảm ơn!
 
Upvote 0
cho em hỏi có thể tạo 1 button với hình ảnh mong muốn không? ví dụ như em muốn button là con ếch chẳng hạn, chứ không phải là hình chữ nhật đơn thuần. mong mấy bác giúp đỡ
 
Upvote 0
Trên bảng tính, vẽ 1 nút rồi Assign Macro đến sub trên

Hoặc hoàng tráng hơn chút
PHP:
Sub ShowAllShs()
  Dim Sh As Worksheet
  Application.ScreenUpdating = False
  On Error Resume Next
  With Sheet1.Shapes("All").TextFrame.Characters
    For Each Sh In ThisWorkbook.Worksheets
      If Sh.Name <> "Trang ch" & ChrW(7911) Then
        Sh.Visible = .Text = "SHOW ALL"
      End If
    Next
    .Text = IIf(.Text = "SHOW ALL", "HIDE ALL", "SHOW ALL")
  End With
  Application.ScreenUpdating = True
End Sub
Nút có 2 tác dụng SHOW và HIDE
Chào bạn!
Mình đã lấy code trên để Show All & Hide All và đã thực hiện được.
Mình muốn thêm 1 ý sau
Khi mở File thì muốn tất cả các sheet Hilde All (trừ Sheet Trang chủ) thì phải làm thế nào?
Cảm ơn bạn!
 
Upvote 0
VD: Sheet Trang chủ của bạn là Sheet 1 thì bạn làm thế này
Alt+F11 trong ThisWorkbook bạn thêm Code như thế này:
Private Sub Workbook_Open()
Application.Visible = True
Shéet1.Visible = 1
Sheet1.Activate
Sheet2.Visible = 2
Sheet3.Visible = 2
Sheet4.Visible = 2
Sheet5.Visible = 2
Sheet6.Visible = 2
Sheet7.Visible = 2
End Sub
Bạn thử xem sao nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Chào bạn!
Mình đã lấy code trên để Show All & Hide All và đã thực hiện được.
Mình muốn thêm 1 ý sau
Khi mở File thì muốn tất cả các sheet Hilde All (trừ Sheet Trang chủ) thì phải làm thế nào?
Cảm ơn bạn!

Thêm 1 Sub nữa:
Mã:
Sub Auto_Open()
  Dim wks As Worksheet, shp As Shape
  Set wks = Worksheets("Trang ch" & ChrW(7911))
  Set shp = wks.Shapes("All")
  If shp.TextFrame.Characters.Text = "HIDE ALL" Then ShowAllShs
End Sub
Đóng và lưu file rồi mở lại file nhé
------------------------------------------
VD: Sheet Trang chủ của bạn là Sheet 1 thì bạn làm thế này
Alt+F11 trong ThisWorkbook bạn thêm Code như thế này:
Private Sub Workbook_Open()
Application.Visible = True
Shéet1.Visible = 1
Sheet1.Activate
Sheet2.Visible = 2
Sheet3.Visible = 2
Sheet4.Visible = 2
Sheet5.Visible = 2
Sheet6.Visible = 2
Sheet7.Visible = 2
End Sub
Bạn thử xem sao nhé!
Hướng dẫn tầm bậy tầm bạ không
 
Upvote 0
Viết thêm 1 đoạn code thế này:
PHP:
Sub ShowAllShs()
  Dim Sh As Worksheet
  For Each Sh In ThisWorkbook.Worksheets
    Sh.Visible = -1
  Next
End Sub
Trên bảng tính, vẽ 1 nút rồi Assign Macro đến sub trên

Hoặc hoàng tráng hơn chút
PHP:
Sub ShowAllShs()
  Dim Sh As Worksheet
  Application.ScreenUpdating = False
  On Error Resume Next
  With Sheet1.Shapes("All").TextFrame.Characters
    For Each Sh In ThisWorkbook.Worksheets
      If Sh.Name <> "Trang ch" & ChrW(7911) Then
        Sh.Visible = .Text = "SHOW ALL"
      End If
    Next
    .Text = IIf(.Text = "SHOW ALL", "HIDE ALL", "SHOW ALL")
  End With
  Application.ScreenUpdating = True
End Sub
Nút có 2 tác dụng SHOW và HIDE
CAI NẦY DÚNG LÀ CÁI MÌNH CÂN Link2Sh_3.xls.NHƯNG MÌNH KHÔNG HIỂU CÁCH TẠO RA NÓ,BẠN CÓ THỂ CHỈ DẨN TỬNG BƯỚC 1 KHÔNG VẬY,NẾU CÓ VIDEO HƯỚNG DẨN THÌ QUÁ TỐT
 
Upvote 0
Upvote 0
hỏi cách tao ra nút 2 tác dung,showall,hideall(dùng cái gì vẻ ra nút dó,bấm 1 phát showall,bấn tiếp hideall)
Cùng ý kiến với bác này như shet "Trang chủ" của mình tên "Thong tin cap nhat" .... Chỉnh lại vẫn không chạy được .... Các bác giúp nhé ....
Còn lệnh chỉ Showall thì chạy ok.
 
Lần chỉnh sửa cuối:
Upvote 0
nhờ thầy ndu96081631 chỉ dùm em cái này với
em làm theo cách thầy nhưng khi nhấn vào nút Showall , HIDE AL thì nó xuất hiện thêm nút Trang Chủ nữa
rất mong thầy chỉ dùm xem em sai công đoạn nào với

và nhờ thầy chỉ luôn em cách save đoạn mã trong sheet trang chủ với
mỗi lần chạy rồi mở lại em lại phải copy rồi paste vào modul thì mấy nút mới hoạt động
 

File đính kèm

  • hung text.xlsx
    23 KB · Đọc: 28
Lần chỉnh sửa cuối:
Upvote 0
nhờ thầy ndu96081631 chỉ dùm em cái này với
em làm theo cách thầy nhưng khi nhấn vào nút Showall , HIDE AL thì nó xuất hiện thêm nút Trang Chủ nữa
rất mong thầy chỉ dùm xem em sai công đoạn nào với

và nhờ thầy chỉ luôn em cách save đoạn mã trong sheet trang chủ với
mỗi lần chạy rồi mở lại em lại phải copy rồi paste vào modul thì mấy nút mới hoạt động
Bạn phải ghi lại với đuôi .xlsm hoặc đuôi .xls chứ ghi dạng đuôi .xlsx thì code không tồn tại nên còn code đâu mà chạy .
 
Lần chỉnh sửa cuối:
Upvote 0
cảm ơn bạn mình ghi được rồi nhưng vẫn còn 1 thắc mắc file của thầyndu96081631 nhận nút chỉ ra Showall , HIDE AL
của mình nó ra thêm nút Trang chủ nữa
ko biết là sai chỗ nào nhờ mọi người chỉ dùm
 

File đính kèm

  • hung text.xlsm
    33 KB · Đọc: 39
Lần chỉnh sửa cuối:
Upvote 0
cảm ơn bạn mình ghi được rồi nhưng vẫn còn 1 thắc mắc file của thầyndu96081631 nhận nút chỉ ra Showall , HIDE AL
của mình nó ra thêm nút Trang chủ nữa
ko biết là sai chỗ nào nhờ mọi người chỉ dùm

Trong sub ShowAllShs có đoạn: If Sh.Name <> "Trang ch" & ChrW(7911) Then
Chú ý chổ màu đỏ là có phân biệt HOA thường. "Trang ch" & ChrW(7911) = Trang chủ trong khi tên sheet của bạn là Trang Chủ (chữ C viết HOA)
Vậy bạn có 2 cách khắc phục:
- Sửa tên sheet thành Trang chủ
- Sửa đoạn code trên thành If Sh.Name <> "Trang Ch" & ChrW(7911) Then
 
Upvote 0
Trong sub ShowAllShs có đoạn: If Sh.Name <> "Trang ch" & ChrW(7911) Then
Chú ý chổ màu đỏ là có phân biệt HOA thường. "Trang ch" & ChrW(7911) = Trang chủ trong khi tên sheet của bạn là Trang Chủ (chữ C viết HOA)
Vậy bạn có 2 cách khắc phục:
- Sửa tên sheet thành Trang chủ
- Sửa đoạn code trên thành If Sh.Name <> "Trang Ch" & ChrW(7911) Then

Theo dõi rất nhiều bài viết của chú ndu96081631 thấy rất thích. Vì các bài viết của chú rất ý nghĩa, cách trả lời ngắn gọn, dễ hiểu. Cảm ơn chú!
 
Upvote 0
Trong sub ShowAllShs có đoạn: If Sh.Name <> "Trang ch" & ChrW(7911) Then
Chú ý chổ màu đỏ là có phân biệt HOA thường. "Trang ch" & ChrW(7911) = Trang chủ trong khi tên sheet của bạn là Trang Chủ (chữ C viết HOA)
Vậy bạn có 2 cách khắc phục:
- Sửa tên sheet thành Trang chủ
- Sửa đoạn code trên thành If Sh.Name <> "Trang Ch" & ChrW(7911) Then
Nhà em cũng đã kiểm tra và không phát hiện ra lỗi, cám ơn thày . Nhà em không nghĩ thằng VBA " khó tính " thế ! Chả trách mấy ông đi nhậu về gõ cửa nhà hàng xóm thì cũng phải thôi .
 
Lần chỉnh sửa cuối:
Upvote 0
Nhà em cũng đã kiểm tra và không phát hiện ra lỗi, cám ơn thày . Nhà em không nghĩ thằng VBA " khó tính " thế ! Chả trách mấy ông đi nhậu về gõ cửa nhà hàng xóm thì cũng phải thôi .

Bới vậy để chắc ăn người ta thường so sánh theo kiểu khác:
Hoặc
Mã:
If UCase(sh.Name) <> "TRANG CH" & ChrW(7910) Then
Tức biến toàn bộ thành chữ HOA rồi so sánh
Hoặc
Mã:
If StrComp(sh.Name, "Trang Ch" & ChrW(7911), vbTextCompare) = 0 then
Hàm StrComp với phương thức so sánh vbTextCompare sẽ trả về giá trị = 0 nếu 2 text giống nhau (không phân biệt HOA thường)
Nói chung, nếu không biết hàm StrComp thì cứ UCase tất tần tật rồi hẳn so sánh là ăn tiền liền
 
Upvote 0
Hiện tại e đang làm một file tương tự như thế, nhưng e không chỉ muốn link tới các sheet khác mà e còn muốn link tới các cell khác nhau trong một sheet vậy có được không ( trong trường hợp sheet đó ẩn). Xin các thầy chỉ bảo giúp em.
 
Upvote 0
Web KT
Back
Top Bottom