I think Private Module is the way to go. From the VBA Help:
Option Private Statement
When used in host applications that allow references across multiple
projects, Option Private Module prevents a module's contents from being
referenced outside its project. In host applications that don't permit such
references, for example, standalone versions of Visual Basic, Option Private
has no effect.
Syntax
Option Private Module
Remarks
If used, the Option Private statement must appear at module level, before
any procedures.
When a module contains Option Private Module, the public parts, for example,
variables, objects, and user-defined types declared at module level, are
still available within the project containing the module, but they are not
available to other applications or projects.
Note Option Private is only useful for host applications that support
simultaneous loading of multiple projects and permit references between the
loaded projects. For example, Microsoft Excel permits loading of multiple
projects and Option Private Module can be used to restrict cross-project
visibility. Although Visual Basic permits loading of multiple projects,
references between projects are never permitted in Visual Basic.
Sub Statement
Declares the name, arguments, and code that form the body of a Sub
procedure.
Syntax
[Private | Public | Friend] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]
End Sub
The Sub statement syntax has these parts:
Part Description
Public (Optional). Indicates that the Sub procedure is accessible to all
other procedures in all modules. If used in a module that contains an Option
Private statement, the procedure is not available outside the project.
Private (Optional). Indicates that the Sub procedure is accessible only to
other procedures in the module where it is declared.
Friend (Optional). Used only in a class module. Indicates that the Sub
procedure is visible throughout the project, but not visible to a controller
of an instance of an object.
Static (Optional). Indicates that the Sub procedure's local variables are
preserved between calls. The Static attribute doesn't affect variables that
are declared outside the Sub, even if they are used in the procedure.
name (Required). Name of the Sub; follows standard variable naming
conventions.
arglist (Optional). List of variables representing arguments that are passed
to the Sub procedure when it is called. Multiple variables are separated by
commas.
statements (Optional). Any group of statements to be executed within the Sub
procedure.
Regards
Trevor