Creio que o problema nem esteja no código e sim na forma, porque guardar o valor numa variavel? Se a pessoa clicar no grid ele vai pegar um valor, agora se depois disso ela se locomover pelas teclas seu código já vai falhar, pois o click não vai ser acionado, teria quer ser o EnterCel (ou coisa parecida, não lembro).
O correto é vc já pegar direto do grid, assim não tem erro de variavel suja (valor errado).
Faça tipo assim:
'verifica se tem uma linha selecionada
if msflex_data.textmatrix(msflex_data.row, msflex_data.col) = "" then
msgbox "Não foi escolhida uma linha valida"
exit sub
endif
rs_hora.Open "SELECT * FROM tb_horas WHERE data_da_hora = #" & CDate(msflex_data.textmatrix(msflex_data..row, coluna_desejada) & "#", conn, adOpenKeyset, adLockOptimistic
If rs_hora.BOF Then
MsgBox "Selecione a data a ser deletada na tabela!", vbCritical, "Atenção!"
rs_hora.Close
Exit Sub
End If
rs_hora.Delete
rs_hora.Close