Как обойти другие подводные лодки при выгрузке в пользовательской форме? - PullRequest
0 голосов
/ 09 марта 2019

Этот бит кода проверяет наличие дублирующихся значений в текстовом поле формы пользователя и заставляет пользователя заполнять информацию. Работает отлично! Моя единственная проблема в том, что теперь я не могу выгрузить пользовательскую форму, не вызвав событие, и если я пытаюсь отменить ее полностью, тогда это проблема ... (У меня есть несколько из них для загрузки ...)

У вас есть идеи, как это обойти или подавить?

    Duplicate check code
    Private Sub ItemName_exit(ByVal Cancel As MSForms.ReturnBoolean)  'checks for duplicate

    If Application.WorksheetFunction.CountIf(Worksheets(2).Range("B6:B505"), ItemName.Text) > 0 Then
    MsgBox ("Duplicate value, please change the name."), vbOKOnly, Title:="Duplicate"
       Cancel = True
        Exit Sub: End If

    End Sub

Я пытался подавить события как логические, отключить отображение предупреждений безрезультатно ...

Есть идеи?

1 Ответ

1 голос
/ 09 марта 2019

Даниэль, лучше использовать событие TextBox1_Change. Это событие проверяется при вводе, и «Выход из Sub» в вашем операторе IF также не закрывает пользовательскую форму - если, конечно, вы этого не хотите. Вы можете добавить ControlTipText в режиме «Дизайн» для вашего TextBox, а затем обязательно изменить свойство ShowModal на False. Приведенный ниже пример отличается от того, что вы имели, но достигает цели.

Код Пример:

Option Explicit

Private Sub TextBox1_Change()

Dim ws As Worksheet
Dim rng As Range
Dim intDupes As Integer

'set variables
Set ws = ThisWorkbook.Worksheets("sheetname")
Set rng = ws.Range("B6:B505")
intDupes = Application.WorksheetFunction.CountIf(rng, TextBox1.Value)

'changes color of textbox
'also, you can add a ControlTipText text to the textbox
'that informs the user what your message box did
If intDupes > 0 Then
    TextBox1.BackColor = vbRed
ElseIf intDupes = 0 Then
    TextBox1.BackColor = vbWhite
End If

'clean up
Set cell = Nothing: Set ws = Nothing

End Sub
...