Board logo

標題: [發問] 活頁簿能用陣列同時隱藏或出現嗎? [打印本頁]

作者: feecshyrnd    時間: 2016-5-1 14:08     標題: 活頁簿能用陣列同時隱藏或出現嗎?

Sheets(“aa”).Visible=False
Sheets(“av”).Visible=False
Sheets(“ca”).Visible=False

因為想要同時隱藏,因為活頁簿有很多個
這樣會導致程式碼太長,不知是否能用陣列方式呈現隱藏及出現的功能
作者: c_c_lai    時間: 2016-5-1 15:49

本帖最後由 c_c_lai 於 2016-5-1 15:51 編輯

回復 1# feecshyrnd
  1. Option Explicit

  2. Sub Ex()
  3.     Dim arr As Variant, cts As Integer, j As Integer
  4.    
  5.     arr = Array("工作表2", "工作表3")
  6.    
  7.     For cts = 1 To Sheets.Count
  8.         For j = 0 To UBound(arr)
  9.             If Sheets(cts).Name = arr(j) Then Sheets(cts).Visible = _
  10.                 Not Sheets(cts).Visible
  11.         Next j
  12.     Next cts
  13. End Sub
複製代碼

作者: ML089    時間: 2016-5-2 08:45

我也來練習補充一個
  1. Sub ex1()
  2.     Dim Arr As Variant, xS
  3.     Arr = Array("Sheet2", "Sheet3", "Sheet4")
  4.     On Error Resume Next
  5.     For Each xS In Arr
  6.         Sheets(xS).Visible = Not Sheets(xS).Visible
  7.     Next
  8. End Sub
複製代碼

作者: c_c_lai    時間: 2016-5-2 11:40

回復 3# ML089
不錯,直接了斷乾淨俐落。受教了!
作者: 准提部林    時間: 2016-5-2 13:17

回復 3# ML089


這要三表同時狀態才行,
若是 1,0,1 執行後 0,1,0 還是有一張未隱藏!
不然就以第一張表為依據來判斷!!!
作者: c_c_lai    時間: 2016-5-2 13:52

回復 5# 准提部林
你的意思是:
  1. Sub Ex2()
  2.     Dim arr As Variant, xS As Variant
  3.     Static tf As Boolean
  4.    
  5.     tf = Not tf
  6.     arr = Array("工作表2", "工作表3", "工作表4")
  7.     On Error Resume Next
  8.     For Each xS In arr
  9.         '  Sheets(xS).Visible = Not Sheets(xS).Visible
  10.         Sheets(xS).Visible = tf
  11.     Next
  12. End Sub
複製代碼

作者: ML089    時間: 2016-5-2 14:00

回復 5# 准提部林

准大考慮周詳,請給我們一個示範例。
作者: 准提部林    時間: 2016-5-2 14:04

回復 6# c_c_lai


ARR = Array("工作表2", "工作表3", "工作表4")
TF = 1 + Sheets(ARR(0)).Visible
For Each xS In ARR
  Sheets(xS).Visible = TF
Next
作者: ML089    時間: 2016-5-2 14:09

回復 6# c_c_lai

真厲害!
又學到  Static tf As Boolean
作者: ML089    時間: 2016-5-2 22:16

回復 8# 准提部林

3Q

下兩式的計算值有些不同,都可以達到 隱藏/顯示 的切換
    tf = Not Sheets(arr(0)).Visible '值變化 : 0 / -1
    tf = 1 + Sheets(arr(0)).Visible  '值變化 : 0 / 1
作者: c_c_lai    時間: 2016-5-3 05:46

回復 10# ML089
我理解 准提部林大大 所說的,表單
Visible 順序若為 1, 0, 1 執行後,
則 Visible 內容將變成 0, 1, 0;
結果還是有一張未被隱藏起來!
其表達即為我所提問的 #6。
所以結果是有些許的不同釋義。
作者: chaoyiho    時間: 2016-5-3 12:29

回復  c_c_lai


ARR = Array("工作表2", "工作表3", "工作表4")
TF = 1 + Sheets(ARR(0)).Visible
F ...
准提部林 發表於 2016-5-2 14:04


所以請教前輩 像是我這樣的落落長表單,也可以用您的方式做隱藏嗎?
  1. Sheets("Sav").Select
  2.     ActiveWindow.SelectedSheets.Visible = False
  3.     Sheets("Exh").Select
  4.     ActiveWindow.SelectedSheets.Visible = False
  5.     Sheets("J.C.W").Select
  6.     ActiveWindow.SelectedSheets.Visible = False
  7.     Sheets("P.C.O").Select
  8.     ActiveWindow.SelectedSheets.Visible = False
  9.     Sheets("Pmax").Select
  10.     ActiveWindow.SelectedSheets.Visible = False
  11.     Sheets("Stuffing Box").Select
  12.     ActiveWindow.SelectedSheets.Visible = False
  13.     Sheets("F.O.").Select
  14.     ActiveWindow.SelectedSheets.Visible = False
  15.     Sheets("Liner").Select
  16.     ActiveWindow.SelectedSheets.Visible = False
  17.     Sheets("總表").Select
複製代碼

作者: 准提部林    時間: 2016-5-3 13:01

回復 12# chaoyiho


Arr = Array("Sheet2", "Sheet3", "Sheet4")

( 藍色字段 ) 之內放入指定的工作表[名稱], 以" "包覆, 以[逗點]分隔!!!
作者: chaoyiho    時間: 2016-5-3 13:57

回復 13# 准提部林

謝謝前輩的回答 可是我不明白的是
  1. Dim arr As Variant, xS As Variant

  2.     Static tf As Boolean

  3.    
  4.     tf = Not tf

  5.     arr = Array("Sav", "Exh", "J.C.W", "P.C.O", "Pmax", "Stuffing Box", "F.O.", "Liner", "總表")

  6.         tf = 1 + Sheets(arr(0)).Visible
  7.         
  8.     For Each xS In arr
  9.    
  10.         Sheets(xS).Visible = tf
複製代碼
為何這樣的設定之下跟其他東西結合後會出現錯誤代碼91呢?

[attach]24149[/attach]

應該是跟其他程式碼無關才對阿?
作者: 准提部林    時間: 2016-5-3 14:23

回復 14# chaoyiho


Dim arr, xS, tf
arr = Array("Sav", "Exh", "J.C.W", "P.C.O", "Pmax", "Stuffing Box", "F.O.", "Liner", "總表")
tf = 1 + Sheets(arr(0)).Visible
For Each xS In arr
  Sheets(xS).Visible = tf
Next
作者: chaoyiho    時間: 2016-5-3 14:46

回復 15# 准提部林

嘗試過後的確可行!!

又學到知識了 感謝前輩!!

另外我有發問一個新問題

也是跟這個有關係

如果前輩不嫌麻煩 還請前輩至新問題指教

非常感謝!
作者: c_c_lai    時間: 2016-5-3 17:38

回復 12# chaoyiho
  1. Sub Ex()
  2.     Dim arr As Variant, xs As Variant
  3.     Static tf As Boolean
  4.    
  5.     tf = Not tf
  6.     arr = Array("Sav", "Exh", "J.C.W", "P.C.O", "Pmax", "Stuffing Box", "F.O.", "Liner", "總表")

  7.    
  8.     For Each xs In srr
  9.         Sheets(xs).Visible = tf
  10.     Next
  11. End Sub
複製代碼
  1. Sub Ex2()
  2.     Dim arr As Variant, xs As Variant
  3.     Dim tf As Boolean
  4.    
  5.     arr = Array("Sav", "Exh", "J.C.W", "P.C.O", "Pmax", "Stuffing Box", "F.O.", "Liner", "總表")

  6.     tf = 1 + Sheets(arr(0)).Visible
  7.    
  8.     For Each xs In srr
  9.         Sheets(xs).Visible = tf
  10.     Next
  11. End Sub
複製代碼
Ex() 與 Ex2() 是屬於兩個不同宣告方式的應用:
但終其結果執行完後一樣是達成 『表單顯現』、
亦或『表單隱藏』的需求。

一、「型態宣告」:
Ex() 裡特意將 tf 宣告成一個靜態布林 (Static Boolean)
變數;亦即該函式 Ex() 一經啟用 tf 即為 False, 當你
將它的值改變了,例如:tf = Not tf, tf 值則由 False
變更為 True,當下一次再度進入到該函式 Ex() 裡執行時,
它的值依舊為 True 不變,除非它再次碰到 tf = Not tf
的重新給值; tf 的值即被修正成為 False。
此種方式經常用於某些函式於執行時,需用到函式
內部使用靜態保留值(非公用變數)作業環境的執行。這也是
為何要將它宣告成靜態布林 (Static Boolean) 變數的道理;
學習除了要能解決疑難雜症外,還須有『得以思考』的空間。

Ex2() 裡將 tf 宣告成一個布林型態 (Boolean) 的變數;它
在每次進入 Ex2() 函式裡時,該 tf 的值永遠為  False 值,
所以你必須每次要再重新給值;否則它的值是為  False 的;
這亦是內部動態變數的特徵 (初始值的給予)。

二、「變數值之給值」:
Ex() 函式裡 tf = Not tf;
tf 為一靜態布林 (Static Boolean) 變數,其第一次執行啟動
的初始值為 False 值,當第一次遇到 tf = Not tf 的給值,它則
修正為 True;於下次再次進入到 Ex() 函式裡 tf 的值依舊為 True
不變,除非它再次碰到 tf = Not tf 的重新給值; tf 的值始變為
False。它堅信的原則是不受外在函式的改變而影響其值的不當異動。

Ex2() 函式裡 tf = 1 + Sheets(arr(0)).Visible;
此處的 tf 的給值,是依據進入到 Ex2() 函式當時裡的第一個表單
Sheets(arr(0)).Visible 為 『表單顯現』、亦或『表單隱藏』而決定;
假設此時 Sheets(arr(0)).Visible 值為 -1 (表單顯現),則當 tf =
1 + Sheets(arr(0)).Visible 時;其值則修正為 0 (表單隱藏);
反之、 進入到 Ex2() 函式當時, Sheets(arr(0)).Visible 值為 0 時;
經過 tf = 1 + Sheets(arr(0)).Visible 的再重新給值;其值則又修正為 1
(表單顯現);

結論是:無論你應用何種型態或方式來處理;最重要的是你個人的思考方向、
與構思為何;無所謂的對錯是非問題,只有個人考量的角度思維之表達差異。
程式編撰技巧能否有所增進、突破個人思維的死角;只在於你個人的企圖心
及個人意境的追求完美罷了。
作者: chaoyiho    時間: 2016-5-4 08:36

回復 17# c_c_lai

謝謝前輩的回答
我會持續的鑽研!
有問題也請其輩不厭其煩的指教!
謝謝前輩
作者: feecshyrnd    時間: 2016-5-14 20:29

感謝 小弟受教了




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