Как уменьшить оператор IF для нескольких кнопок выбора - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть пользовательская форма, которая позволяет пользователю вводить количество дефектов продукта в текстовое поле.Это делается как часть ежемесячного отчета, поэтому у меня есть кнопки выбора месяца (12 вариантов).Есть также кнопки выбора типа продукта.Код в основном оценивает, какие параметры выбраны, и копирует значения текстового поля (количество дефектов) в определенные ячейки в другой электронной таблице (для целей отчетности).Не все текстовые поля должны иметь значения, введенные пользователем.

Вы можете проверить скриншот пользовательской формы https://imgur.com/a/6QefjCp.

Как вы можете видеть из кода, я используюкуча операторов IF для принятия решения - я бы хотел уменьшить длину этого кода, но я не знаю, с чего начать.

До этого я никогда не использовал VBA, так что нетЯ действительно пытался найти решение.В своем текущем состоянии код работает без нареканий.Просто глядя на уменьшение и очистку.

Private Sub OKButton_Click() 'This is the button the user clicks to finalize
                             'the data entry

'Calling the Product type modules
Call Product1Module
Call Product2Module
Call Product3Module

End Sub
Sub Product1Module() 'All product modules will look almost exactly like this
                     'except the cell ranges will be different

If UserForm.Product1Button.Value = True Then 'Checking for Product1 Option button
    If UserForm.JANButton.Value = True Then
    'Record value to textbox if JAN is selected
        Sheets("Sheet1").Range("B1107").Value = UserForm.TextBox1.Value
        Sheets("Sheet1").Range("B1115").Value = UserForm.TextBox2.Value
        Sheets("Sheet1").Range("B1108").Value = UserForm.TextBox3.Value
        Sheets("Sheet1").Range("B1116").Value = UserForm.TextBox4.Value
        Sheets("Sheet1").Range("B1109").Value = UserForm.TextBox5.Value
        Sheets("Sheet1").Range("B1117").Value = UserForm.TextBox6.Value
        Sheets("Sheet1").Range("B1111").Value = UserForm.TextBox7.Value
    ElseIf UserForm.FEBButton.Value = True Then
        Sheets("Sheet1").Range("C1107").Value = UserForm.TextBox1.Value
        Sheets("Sheet1").Range("C1115").Value = UserForm.TextBox2.Value
        Sheets("Sheet1").Range("C1108").Value = UserForm.TextBox3.Value
        Sheets("Sheet1").Range("C1116").Value = UserForm.TextBox4.Value
        Sheets("Sheet1").Range("C1109").Value = UserForm.TextBox5.Value
        Sheets("Sheet1").Range("C1117").Value = UserForm.TextBox6.Value
        Sheets("Sheet1").Range("C1111").Value = UserForm.TextBox7.Value
    ...

    End If
End If
End Sub

1 Ответ

2 голосов
/ 20 сентября 2019

Присвойте каждой из ваших опционных кнопок значение свойства Tag - например, сделайте JANButton.Tag равным "B", затем сделайте FeBButton.Tag равным "C" и т. Д.

Тогда вы можете сделать это:

Dim targetColumn As String
Select Case True
    Case UserForm.JANButton
        targetColumn = UserForm.JANButton.Tag
    Case UserForm.FEBButton
        targetColumn = UserForm.FEBButton.Tag
    '...
End Select
With Worksheets("Sheet1") '<~ which workbook is that in? whatever is active?
    .Range(targetColumn & "1107").Value = UserForm.TextBox1.Value
    .Range(targetColumn & "1115").Value = UserForm.TextBox2.Value
    '...
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...