返回列表 上一主題 發帖

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

本帖最後由 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
複製代碼

TOP

回復 3# ML089
不錯,直接了斷乾淨俐落。受教了!

TOP

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

TOP

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

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

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題