You are confused because you see a lot of primitive functions but you don't know how they fit together. That's OK, it happened to all of us. I'll give you an "overview" of how we approach what you described using more advanced methods. I'm NOT suggesting you try this right away, but I want you to know how you approach this when using more of the tools in the Access toolkit.
The way you stop something from saving in an unwanted way is to employ the BeforeUpdate event on a bound form. A useful parameter is built-in to the call linkage for that event. The "CANCEL" parameter is passed in to the event by reference, which means if you change the CANCEL value in the BeforeUpdate code, the changed value is returned to Access when you "Exit Sub" from that event. Here's how it fits in.
You said you wanted "SAVE" buttons and "NEW" buttons. That fits in with this approach.
First, you can use the command button "wizard" which will allow you to build a button to create a new record and another button that will save the current record. (You should also consider the UNDO action if you are going this way - yet another useful wizard.) The wizards will build a scaffold of code for you that will do the absolute minimum required to do the NEW or SAVE (or UNDO) functions. You click the button, the code will set you up with the basics.
In order to remember what is going on, you create software flags (Boolean variables) in the General Declaration area at the top of the form's class module. They will be used to track the states of the form, reminding you what has happened. The down-side of this approach is that you now have flags to be maintained. Not really that hard to do, but for a beginner, it is often hard to remember to do it.
Now you go into the button_Click routines to diddle with the code that the wizards built for you. You add code to set or clear your tracking flags so that you know the states of things. For example, clickling NEW would set a "new record" flag. Clicking SAVE would set a "save requested" flag. Clicking UNDO would also do certain things to the flags based on whatever flags you created for tracking things. If you allow editing of existing records, there is a Me.Dirty flag that remembers if some field on the form has been edited.
You are NOT limited to diddling with your own flags. Forms have these properties called the "Allowxxx" flags - AllowEdit is one example. You can set and clear these flags too. If you don't want folks to modify an extant record, you set AllowEdit to false. Then for a NEW record you would set it true.
Now in the form's BeforeUpdate and AfterUpdate event code, you have some work. You wanted to stop folks from "implied save" actions. To do this, in The BeforeUpdate event, you test the "save requested" flag.
If that flag isn't set, you can pop up a message box and ping your user for not using the SAVE button. At the same time, you set the Cancel variable (which is automatically part of the BeforeUpdate event call sequence) to TRUE. The default is that Cancel is FALSE so will NOT cancel the update.
What happens then is that if the user tried to exit without saving, the update is disallowed so the EXIT is cancelled. If they tried to navigate to a new record without first saving the old one, the implied save is disallowed so the navigation is cancelled. Therefore, without that "gatekeeper" you can't implicitly save the record.
If you have strenuous validation checking, it also goes in the BeforeUpdate routine, and in fact you can put some fairly extensive checks here. It all boils down to whether you are or are not ready to allow the update, and you use the Cancel flag to stop the update if you are not ready.
On the other hand, if the "save requested" flag was set and all validation checks allow it, you DON'T do anything to the Cancel that is part of the call sequence. This will allow the Update to occur. Since the flag is ONLY set by use of the SAVE button, that means that no other method will work.
Then in the AfterUpdate event you can reset the "new record" and "save requested" flags because after an update, neither of them are true any more. You also set or clear AllowEdit if you were using it. As an alternative, you can diddle with the "state" flags and form internal flags in the form_Current routine, since it will closely follow the AfterUpdate event. Might even be better there, since you can use _Current to initialize the flags.
NOTE: There is ONE hole in this method. If for some reason the user decides to shut down the machine and uses the Windows "Force blocking task to exit" option, what happens next depends on how you programmed the form. If you have a network drop or power outage that drops the computer connection, that also might have effects. However, in none of those cases would the form's main record be updated.
I don't expect you to do this right away but this should give you an overview of how it would be done. When you feel ready to tackle this, you can remember it and use it as a rough guideline of how to proceed.