Если есть люди которым не жалко своего времени спроектировать алгоритм, пожалуйста отзавитесь, люди добрые, или совет какой дайте, а то знаний маловато.
Задолбался уже, пишу программу с контролом VSFlexGrid, мне нужно при корректировке индексного поля проверить на совпадение всю колонку, если совпадение есть то значение поля должно вернуться в исходное и включиться режим редактирования поля (EditCell()). Если, вписав не правильное значение, пользователь ушел с ячейки то курсор должен вернуться обратно для ввода правильного значения. Я уже задолбался с реализацией возврата на эту ячейку - не всегда получается программно вернуть фокус на нее (в чем и собственно проблема). Метод Select, которым я устанавливаю положение курсора, не срабатывает при обнаружении повторения в событии AfterEdit, срабатывает только в событии MouseDown. Поэтому курсор вернется в том случае если пользователь ушел этого поля кликом мыши, а вот с другими вариантами(клавиатура, пореря курсора) не получается никак реализовать?

Private Sub VSFlexGrid1_AfterEdit(ByVal Row As Long, ByVal Col As Long)

    If Not VSFlexGrid1.Text = strBuffer1 Then ' Если содержимое ячейки было изменено
        If VSFlexGrid1.Col = 1 Then ' если это индексное поле
            If IndexVerify(VSFlexGrid1.Text) Then ' Проверка нового значения на повторение
                ' Занесение обновления в базу
                RSet1.MoveFirst
                RSet1.Move VSFlexGrid1.Row - 1
    
                RSet1.Update VSFlexGrid1.Col - 1, VSFlexGrid1.Text
            Else
                MsgBox "Такой номер уже существует, введите другой!", vbCritical, "Ошибка"
                VSFlexGrid1.TextMatrix(nCell1(0), 1) = strBuffer1 ' Возврат предидущего значения
                bool1 = True ' не обращайте внимания
                
                VSFlexGrid1.Select nCell1(0), 1   ' возврат на эту ячейку, который почему то здесь не срабатывет
                VSFlexGrid1.EditCell  ' редактирование
                bool2 = False ' не обращайте внимания
            End If
            '==============================================
        Else
            ' Обновление если это не индесное поле
            RSet1.MoveFirst
            RSet1.Move VSFlexGrid1.Row - 1
            Beep
            RSet1.Update VSFlexGrid1.Col - 1, VSFlexGrid1.Text
        End If
    End If
    
End Sub
' В этом событии не срабатывает функция VSFlexGrid1.Select для перехода на эту же ячейку (возврат)
'Пришлось "возвращаться" при других событиях, вот наример MouseDown, для чего и нужен bool1

Private Sub VSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    If bool1 = True Then VSFlexGrid1.Select nCell1(0), nCell1(1)
    bool1 = False
End Sub
'Но вот проблема, Select работает только в этой функции, а при нажадии на стрелку на клавиатуре
'курсор уходит с позиции и возвращаться не хочет и в этот момент безотказно срабатывает StartEdit
'
' Функция проверки на отсутсвие индекса с тким же значением
' принимает проверяемое значение
Function IndexVerify(strSource As String) As Boolean
    Set Rset2 = New ADODB.Recordset
    ' Выборка совпавшихся значений (повторения)
    Rset2.Open "SELECT НОМЕР FROM СПР_ФАМИЛИЙ WHERE НОМЕР=" & strSource _
    , MainConnection, adOpenForwardOnly, adLockPessimistic
    
    IndexVerify = Rset2.EOF And Rset2.BOF ' true если результат выборки пуст (нет совпадений)
    Rset2.Close
    Set Rset2 = Nothing
End Function