解決済みですが、
こんな方法もあるということで、
別案を出しておきます。
UserForm1のモジュール
vba
1Option Explicit
2Private vPattern As String
3
4Public Property Get Pattern() As Variant
5 Me.Show vbModal
6 Pattern = vPattern
7 Unload Me
8End Property
9
10Private Sub CommandButton1_Click()
11 vPattern = "A"
12 Me.Hide
13End Sub
14
15Private Sub CommandButton2_Click()
16 vPattern = "B"
17 Me.Hide
18End Sub
ThisWorkBookモジュール
vba
1Private Sub Workbook_BeforeClose(Cancel As Boolean)
2 Select Case UserForm1.Pattern()
3 Case "A"
4 '処理A
5 Case "B"
6 '処理B
7 End Select
8End Sub
ユーザーフォームにプロパティ(Property)を実装して、それを参照するようにすれば、関数のように扱えてシンプルになります。動作原理については、下記で詳細に解説していますので、参考にしてください。
ユーザーフォームで入力ダイアログを作成する - hatena chips
また、グローバル変数(標準モジュールのPublic変数)を置く必要もなくなります。
グローバル変数は、コードが分散して可読性が落ち、バグの可能性が高くなるのでできれば避けると言うのが定説です。
上記の方法かちょっと難解だという場合は、
グローバル変数ではなく、
ThisWorkBookのモジュールレベル変数として宣言したほうがいいでしょう。
ThisWorkBookモジュール
vba
1Option Explicit
2Public Pattern As String
3
4Private Sub Workbook_BeforeClose(Cancel As Boolean)
5 UserForm1.Show
6 If Pattern = "A" Then
7 '処理A
8 End If
9End Sub
ユーザーフォームモジュール
vba
1Private Sub CommandButton1_Click()
2 ThisWorkbook.Pattern = "A"
3 Unload Me
4End Sub
5
6Private Sub CommandButton2_Click()
7 ThisWorkbook.Pattern = "B"
8 Unload Me
9End Sub
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。