午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

エクセル2007アドイン、セルの塗りつぶしとフォントのパレット作ってみた、その12

gogowaten.hatenablog.com

から続き

 

一回だけ戻せる元に戻すのボタンを付けてみた
マイパレットへの色の登録でフォントの色も取得できるようにした
起動時に表示する配色を今のブックのテーマの配色にするようにした
 
 

f:id:gogowaten:20191015150138p:plain

以前はどのテーマでもOfficeの配色で起動していたけど
開いているブックのテーマに合わせるようにした
 
フォントカラーから色の登録

f:id:gogowaten:20191015150149p:plain

フォントにチェックを入れた状態で右クリックすると
 
 
イメージ 2
はいで

f:id:gogowaten:20191015150201p:plain

選択セルのフォントカラーが登録された
以前はフォントにチェックを入れていても塗りつぶしの色が登録されていた
 
 
元に戻すのボタン
イメージ 4
最初は無効になっている
狭い
 

f:id:gogowaten:20191015150326p:plain

フォントカラーやセルの色を午後のパレットで変更すると

元に戻すのボタンが有効になる
 
ボタンを押すと
イメージ 6
どこを元に戻すかの確認
これは余計かなあ
 
イメージ 7
はいを選択すると元に戻って
元に戻すのボタンは無効の状態に戻る
 
このボタンで戻せるのは直前の一回分だけで
赤だったのを青に変えてから黄色に変えた場合に
ここから戻せるのは青で赤には戻せない
あとはシートがグループ化状態の時は
変更した時にアクティブになっていたシートだけ
 
塗りつぶしとフォントカラーを間違ってしまうことがあって
そんな時元に戻すボタンがあればなあと思っていて作ってみた
 
マクロで変更したものはエクセルの元に戻すのボタンでは戻らないから
自分で作る必要がある
まずこの機能はどうなっているのかなんだけど
単純に変更する箇所をアドインのシートに書式だけコピペすると同時に
その変更箇所の場所を記憶しておいて
元に戻すのボタンを押した時にコピペしておいたセルから
書式だけをコピペしているだけ
 
最初はセルの書式以外のすべてをコピペしていたせいで
セルの上に乗っかている図形や
ワードアート、コメントも全てって事になっていて
色変更するたびにコピペ先に図形とかが増えていた
これに気づいて書式だけのコピペにしたらメモリの使用量が微々たるものになった
試しに新規シートにある全てのセルを選択して使ってみたけどほとんど変化なし
たくさんの書式設定がしてあるセルがたくさんだとまた違ってくるのかも
 
 
参照したところ
8.5 コピーや切り取りを解除する - Excel VBA Tips
 
 
ダウンロード
ファイル名 午後のパレット_20141125.zip
ダウンロード先1
ダウンロード先2(ヤフーボックス)
 
元に戻すのボタン
ユーザーフォームの先頭でPublicで宣言、コピペ元のアドレス記憶
Public uAddress As String '元に戻す用のセルアドレス
Public uSheet As String’シート名
Public uBook As String’ブック名

Private Sub CommandButton元に戻す_Click()
    If uAddress = "" Then Exit Sub
    
    If MsgBox(uBook & "_" & uSheet & "の" & vbNewLine & _
            uAddress & "を一つ前の状態に戻しますか?", vbYesNo) = vbYes Then
        'アドインのシートから書式だけのコピペにした
        ThisWorkbook.Sheets("元に戻す").Range(uAddress).Copy 'ThisWorkbookがアドインのブックになる
        Workbooks(uBook).Worksheets(uSheet).Range(uAddress).PasteSpecial Paste:=xlPasteFormats
        ThisWorkbook.Sheets("元に戻す").Range(uAddress).ClearFormats '書式設定を削除
        Workbooks(uBook).Activate
        Workbooks(uBook).Worksheets(uSheet).Range(uAddress).Select 'これを実行しないと枠が残る
        
        uBook = ""
        uSheet = ""
        uAddress = ""
        Me.CommandButton元に戻す.Enabled = False
        Call シートの方をアクティブにする
        
    End If
End Sub
ここまでユーザーフォーム
 
ここからクラスモジュール
Sub 元に戻す用の処理()
    If TypeName(Selection) <> "Range" Then Exit Sub
    
    'セル範囲からブック名シート名セルアドレス取得
    UserForm午後のパレット.uAddress = Selection.Address
    UserForm午後のパレット.uSheet = ActiveSheet.Name
    UserForm午後のパレット.uBook = ActiveWorkbook.Name 's.Parent.Parent.Name
    
    '元に戻すボタンを有効にする
    UserForm午後のパレット.CommandButton元に戻す.Enabled = True
    
    'アドインのシートへコピペ
    Selection.Copy
    ThisWorkbook.Sheets("元に戻す").Range(Selection.Address).PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False 'コピー範囲の枠の点滅をやめる
End Sub

画像だと

f:id:gogowaten:20191015150640p:plain

 
関連記事
 続き