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).
Now...
Do you want both methods to do exactly the same thing, *INCLUDING* displaying that MsgBox?
If so, you could just code
[code]
Private Sub CalculateToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles CalculateToolStripMenuItem.Click
Button1_Click( sender, e )
End Sub
[code]
But another trick is to just have one method handle multiple events:
Code:
Private Sub GiveMsgBoxAboutCost(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles CalculateButton.Click, CalculateToolStripMenuItem.Click
...
End Sub
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?