First of all: Both functions and subs are methods and can also jointly be called "subroutines". In C#/Java/C++, there are only functions, and the difference is only in whether they return void (no value) or not. VB
has a long legacy of the two different names, but truly the only difference is whether the method returns a value (function) or not (sub).
Do you want both methods to do exactly the same thing, *INCLUDING* displaying that MsgBox?
If so, you could just code
Private Sub CalculateToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Button1_Click( sender, e )
But another trick is to just have one method handle multiple events:
Private Sub GiveMsgBoxAboutCost(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles CalculateButton.Click, CalculateToolStripMenuItem.Click
Nobody said that the name of the sub has to match the name of the event it is handling, at all. So why not use a name that is meaningful to you?