Board logo

標題: [發問] 使用事件程序開啟超連結(隱藏/顯示工作表) [打印本頁]

作者: chiata    時間: 2019-7-16 15:30     標題: 使用事件程序開啟超連結(隱藏/顯示工作表)

各位前輩好,
試寫附件,想做到的效果如下
工作表1(永遠顯示),裡面有工作表2!A1與工作表3!A1的超連結,點選超連結會到連到對應工作表的A1,
工作表2 & 3(隱藏,僅在點選工作表1後顯示)

工作表1使用事件程序
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
達成點選超連結其對應的工作表變為顯示

工作表2 & 3使用事件程序
Private Sub Worksheet_Deactivate()
達成離開工作表即隱藏此工作表

遇到的問題如下
1.第一次點選工作表1的超連結,對應的工作表變為顯示但不會連到對應工作表的A1,要點第二次工作表1的超連結才會連到對應工作表的A1,能否達成僅點一次即完成顯示對應工作表&連到A1?
2.工作表2 & 3的coding,能否不指定名稱即判斷此工作表需隱藏?
[attach]31037[/attach]

謝謝
[attach]31038[/attach]
作者: 准提部林    時間: 2019-7-17 16:36

ThisWorkbook.Worksheets("工作表2").Visible = False
在工作表事件區, 可以這樣寫
Me.Visible = False
================================
另外, 將"工作表2"及"工作表3"的自動隱藏程式碼刪除, 並將其設為可見,
將工作表1的超連結事件改為如下:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Sheet_Name = ActiveCell.Value
MsgBox Sheet_Name
End Sub

執行"超連結", 會發現Sheet_Name是"工作表1", 而不是其它,
表示這個ActiveCell, 是被連結工作表儲存格的內容, 而不是工作表1的a1內容~~
==================================
將工作表2的A1內容, 改成"工作表15", 再用你原來檔案的程式碼試試,
點第一次超連結, 工作表2顯示為可見, 但畫面還是留在工作表1,
再點一次超連結, 會跑到工作表2, 但程式碼會跳出錯誤, 因為"工作表15"並不存在~


=======================
作者: 准提部林    時間: 2019-7-17 16:41

再者, 雖然工作2有
Private Sub Worksheet_Deactivate()
Me.Visible = False
End Sub

直接選取其它工作表, 工作表2會自動隱藏沒問題,
但若點A1超連結, 會跑到工作表1, 工作表2仍然是顯示的


================================
作者: chiata    時間: 2019-7-18 14:43

回復 3# 准提部林
感謝回覆,獲益良多,修改了一下程式如附件[attach]31046[/attach]

現在遇到的問題是若工作表2 and 3為隱藏,第一次點選工作表1的連結會使工作表2 or 3變為顯示,但activesheet還是工作表1,第二次點工作表1的連結activesheet就會變為工作表2 or 3。

想要達成的效果是工作表2 and 3為隱藏,點選工作表1的連結則會使工作表2 or 3變為顯示且activesheet為工作表2 or 3。

若能達成此效果,應能避免下列問題
再者, 雖然工作2有
Private Sub Worksheet_Deactivate()
Me.Visible = False
End Sub

直接選取其它工作表, 工作表2會自動隱藏沒問題,
但若點A1超連結, 會跑到工作表1, 工作表2仍然是顯示的

作者: 准提部林    時間: 2019-7-18 19:21

回復 4# chiata

試試看:
[attach]31047[/attach]
作者: chiata    時間: 2019-7-22 11:46

回復  chiata

試試看:
准提部林 發表於 2019-7-18 19:21

感謝用心回覆,獲益良多,
幾個問題還想請教
  1. Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
  2. Dim SR
  3. If ActiveSheet.Name <> Me.Name Then Exit Sub
  4.    
  5.     With ActiveCell
  6.          If .Hyperlinks.Count = 0 Then Exit Sub
  7.          SR = Split(Replace(.Hyperlinks(1).SubAddress, "'", ""), "!")
  8.          If SR(0) = Me.Name Then Exit Sub
  9.          Sheets(SR(0)).Visible = True
  10.          Application.Goto Sheets(SR(0)).Range(SR(1))
  11.     End With
  12.    
  13. End Sub
複製代碼
ActiveCell.Hyperlinks.Count 應該是指此儲存格的超連結數量,若以儲存格來看,最多為1?
而此coding是點選超連結才會執行,故ActiveCell.Hyperlinks.Count=1?
那為何需要If .Hyperlinks.Count = 0 Then Exit Sub?

.Hyperlinks(1).SubAddress括號中的1是不是類似worksheets(1)?
若為worksheets("工作表1"),範圍中有2個超連結,該怎麼判斷Hyperlinks(1) & Hyperlinks(2)?

謝謝!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)