Debería convertir primero el valor del texto de la celda a formato fecha:
Código vb:
Ver originalcmdInsertaMensaje.Parameters(5).Value = CDate(gvprevia.SelectedRow.Cells(4).Text)
Aunque en mi opinión, lo mejor es hacerlo directamente desde un procedimiento almacenado en SQL Server:
Código SQL:
Ver originalINSERT INTO HistoricoMensajes (Col2, Col1, ...)
SELECT Col1, Col2, ...
FROM Mensajes
WHERE ID = @id
Un saludo.