È pacifico che se in Form4 dichiari una [New Form3], della precedente Form3 non hai riferimenti. Secondo me devi fare attenzione a non confondere il concetto di Oggetto con quello di Classe.
Per risolvere problematiche simili, io mi son trovato comodo a dichiarare una proprietà di tipo Form3 nella classe Form4 e passare il riferimento dopo la creazione:
Public Class Form3
Private Sub B_Form3_Click(sender As Object, e As EventArgs) Handles B_Form3.Click
Dim Form_Secondario As New Form4
Form_Secondario.Chiamante = Me 'assegno il riferimento
Form_Secondario.TB_Form4.Text = TB_Form3.Text
Form_Secondario.Show() 'forse ShowDialog() sarebbe più appropriato...
If Form_Secondario.DialogResult = DialogResult.Ok Then 'Aggiorno il dato solo se ho clicckato sul bottone corretto di Form_Secondario
TB_Form3.Text = Form_Secondario.TB_Form4.Text
End If
End Sub
End Class
Public Class Form4
Public Property Chiamante As Form3
Private Sub B1_Form4_Click(sender As Object, e As EventArgs) Handles B1_Form4.Click
Me.DialogResult = DialogResult.Ok 'Magari valutare l'uso di DialogResult.Yes
Me.Close
End Sub
End Class
Così, dall'istanza di Form3, creai una nuova Form4 e ne inizializzi il valore della TextBox. Se cliccki sul bottone appropriato ritorni DialogResult.Ok. Se c'è l'ok, aggiorni il dato nella Form 3 da cui sei partito.
Magari esistono strade più eleganti, ma con questa non mi trovo male.
Nel tua caso specifico comunque il riferimento al chiamante non serve... Infatti non lo uso. XD
A volerlo usare, si poteva aggiustare ad esempio:
[Code]Private Sub B1_Form4_Click(sender As Object, e As EventArgs) Handles B1_Form4.Click
Chiamante.TB_Form3.Text = TB_Form4.Text
End Sub
e togliendo l'ultimo If in Form3