You need to use private variables at the module level to hold your
information.
I.e. associated routines are all kept in a module. At the top of the
module - i.e. after the "Option Explicit" and before the first Sub or
Function - you define your long-lived variables as private. They will have
the same lifetime as the module - i.e. for the whole workbook session for
normal modules and the modules belonging to the individual worksheets.
(For class modules, the module variables will have the same lifetime as the
objects created from the class modules. For form modules, IIRC, the life
will extend from when the individual form is first instantiated until it is
finally unloaded, but across successive show/hide sessions. But be careful
with this type of module - you get a "second copy" of everything when you
instantiate a new instance.)
Avoid public global variables wherever possible - they are simply not good
programming practice. However, module-level PRIVATE variables are good
practice.