返回列表 上一主題 發帖

[發問] 活頁簿能用陣列同時隱藏或出現嗎?

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

TOP

回復  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
複製代碼

TOP

回復 12# chaoyiho


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

( 藍色字段 ) 之內放入指定的工作表[名稱], 以" "包覆, 以[逗點]分隔!!!

TOP

回復 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呢?



應該是跟其他程式碼無關才對阿?

TOP

回復 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

TOP

回復 15# 准提部林

嘗試過後的確可行!!

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

另外我有發問一個新問題

也是跟這個有關係

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

非常感謝!

TOP

回復 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
(表單顯現);

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

TOP

回復 17# c_c_lai

謝謝前輩的回答
我會持續的鑽研!
有問題也請其輩不厭其煩的指教!
謝謝前輩

TOP

感謝 小弟受教了

TOP

        靜思自在 : 太陽光大、父母恩大、君子量大,小人氣大。
返回列表 上一主題