Excelの条件付き書式はバックアップをとろう

バックアップが必要な理由

ニッチな話題で申し訳ないんですが、Excelの条件付き書式。
特にVBAでソースコード書いているときなんか、コンパイルしようとしただけのつもりなのにExcelが強制終了!ってことがままあります。
こまめに保存している人はあまり苦しくないでしょうが、考えに考え抜いて書いたソースをコンパイルしたら強制終了するって賽の河原かな???
で、そのときのためのバックアップファイルをExcelさんが自動的にとってくれる機能がありますよね。

Excelの[ファイル]→[オプション]→[保存]の順にクリック

でも、この保存機能をもって復元されたファイルが、たま~~~に、

一部の条件付き書式を削除する

っていう始末の悪いことしてくることがあります。
なので、条件付き書式はバックアップとっておこうね。って話です。

条件付き書式のバックアップ方法

私が携わっている業務では、マクロのソースコードはテキストファイルに出力してGitにコミットしてます。
なので、ここで条件付き書式や名前定義なんかも出力するようにして、最近では簡易的なコンパイラも作ったりしてます。
まぁうちは条件付き書式は塗りつぶしくらいしか使わないので、出力もそれに特化してます。
というわけでこんな感じ。

Option Explicit

Private Sub SaveFormatConditions(wActiveWorkbook As Workbook)

    Dim strExportLine() As String
    Dim ws As Worksheet
    Dim item As FormatCondition
    
    ReDim strExportLine(0)
    
    For Each ws In wActiveWorkbook.Worksheets
        For Each item In ws.Cells.FormatConditions
            ReDim Preserve strExportLine(UBound(strExportLine) + 1)
            strExportLine(UBound(strExportLine)) = ws.CodeName & vbTab _
                                                    & item.AppliesTo.Address(False, False) & vbTab _
                                                    & item.Formula1 & vbTab _
                                                    & "RGB(" & (item.Interior.Color \ 256 ^ 0) Mod 256 & "," _
                                                                & (item.Interior.Color \ 256 ^ 1) Mod 256 & "," _
                                                                & (item.Interior.Color \ 256 ^ 2) Mod 256 & ")"
        Next item
    Next ws
    
    Call WriteTextFile(wActiveWorkbook.FullName & "." & "条件付き書式.txt", strExportLine)
End Sub

Private Sub WriteTextFile(strPath As String, aryValues() As String)
    Dim nCh As Long
    Dim i As Long
    
    nCh = FreeFile
    Open strPath For Output As #nCh
        For i = 1 To UBound(aryValues)
            Print #nCh, aryValues(i)
        Next i
    Close #nCh
End Sub


他にもニッチなIT関連要素をまとめていますので、よければ一覧記事もご覧ください。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)