*Beginner level of knowledge
I am using several classes in my projects and I want to make sure I'm using the subject methods (?if that's the correct term?) correctly. Any clarification to what I understand below is helpful

I want to make sure I'm following good coding practices. I've been using lengthy Subs, Functions, Lets, and Gets within Class Modules that may amount to more than 2,000 lines of code/class module. Most functions and subs I create are private, but I've used some public functions that return values just like the Get property.

QUESTION: Why would I create a Get in a Class instead of Function in a class (or vice versa) if both a function and a Property Get can manipulate and return a class's private variable?
That question then leads me to ask:
QUESTION: Why would I use a Let in a class instead of Sub in a class (or vice versa) if both a sub and a property can manipulate a class's private variable based on its input?
...isn't a sub() more functional/useful than a Let b/c you can pass multiple inputs into the class to manipulate a private variable?

My understanding:
Sub: used when no output is required (cannot output any values)
Function: Used when an output is required... but that is also the case with a Get method
Get: used to return (and manipulate) private variables, potentially based on an input... seems a function is more useful than a Get
Let: used to set (and manipulate) private variables (no input available except what you pass to it)... seems a cMyClass.(sub Name) is more useful than a cMyClass.(Let Property Name)

I've been writing some nontrivial Properties that go far beyond a simple: Variable = pVariable lines of code (where pVariable is a private Variable of the same datatype as Variable)