2017-05-24 1 views
0

Ich versuche, den Wert einer öffentlich deklarierten Variablen von einem Benutzerformular an ein Modul zurückzugeben, in dem der Code anfänglich gestartet wurde. Ich kann den Wert der Variable in dem Benutzerformular drucken aber es wird nicht beibehalten, wenn der Code zu dem Startmodul zurückspringt. Option Explicit ist auf beiden Seiten deklariert, und ich deklarierte auch die einzelne Variable (ignorieren Sie die var2 - var6, wie sie nicht verwendet werden, bis ich dieses singuläre Problem beheben).Excel VBA - Öffentliche Variable, die nicht zwischen Modulen übergeben wird

Der Code-Pfad beginnt im ersten Abschnitt unten, springt zum Benutzerformular bei "StatSelection.Show" und springt dann am Ende des Benutzerformulars zurück. Der erste debug.print stellt die Variable, aber der zweiter ist leer ..

Der Hauptcode lautet:

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 

Die Userform ist:

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 

Antwort

1

Entfernen Sie die öffentliche Variablendeklaration aus das UserForm-Modul und erklären Sie es nur auf einem Standardmodul.

+0

Ja das hat es funktioniert! – sbagnato

+0

@sbagnato Schön, dass es funktioniert hat. Bitte nehmen Sie sich eine Minute Zeit, um die Antwort zu akzeptieren, um Ihre Frage als gelöst zu markieren. – sktneer

+0

Noch besser wäre es, nur var1 in Userform erklären und wie so verwenden: Mit StartSelection .Show Msgbox .Var1 ENd Mit – jkpieterse

Verwandte Themen