Board logo

標題: [發問] 如何以vba列出目前的一些設定,轉為code? [打印本頁]

作者: symis    時間: 2013-3-14 18:14     標題: 如何以vba列出目前的一些設定,轉為code?

某excel檔,原本有做一些設定如下:
隱藏欄
隱藏列
顯示比例(不是100%)
凍結窗格
分割視窗
-----------
我將之全部取消,輸入data完,要回復原先之設定再存檔給別人。
問題來了,不但麻煩,而且也不記得先前之設定。
請問,如何寫vba,執行後,可以將上述之設定,產生在一個sheet中,我可以將之轉貼在vba的模組中,如此一來,當輸入data完後,只要執行該巨集,即可回復當初之設定。
感謝!
作者: kimbal    時間: 2013-3-15 13:38

最簡單的方法, 是錄製兩個巨集,
1個是 做一次 隱藏欄/列... 等等動作
第2個是反過來做
那麼下次要再改動的話, 運行一下巨集就可
作者: symis    時間: 2013-3-15 13:44

可是檔案很多耶...
每個檔還要慢慢找,有哪些隱藏...要花很久時間
所以才想到用程式幫忙
感謝您的回答
作者: GBKEE    時間: 2013-3-15 15:31

本帖最後由 GBKEE 於 2013-3-15 15:35 編輯

回復 3# symis
  1. Option Explicit
  2. Sub Ex_製定檢視()
  3.      ActiveWorkbook.CustomViews.Add ViewName:="檢視1", PrintSettings:=True, RowColSettings:=True
  4. End Sub
  5. Sub Ex_開啟檢視()
  6.      Dim E As CustomView
  7.      With ActiveWorkbook
  8.         .CustomViews("檢視1").Show
  9.         For Each E In .CustomViews
  10.             E.Delete
  11.         Next
  12.         .Save
  13.     End With
  14. End Sub
複製代碼
[attach]14362[/attach]
作者: symis    時間: 2013-3-15 18:19

感謝GBKEE ,
a. 新增檢視畫面, 名稱: 檢視1
b. 執行: Ex_製定檢視()
c. 執行: Ex_開啟檢視()
我把代碼貼上vba後,執行的順序為: a,b,c
但是都沒東西出現?
請問正確執行的順序為何?
感恩!
作者: GBKEE    時間: 2013-3-16 07:30

本帖最後由 GBKEE 於 2013-3-19 12:55 編輯

回復 5# symis
  1. 自訂檢視模式的功能:
  2. 儲存工作表(視窗)的設定,作用中儲存格範圍(不儲存:儲存格的修改).
  3. 如此可不須修改工作表的設定,呼叫不同的工作表(視窗)設定
複製代碼
不用須有a這步驟
1#說:  某excel檔,原本有做一些設定如下: 隱藏欄,隱藏列,顯示比例(不是100%),凍結窗格,分割視窗.....
開啟這excel檔時: 執行 Ex_製定檢視()  ->儲存這些設定
****1#說:使用這excel檔時 會修改這些設定*****
關閉這excel檔時. 執行: Ex_開啟檢視() ->恢復這些設定 存檔
作者: symis    時間: 2013-3-19 11:20

原來自訂檢視也可以達到目的,不必用code記錄
感謝師兄!
作者: symis    時間: 2013-3-20 11:47

有另一位網友JOHN的程式,提供您參考:
Public filterArray(), hidRowArray(), hidColArray() As Variant
Public condArray(1 To 3)

Sub mcCondLog()
Set lastC = Range("A1", ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
i = 0
Erase hidRowArray
Erase hidColArray
For Each c In lastC.Rows
If c.Hidden Then
ReDim Preserve hidRowArray(1 To i + 1)
hidRowArray(i + 1) = c.Row
i = i + 1
End If
Next c
i = 0
For Each c In lastC.Columns
If c.Hidden Then
ReDim Preserve hidColArray(1 To i + 1)
hidColArray(i + 1) = c.Column
i = i + 1
End If
Next c
With ActiveWindow
condArray(1) = .SplitColumn
condArray(2) = .SplitRow
condArray(3) = .Zoom
End With
End Sub


Sub mcRestorecCond()
With Range("A1", ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
.Rows.Hidden = False
.Columns.Hidden = False
End With
For i = 1 To UBound(hidRowArray())
If Not IsEmpty(hidRowArray(i)) Then Rows(hidRowArray(i)).Hidden = True
Next i
For i = 1 To UBound(hidColArray())
If Not IsEmpty(hidColArray(i)) Then Columns(hidColArray(i)).Hidden = True
Next i
With ActiveWindow
.SplitColumn = condArray(1)
.SplitRow = condArray(2)
.Zoom = condArray(3)
End With
End Sub
執行mcCondLog: 記錄目前的 隱藏欄/隱藏列/顯示比例/分割視窗條件
執行mcRestorecCond:恢復 隱藏欄/隱藏列/顯示比例/分割視窗條件
至於「凍結窗格」功能,因為VBA抓不到目前凍結的分配位置,因此無法作記錄與恢復。




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