Các bác cho em hỏi chút ah. Em muốn bảng excel của em trông chuyên nghiệp 1 chút nên đã dùng VBA để tạo bảng như trong file đính kèm. Bây giờ em cũng dùng VBA để ẩn đi các Sheet, chỉ để 1 Sheet chính thôi. Nhưng khi ẩn đi thì lúc mình ấn vào mấy cái nút link trong Sheet 1 thì lại ko được nữa. Các bác giúp em cách để khi ẩn đi mà vẫn có thể link được sang các sheet đã ẩn với ah. Thanks các bác nhiều!!!
Các bác cho em hỏi chút ah. Em muốn bảng excel của em trông chuyên nghiệp 1 chút nên đã dùng VBA để tạo bảng như trong file đính kèm. Bây giờ em cũng dùng VBA để ẩn đi các Sheet, chỉ để 1 Sheet chính thôi. Nhưng khi ẩn đi thì lúc mình ấn vào mấy cái nút link trong Sheet 1 thì lại ko được nữa. Các bác giúp em cách để khi ẩn đi mà vẫn có thể link được sang các sheet đã ẩn với ah. Thanks các bác nhiều!!!
Theo tôi thì đã dùng nút lệnh thì không nên dùng luôn cái Hyperlink, nhưng nếu bạn muốn dùng thì như vầy đi:
Tại Code của Sheet2 và Sheet3:
PHP:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim sh As Worksheet
Sheets("Sheet1").Visible = xlSheetVisible
Sheets("Sheet1").Activate
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Sheet1" Then sh.Visible = xlSheetVeryHidden
Next
End Sub
Tương tự với Sheet1, các nút lệnh như sau:
PHP:
Private Sub CommandButton2_Click()
Dim sh As Worksheet
Sheets("Sheet2").Visible = xlSheetVisible
Sheets("Sheet2").Activate
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Sheet2" Then sh.Visible = xlSheetVeryHidden
Next
End Sub
''=================================================
Private Sub CommandButton3_Click()
Dim sh As Worksheet
Sheets("Sheet3").Visible = xlSheetVisible
Sheets("Sheet3").Activate
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Sheet3" Then sh.Visible = xlSheetVeryHidden
Next
End Sub
Mấu chốt vấn đề là ở chỗ này: -Không thể ẩn Sheet nào đó nếu nó đang nhận Focus (Đang Active). Để có thể ẩn nó trước hết phải chuyển Focus sang sheet nào đó có thể (Có thể nhìn thấy). Ví dụ của bạn thì Sheet1 là sheet luôn hiện nên ta cứ chọn luôn nó rồi ẩn sheet cũ là xong.
Nếu bạn muốn dùng Link thì bạn làm như sau:
-Trước mỗi lệnh chọn sheet thêm 1 dòng hiện sheet.
-Bạn dùng 1 code chung để ẩn các sheet cũ.
Tóm lại với ví dụ của bạn chép code sau vào vùng code của sheet1 thay toàn bộ code của bạn là ổn
Mã:
Private Sub CommandButton2_Click()
Sheet2.Visible = xlSheetVisible
Sheet2.Activate
End Sub
'------------------------------------
Private Sub CommandButton3_Click()
Sheet3.Visible = xlSheetVisible
Sheet3.Activate
End Sub
'------------------------------------
Private Sub Worksheet_Activate()
For Each Sheet In Sheets
If Sheet.Name <> "Sheet1" Then Sheet.Visible = 2
Next
End Sub
Theo tôi thì đã dùng nút lệnh thì không nên dùng luôn cái Hyperlink, nhưng nếu bạn muốn dùng thì như vầy đi:
Tại Code của Sheet2 và Sheet3:
PHP:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim sh As Worksheet
Sheets("Sheet1").Visible = xlSheetVisible
Sheets("Sheet1").Activate
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Sheet1" Then sh.Visible = xlSheetVeryHidden
Next
End Sub
Tương tự với Sheet1, các nút lệnh như sau:
PHP:
Private Sub CommandButton2_Click()
Dim sh As Worksheet
Sheets("Sheet2").Visible = xlSheetVisible
Sheets("Sheet2").Activate
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Sheet2" Then sh.Visible = xlSheetVeryHidden
Next
End Sub
''=================================================
Private Sub CommandButton3_Click()
Dim sh As Worksheet
Sheets("Sheet3").Visible = xlSheetVisible
Sheets("Sheet3").Activate
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Sheet3" Then sh.Visible = xlSheetVeryHidden
Next
End Sub
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
With Sheets(Replace(Split(Target.SubAddress, "!")(0), "'", ""))
.Visible = -1: .Select
End With
Sh.Visible = 2
End Sub
Code này đặt trong Thisworkbook, 1 code duy nhất cho tất cả các Hyperlink