質問への追記・修正依頼で「goto文を外して~」とコメントした者です。
オプションボタンのコード上の指定方法についての回答になりますが
ご確認ください。
以下環境にて検証してみました。
Windows7 Excel2010
Windows10 Excel2016
・どちらもブックを新規作成後にマクロブック(.xlsm)として保存。
・シート上にフォームコントロールのオプションボタンを2つ配置。
・違いを確認するためにActiveXコントールのオプションボタンを2つ配置。
・シート上にフォームコントロールのボタンを配置(イベント開始用)
・標準モジュールに下記テストコードを記述、イベント開始用ボタンに登録。
※シート名、オプションボタンのプロパティ等は全て初期値のままです。
以下、オプションボタンの状態確認サンプルコード
Public Sub Test()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
'↓フォームコントロールのオプションボタン
If ws.Shapes("オプション 1").DrawingObject.Value = 1 Then
MsgBox "フォームコントロールのオプションボタン1 = True"
ElseIf ws.Shapes("オプション 1").DrawingObject.Value = -4146 Then
MsgBox "フォームコントロールのオプションボタン1 = False"
End If
'↓ActiveX コントロールのオプションボタン
If ws.OLEObjects("OptionButton1").Object.Value = True Then
MsgBox "ActiveXコントロールのオプションボタン1 = True"
ElseIf ws.OLEObjects("OptionButton1").Object.Value = False Then
MsgBox "ActiveXコントロールのオプションボタン1 = False"
End If
End Sub
コントロールの指定方法と真偽値の違いをご確認ください。
私の環境では質問者様の「If wb.Worksheets("メイン").OptionButton1.Value」という構文は
コンパイルを通りませんでした。
「OptionButton1.Value」はユーザーフォーム上での指定方法ではないかと。
どちらのタイプのコントロールもシート上でコントロールを選択すると、名前ボックス(数式バーの左側)に
コントロールの名前が表示されます。コード上でその名前を使用しています。
名前ボックスの名前を書き換えることで任意の名前で指定できます。
例)名前ボックスでオプションボタン1の初期名前「オプション 1」を「名前を変更したボタン」に書き換える=>
if wb.WorkSheets("メイン").Shapes("名前を変更したボタン").DrawingObject.value = True then
下記サイトがシート上のコントロールについてわかりやすくまとめられています。
http://blog.livedoor.jp/yorinaga/archives/51947591.html
お役に立てば幸いです。