Me parece que no está seguro de cómo llamar a la función desde el clic del botón (podría estar equivocado). Entonces, primero, cuando llame a una función, siempre debe devolver un valor (de la palabra clave de retorno).
Has configurado una función que muestra un OpenFileDialog, entonces, ¿qué valor debe volver? Debería devolver una ruta y nombre de archivo. Esto se puede almacenar en una variedad de cadena.
Por lo tanto, un poco de ajuste a su código podría solucionarlo.
Aquí hay un ejemplo:
En el código de su botón, desea llamar a la función real más una variable para almacenar el nombre de ruta (como arriba de una cadena) Simplemente:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim thePathName As String = GetFileName()
MessageBox.Show(thePathName)
End Sub
Ahora, en la función que desea agregar la devolución. Hay un problema con su Estado IF (sin fin IF). Si el resultado está bien, devuelva el nombre de la ruta. De lo contrario, devuelva nulo y llame a un error (puede cambiar esto):
Private Function GetFileName() As String
Dim OpenDonorList As New OpenFileDialog
OpenDonorList.Filter = "txt files (*.txt)|*.txt"
OpenDonorList.Title = "Save File As"
OpenDonorList.InitialDirectory = "C:\"
OpenDonorList.RestoreDirectory = True
DialogResult = OpenDonorList.ShowDialog
If DialogResult = Windows.Forms.DialogResult.OK Then
Return OpenDonorList.FileName
Else
MessageBox.Show("Error!")
Return vbNull
End If
End Function
En el código del botón, puede llamar a otra rutina que usa el valor de ThePathName para hacer algo, como abrir el archivo para leer. En el ejemplo anterior, solo mostrará un cuadro de mensajes con el nombre de ruta al archivo seleccionado.
Espero que esto ayude.