引用:
If .AutoFilter.Filters(i).On = True Then
msg = msg & .AutoFilter.Range(i) & vbCrLf
End If
上記の msg に代入する段階で、msg の中身として vbCrLf が含まれています。
対し、比較しているのは
引用:
If msg = "更新日" Then MsgBox "フィルターは、更新日になっています。": GoTo msg2
If msg = "開催日" Then MsgBox "フィルターは、開催日になっています。": GoTo msg1
vbCrLf が含まれていませんから、条件式が True とはならず、
GoTo先の、msg2 及び msg1 にはスキップしません。
InStr関数を使用するなり、Like演算子で比較する様にしましょう。
また、Filtersコレクション の全数に対し フィルター名
更新日・開催日 が 両方 設定されている場合には、msg1、msg2 は 共に実行されませんよ。
GoToでスキップするのであれば、msg2 実行後に、開催日の判定直前にスキップさせないといけません。
個人的には、
エラートラップ以外で、プロシージャ内を行ったり来たりになると、可読性が下がるので
・If 〜 Then 〜End if 内にそのまま実行内容を入れてしまうか
・サブプロシージャ化
のどちらかを採るでしょうか。