Parece -me que você não tem certeza de como chamar a função do botão Clique (eu posso estar errado). Então, primeiro, quando você chama uma função, ele deve sempre retornar um valor (da palavra -chave de retorno).
Você configurou uma função que exibe um OpenFiledialog - então, que valor deve retornar? Deve retornar um caminho e nome de arquivo. Isso pode ser armazenado apenas em uma string varible.
Portanto, um pouco de ajuste no seu código pode corrigi -lo.
Aqui está um exemplo:
No seu código de botão, você deseja chamar a função real mais uma variável para armazenar o nome do caminho (como acima de uma string) simplesmente:
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
Agora, na função que você deseja adicionar o retorno. Há um problema com a sua estatura IF (sem fim se). Se o resultado estiver bom, retorne o nome do caminho. Caso contrário, retorne nulo e chame um erro (você pode alterar isso):
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
No código do botão, você pode chamar outra rotina que usa o valor do caminho para fazer algo, como abrir o arquivo para leitura. No exemplo acima, ele apenas mostrará uma caixa de mensagem com o nome do caminho para o arquivo selecionado.
Espero que isto ajude.