Look closely at the code in post #7. The same lines of code are repeated four times. Repeated code is a clear fingerprint of poor coding and what you have here is a very bad example. If you are trying to learn how to code then you have chosen the wrong model to learn from.
Look at this line of code from your current example :
If mathstr = "" Then mathstr = btntag Else docalc(mathstr,btntag)
This says "If <mathstr> has not been set then set it to the new value (+, -, *, /) but if it has been set then start the calculation using the original <mathstr> value". However in subroutine <docalc> the calculation will not be done as <nr2> has not yet been set. So, once <mathstr> has been set any second arithmetic value will be ignored and the original one will remain in place, as you describe.
Now look at the original code :
If mathstr = btntag Then Return
If mathstr = "" Or mathstr <> btntag Then mathstr = btntag Else docalc(mathstr,btntag)
This says "If the new <btntag> value matches a previously set value in <mathstr> then do nothing. Otherwise if <mathstr> has not been set or it has been set to a different <btntag> value then replace it with the new value. If <mathstr> has not been set and it is not the same as <btntag> then proceed with the calculation". The first part of this is fine, but the rest is a puzzle to me - I cannot see any situation in which the "Else" clause would be triggered, or why you would want it to be.
I have tried running the original code and, as you say, it does not work as you might expect if two operator keys are pressed in sequence. It is has many errors in its design. I have tried to find a simple correction that will fix the problem and always other problems appear. My advice to you is you to look for a better example - this is not a good place to start. I would also add that there is no such thing as the "simple calculator" application that you mention in your first post - coding a good calculator is in fact quite difficult.