2017-05-24 5 views
0

公式に宣言された変数の値をユーザーフォームからコードが最初に起動したモジュールに戻そうとしています。変数の値をuserformに出力することはできますが、コードが開始モジュールに戻っても保持されません。 Option Explicitは両側で宣言されていますが、私は単一の変数も宣言しました(var2 - var6は使用しないので無視してください)。Excel VBA - モジュール間でパブリック変数が渡されない

コードパスは、以下の最初のセクションで始まり、 "StatSelection.Show"でユーザーフォームにジャンプし、その後userformサブファイルの最後にジャンプします。

Option Explicit 

Public var1 As String 

Sub NoNameGame2FirstRoundResults() 
' 
' NoNameGame Macro 
' 
' 
'Load Round 1 file 
    Dim r1Name As Variant 
    Dim nngr1r As Workbook 
    ChDir "D:\Users\stefan.bagnato\Desktop\No Name Game" 
    r1Name = Application.GetOpenFilename 
    If r1Name <> False Then 
     Set nngr1r = Workbooks.Open(r1Name) 
    End If 

'Load previous week's file 
    Dim r1rName As Variant 
    Dim wps As Workbook 
    ChDir "D:\Users\stefan.bagnato\Desktop\Weekly Performance Summary" 
    r1rName = Application.GetOpenFilename 
    If r1rName <> False Then 
     Set wps = Workbooks.Open(r1rName) 
    End If 

'Create radio buttons to select week 1 stat 
    StatSelection.Show 

'Parse Column B for names, and paste corresponding data in column C 
nngr1r.Activate 

Debug.Print var1 

ActiveWorkbook.Worksheets("Sheet1").Columns(2).Find("Adam").Offset(N, 1) = var1 

End Sub 

ユーザーフォームがある:

Option Explicit 

Public var1 As String 

Sub OptionButton1_Click() 
    Dim wps As Workbook, x As String 
    For Each wps In Workbooks 
    If wps.name <> ThisWorkbook.name Then x = wps.name 
    Next wps 
    Workbooks(x).Activate 

    var1 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F4")), "hh:mm:ss") 
    var2 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F5")), "hh:mm:ss") 
    var3 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F6")), "hh:mm:ss") 
    var4 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F7")), "hh:mm:ss") 
    var5 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F9")), "hh:mm:ss") 
    var6 = Format((ActiveWorkbook.Worksheets("Sheet1").Range("F10")), "hh:mm:ss") 


    Debug.Print var1 

    Me.Hide 
End Sub 

答えて

1

からパブリック変数宣言を削除

主コードが..最初のDebug.Printは、変数を提供するが、第二の一方が空白でありますUserFormモジュールを開き、それを標準モジュールのみで宣言します。

+0

これはうまくいきました! – sbagnato

+0

@sbagnatoうれしいです。あなたの質問にSolvedと印を付けるために、答えを受け入れるのに数分を要してください。 – sktneer

+0

いっそのこと、唯一のユーザーフォームでVAR1を宣言し、そのように使用:StartSelection – jkpieterse