To find if another instance of the same form is currently open, you could search the collection Application.OpenForms and check if it contains a form with the same name of your Form2. Of course you should avoid to have two unrelated forms with the same name.
Dim k = Application.OpenForms.Cast(Of Form).Where(Function (x) x.Name = "yourFormName").SingleOrDefault()
if k IsNot Nothing Then
k.Close()
End If
Dim frmNew As Form2
frmNew = new Form2
Dim b As Button = DirectCast(sender, Button)
frmNew.StartPosition = FormStartPosition.CenterScreen
frmNew.Name = b.Name
frmNew.Text = b.Text
Try
frmNew.Show()
Catch ex As Exception
MsgBox(ex.Message)
End Try
This approach avoids a global variable to keep track of the previous instance.
After a quick check I think that the search code could be reduced to
Dim k = Application.OpenForms.Cast(Of Form2).SingleOrDefault()
And this will avoid also a possible name conflict with an unrelated form with the same name