前回はコメントを全て別ブックに退避させてから、全て削除するところまでを実現させました。
今回は退避させたコメントを元のブックに復元させるところまでを検証してみます。
コード
Sub CommentInport() Dim FilePath As Variant Dim myWB As Workbook Set myWB = ActiveWorkbook Dim CommentWB As Workbook FilePath = Application.GetOpenFilename("2007Excelファイル(*.xlsx),*.xlsx") 'ダイアログでキャンセルをした場合に処理を中止する。 'それ以外は選択したExcelファイルを開いて処理を続行。 If VarType(FilePath) = vbBoolean Then Exit Sub Set CommentWB = Workbooks.Open(FilePath) Dim myVar As Variant Dim i As Long myVar = CommentWB.Worksheets(1).Range("A1").CurrentRegion For i = 2 To UBound(myVar) CommentWB.Worksheets(1).Cells(i, 1).Copy myWB.Worksheets(myVar(i, 2)).Range(myVar(i, 3)).PasteSpecial (xlPasteComments) Next i Application.CutCopyMode = False CommentWB.Close End Sub
処理の流れは
①コメントを保存したブックをGetOpenFilenameを利用して開く
②退避用ブックのコメントをコピーして、復元用情報を参照して元のブックにコピーのみを貼り付ける。
③退避用ブックを閉じる
①GetOpenFileNameはファイルを選択した場合はフルパスを、キャンセルをした場合はFalse型を返す。Flaseが返ってきた場合は以降の処理が継続できないので返り値がBoolean型がどうかを判定して処理を中断している。
②退避用ブックに貼り付けてあるコメントを順番にコピーして、復元情報(シート名・セルアドレス)を元にマクロ実行時のアクティブブックにコメントを貼り付けていく。
この時アクティブブックの貼り付けセルにコメントがある場合は上書きされるので要注意。
※例のごとくこの処理でコメントが失われても責任は持てません
あと、残念ながらコメント退避に使用したブック以外を開いた場合・退避させた時とシート名が異なっている場合等の処理はしておりませんので、その場合はエラーで止まります。
③退避用ブックでコピーモードのままなので念の為、CutCopyModeをFalseにしてから退避用ブックを閉じる
まとめ
無事に当初想定していた、コメントの退避からの復元まで無事に実現させることが出来ました。
コメント退避の機能についてはコメントを一覧で管理することが出来るという副産物が生み出されましたので、コメントの削除のするしないのフラグを立てれるようにするつもりです。
後は実践使用してブラッシュアップ及びアドバイス頂いた内容を反映した改良版をその内に発表したいと思います。