may the VBA be with you

Excel VBAとか業務自動化とか

Excelでドット絵作成ツールを作る その9

はじめに

前回、

vba-belle-equipe.hatenablog.com

色の置換ができるようになりました。

現状報告

f:id:vba-belle-equipe:20160520180505g:plain

こんな感じです。

やり直し、元に戻すのボタンの押せない感を出してみました。
(実際には押せないわけではなくてマクロの中で判断して、何もしないで終わる)

コード

現時点でのコードは

'///標準モジュール///    <<変更履歴>>

'元に戻す
Sub doUndo()
  Call setSettings    '設定を共通変数にセット
  If CurHistory <= 0 Then
    Exit Sub
  End If
  CurHistory = CurHistory - 1
  Call setCurHistory
  Call copyFromHistory
  Call changeBtnClr
End Sub

'やり直し
Sub doRedo()
  Call setSettings    '設定を共通変数にセット
  If CurHistory >= CntHistory Then
    Exit Sub
  End If
  CurHistory = CurHistory + 1
  Call setCurHistory
  Call copyFromHistory
  Call changeBtnClr
End Sub

'ボタン色変更
Sub changeBtnClr()
  Dim btn1 As Shape, btn2 As Shape
  Set btn1 = Sheets("ドット絵作成").Shapes("btn_undo")
  Set btn2 = Sheets("ドット絵作成").Shapes("btn_redo")
  Call setSettings
  If CurHistory = 0 Then
    Call enableBtn(btn1, False)
  Else
    Call enableBtn(btn1, True)
  End If
  If CurHistory = CntHistory Then
    Call enableBtn(btn2, False)
  Else
    Call enableBtn(btn2, True)
  End If
End Sub

'ボタンの有効、無効切り替え
Sub enableBtn(btn As Shape, flg As Boolean)
  Select Case flg
    Case False   '押せないように見せる
      With btn
        .Fill.ForeColor.RGB = 10921638
        .Line.ForeColor.RGB = 8355711
        .TextFrame2.TextRange.Characters(1, 1). _
            Font.Fill.ForeColor.RGB = 14277081
      End With
      
    Case True    '押せるように見せる
      With btn
        .Fill.ForeColor.RGB = 13998939
        .Line.ForeColor.RGB = 10252609
        .TextFrame2.TextRange.Characters(1, 1). _
            Font.Fill.ForeColor.RGB = 16777215
      End With
  End Select
  
End Sub

こんな感じです。*1

色の指定

線や塗りつぶしのForeColor.RGBは、

f:id:vba-belle-equipe:20160520181237p:plain

「図形の書式設定」から設定した後、Debug.print で対象の色のRGBを出しました。

今後

現状ではやり直し、元に戻すが終わったタイミングでボタン色の判定をしています。
が、使ってみて、判定箇所の追加や変更があるかもという気がします。


あと載せたい機能としては「新しいブックに描画部分だけコピーして保存」くらいを考えています。

*1:変更のあったところだけです