In
VB/VBA the keyword "Sub" indicates you are starting a procedure (a set of executable statements). Implicit in it is the "Public" statement, ie. "Sub MyProcedure()" and "Public Sub MyProcedure()" are exactly the same.
The difference between Public and Private is simply the scope you want to give that procedure. In real terms, it means if you want a procedure to be available to other procedures outside of its container module/class/whatever then you will need to declare it as Public; if not, declare it as Private.
It's really down to how you want to organise your code, and/or how much you want exposed to the user. Remember that in VBA projects a Public procedure/function is not available to any other project unless you explicitly set a reference to that project (using Tools | References)
Public and Private statements also apply to variables, constants, properties in the same way.