Обязательны только определенные поля UserForm, а другие - "И Или" Excel VBA - PullRequest
0 голосов
/ 26 апреля 2020

Надеюсь, вы все в безопасности!
В моей пользовательской форме есть несколько ComboBox и TextBox. Когда нажимается командная кнопка В идеале я хотел бы добиться, чтобы: ComboBox2 & Textbox6 являлось обязательным требованием, при этом Either textbox2 и или (один или другой) Textbox3 также является обязательным требованием перед копированием формы в рабочую книгу. Следующий код делает поле ComboBox2 обязательным, но я просто не знаю, как сделать обязательным textbox2 и OR Textbox3 . Я только начал немного изучать Excel VBA, поэтому любая помощь очень ценится! :)

If ComboBox2.Value = "" And ComboBox3.Value = "" And TextBox6.Value = "" Or TextBox16.Value = "" Or TextBox17.Value = "" Then
   MsgBox "You must select a: Category/Type, a Description, and a Start Date" & vbCrLf & "And enter either an: Expenses or Income Amount." & vbCrLf & "Please check your entries and try again.", vbCritical
   Exit Sub
End If 

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

При проверке входных данных на UserForms есть несколько способов сделать это.

Вот пример из формы ввода, которая требует заполнения всех полей, кроме 1:

Форма пользователя:

Add LG products example form

И проверка в коде:

Dim Code As String
Dim Description As String
Dim Qty As String
Dim Min As String
Dim ProductType As String
Dim Supplier As String
Dim StockMinimums As String

With Me
    Code = .txtCodeLG.Text
    Description = .txtDescriptionLG.Text
    Qty = .txtQtyLG.Value
    Min = .txtMinLG.Value

    If .chkEMG80.Value = True Then
        ProductType = .chkEMG80.Caption
    ElseIf .chkUCP100.Value = True Then
        ProductType = .chkUCP100.Caption
    ElseIf .chkEMGLicences.Value = True Then
        ProductType = .chkEMGLicences.Caption
    ElseIf .chkUCPLicences.Value = True Then
        ProductType = .chkUCPLicences.Caption
    End If

Dim opt As Control

    For Each opt In Me.Controls
        If TypeName(opt) = "OptionButton" Then
            If opt.Value = True Then
                Supplier = opt.Caption
            Else
                'Do nothing
            End If
        End If
    Next opt
End With

If Me.chkMinimumsSheet.Value = True Then
    StockMinimums = "Yes"
ElseIf Me.chkMinimumsSheet.Value = False Then
    StockMinimums = "No"
End If

'--------------------------------------Error checking-------------------------------------

Dim ErrorString As String

If Code = "" Then
    ErrorString = ErrorString + "Please enter a value into the 'Code' box." & vbNewLine
End If

If Description = "" Then
    ErrorString = ErrorString + "Please enter a value into the 'Description' box." & vbNewLine
End If

'If Qty = "" Then
'    ErrorString = ErrorString + "Please enter a value into the 'Quantity' box." & vbNewLine
'End If

If Min = "" Then
    ErrorString = ErrorString + "Please enter a value into the 'Minimum' box." & vbNewLine
End If

If ProductType = "" Then
    ErrorString = ErrorString + "Please choose a 'Product Type'." & vbNewLine
End If

If Supplier = "" Then
    ErrorString = ErrorString + "Please select a 'Supplier'." & vbNewLine
End If

If Not ErrorString = "" Then
    MsgBox ErrorString + vbNewLine & "Danger to manifold.", vbCritical, "Values Missing"
    Exit Sub
End If

И если пользователь нажимает кнопку «Отправить», не заполняя обязательные поля, он отображает описательное сообщение, сообщающее о том, чего не хватает (здесь появляется сообщение ничего не заполнено) :

Result of submit click with missing values - messagebox dispays

0 голосов
/ 26 апреля 2020

вы можете использовать операторы "или" или "и", как если бы вы использовали не VBA Excel, это просто немного другое форматирование. Но вы находитесь на правильном пути!

В принципе, если оба поля не заполнены, появится сообщение, требующее значения в одном из полей. Если один или оба заполнены, то хорошо. IE

if textbox2.value = "" and textbox3.value = "" then
   msgbox "You must enter a value in textbox 2 and/or 3", vbCritical
   exit sub
end if

для оператора "или", просто замените "и" на "или"

Отредактируйте, чтобы добавить:

для прохождения нескольких итераций через вашу пользовательскую форму для проверки данных и проверки, заполнены ли поля, et c. Я бы начал сверху вниз и сделал бы проверку для каждого.

if textbox1.value = "" then
    msgbox "Please fill in " & textbox1.name (or .tag or some other way to identify the item), vbcritical, "Error"
    exit sub
elseif combobox2.value = "" then
    msgbox "Please fill in " & combobox2.name, vbcritical, "Error"
    exit sub
elseif textbox6.value = "" then
    msgbox "Please fill in " & textbox6.name, vbcritical, "Error"
    exit sub
elseif textbox2.value = "" or textbox3.value="" then
    msgbox "Please fill in either textbox 2 or 3", vbcritical, "Error"
    exit sub
end if

Если они просты и имеют путь к l oop, как описано другим джентльменом, вы можете использовать общую формулу c, такую ​​как

for i=1 to 5
    if me.controls("Textbox" & i).value = "" then
       msgbox "Please fill in " & me.controls("textbox" & i).name, vbcritical, "Error"
        exit sub
        exit for
     end if
 next i

I возможно, будет использовать комбинацию, если у вас много ящиков. Скажем, есть 10 обязательных полей, я могу использовать l oop через все 10 обязательных, а затем просто использовать отдельные операторы if then, используя оператор "или", чтобы проверить те, которые являются одним или другим

...