Search code examples
vbavariablesuserformpublic

Anyway to populate a userform textbox with a public variable?


I am trying to populate a textbox on a userform with a public variable to allow the user to copy and paste into an external program. I can pass basic strings into the textbox but cannot seem to pass a variable. Here is my current code:

VBA Button-click

Option Explicit
Public PathConfig As String
Public BuildableLand As String

Public Sub Import_Click()

PathConfig = "TestConfig"
BuildableLand = "TestBuildable"
CopyPaste.Show
CopyPaste.ConfigText.Text = PathConfig
CopyPaste.BuildableLandText.Text = BuildableLand

End Sub

Userform

Textboxes are named 'ConfigText' and 'BuildableLandText' respectively

enter image description here

Userform Code

Private Sub ExitForm_Click()

Unload Me

End Sub

Private Sub UserForm_Initialize()

CopyPaste.ConfigText.Text = PathConfig
CopyPaste.BuildableLandText.Text = BuildableLand

End Sub

When I step through the code it doesn't seem like the PathConfig/BuildableLand variables are holding their value over to the userform. Is Public variable not sufficient?


Solution

  • A slightly improved version of the code above could look like that

    Option Explicit
    
    Private Sub Import_Click()
    
        Dim frm As CopyPaste
        Set frm = New CopyPaste
    
        With frm
            .ConfigText.Text = PathConfig
            .BuildableLandText.Text = BuildableLand
            .Show
        End With
    
    End Sub
    

    Additionally create an extra sheet with the codename shConf for the configuration values you need and a module with the following functions

    Option Explicit
    
    Function PathConfig() As String        
        'Using Names instead of a direct cell reference would probably better
        PathConfig = shConf.Range("A1")
    End Function
    
    Function BuildableLand() As String
        BuildableLand = shConf.Range("A2")
    End Function
    

    There is no code in the userform initialize event needed.

    You should also reconsider using Unload in the exit event of the userform as this destroys the class. Use Hide instead! With Unload the userform no longer exists and you cannot retrieve the user input.