In Visual Basic language variables can be declared in different scopes (module level, local in the function, within the code block) with different access modifiers (private or public) which define their visibility in the code.

Class or module (aka members)

Usually declared in the header of the class (outside of functions and procedures). Member variables have 2 levels of visibility (private and public).

Private

Declared using Dim keyword and only visible by the function and procedures within the scope of this class or module.

Module1

Dim member As Integer
Sub Init()
    member = 10 'visible within the Init function of the Module
End Sub

Private variables cannot be accessed from outside of the module or class. Compile error: method or data member not found occurs when attempting to access the private member from outside class or module.

Compile error: method or data member not found when calling the privately declared variable from outside class
Compile error: method or data member not found when calling the privately declared variable from outside class

Public

Public variables declared using the Public keyword and can be accessed both from current module or class and external module or class

Module1

Dim publicMember As Integer

Module2

Sub main()
Module1.publicMember = 20 'variable is accessed and assigned from the external module
End Sub

Local

Local variables declared in the scope of specific code block or function and only visible within that block for the code appearing after the declaration of the variable

Dim var1 As Double
var1 = 0.5 'var1 is visible here
var2 = 0.25 'var2 is not visible at this step as it is declared in the next line
Dim var2 As Double

Code block

Variables defined in the loops or conditional statements

If res Then
    Dim localVar As Integer 'local variable defined within the If code block
    localVar = 25
End If

Although, local code block variables are only visible within this code block, same variable name cannot be used in other code block.

Function or procedure

Variables defined in the context of function or procedure. These variables are visible within the function or any nested code blocks.

Sub main()
    Dim localVar As String
    Dim localBoolVar As Boolean
    localVar = "Hello World"
    If localBoolVar Then 'local variable accessed in the conditional statement
        localVar = "New Hello World" 'local variable modified within the body of conditional statement
    End If
End Sub

Function or procedure parameter

Variables are defined in the signature of the function. These variables declaration equivalent to the local function variable declared at the first line of the function body, i.e. the variables are visible for all code blocks within this function.

Sub DoWork(paramVar As Double, paramVar2 As Integer)
End Sub

This example demonstrates the behaviour of variables declared in the different scopes:

Module1

Module1 module in the Visual Basic Project
Module1 module in the Visual Basic Project
Public Module1PublicText As String 'public variable is visible outside of the module
Dim Module1PrivateText As String 'only visible by functions and properties of this module

Sub Init()
    
    Module1PublicText = "Module1 Public Text"
    Module1PrivateText = "Module1 Private Text"
    
End Sub

Main Module

Dim memberInt As Integer

Sub main()
    
    memberInt = 10
    
    Dim localString As String
    localString = "Hello World"

    Debug.Print memberInt 'Prints 10
    Debug.Print localString 'Prints Hello World
    
    proc
    proc2
    module
    
End Sub

Sub proc()
    
    Dim localString As String
    localString = "New Hello World"
    
    memberInt = 20
    
    Debug.Print localString 'Prints New Hello World
    Debug.Print memberInt 'Prints 20
    
End Sub

Sub proc2()
    Debug.Print localString 'prints empty string as localString local variable from main and proc functions are not visible in this scope
    Debug.Print memberInt 'prints 20 as module level variable was modified in proc function
End Sub

Sub module()
    Module1.Init
    'Debug.Print Module1.Module1PrivateText 'compile error as variable is not visible outside of module 1
    Debug.Print Module1.Module1PublicText 'prints Module1 Public Text
End Sub

Output to Immediate Window

Output of variable values
Output of variable values