Case case If тогда операторы в пользовательской форме - PullRequest
0 голосов
/ 28 мая 2019

Сценарий 1: если Combobox 2 отображает тот же текст / значение, что и в настоящее время в рабочем листе Диапазон MRFL (A1: A250), а комбинированный список 1 отображает тот же текст / значение, что и в рабочем листе MFRL Range (B1: B250), тогда изменяйте только значениестолбца AE в той же строке, что и значение поля со списком 2 в рабочей таблице MFGLR.

Сценарий 2: Если Combobox 2 отображает тот же текст / значение, что и в настоящее время в рабочем диапазоне MRFL (A1: A250), а комбинированный список 1 отображает другой текст, чем в рабочем диапазоне MFRL (B1: B250), затем добавьте значенияcombobox1 и combobox2 в следующей доступной строке в листе MFRL, Combobox1 в столбце B и Combobox2 в столбце A. И затем изменяйте только значение столбца AE в той же строке, что и значение combobox 2 в рабочем листе MFGLR.

Сценарий 3: если Combobox 2 отображает другой текст / значение, находящееся в настоящий момент в рабочем диапазоне MRFL (A1: A250), а комбинированный список 1 отображает другой текст, чем в рабочем листе MFRL Range (B1: B250), тогда добавьте значения combobox1 и combobox2 вв следующую доступную строку в листе MFRL добавьте значение combobox2 в следующую доступную строку в столбце A на рабочем листе CT и добавьте значение combobox 2 в следующую доступную строку в столбце A рабочего листа MFGLR Combobox1 в столбце B и Combobox2 в столбце A.И тогда только изменить значение столбца AE в той же строкекак значение поля со списком 2 в Worksheet MFGLR.

Для сценариев 1 и 2 у меня возникли проблемы с тем, чтобы код нашел ту же строку, что и значение combobox2, а затем вставил значение textbox1 на 31 столбец справа.Это то, что я имею до сих пор.

With Worksheets("MFGLR").Range("a1:a500")
Set C = .Find(ComboBox2.Value, LookIn:=xlValues)
If Not C Is Nothing Then
firstAddress = C.Address
Do
    C.Value = TextBox1.Value
    Set C = .FindNext(C)
Loop While Not C Is Nothing
End If
End With
  1. Сценарии, похоже, не выполняются для всех случаев
  2. Я бы хотел, чтобы граница КТ проходила отпоследний столбец от A до столбца V
  3. Я бы хотел, чтобы граница MFRL перешла от последней строки столбца A к столбцу E
  4. Я бы хотел, чтобы граница MFRL перешла от последней строки столбца A к столбцуAM
  5. Заполнить от последней строки в столбце AF MFGLR до столбца AH

Это мой WIP для всех сценариев с границами и заполнением.

Option Explicit
Private Sub CommandButton1_Click()

Dim ColA As New Scripting.Dictionary  'Need Microsoft Scripting Runtime Reference
Dim ColB As New Scripting.Dictionary
Dim LastRow As Long
Dim Criteria1 As Boolean
Dim Criteria2 As Boolean
Dim C As Range



With ThisWorkbook.Sheets("MFRL")
    LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 'This gets the last row on column A
    For Each C In .Range("A1:A" & LastRow) 'loop through the whole column
    On Error Resume Next
        'If you have duplicated entries this will throw an error
        ColA.Add C.Value, C.Row 'add the values from column A to DictA, also store it's row for later purposes
        ColB.Add C.Offset(0, 1).Value, C.Row 'add the values from column B to DictB, also store it's row for later purposes
    Next C
    'Criterias will give value of True if matched or False if not
    Criteria1 = ColA.Exists(ComboBox2.Value) 'this is getting matched with ColA Dictionary
    Criteria2 = ColB.Exists(ComboBox1.Value) 'this is getting matched with ColB Dictionary
    If Criteria1 And Criteria2 Then 'SCENARIO 1
        .Cells(ColA(ComboBox2.Value), "AE:100") = TextBox1.Value
    ElseIf Criteria1 And Not Criteria2 Then 'SCENARIO 2
        .Cells(LastRow + 1, 1) = ComboBox2.Value
        .Cells(LastRow + 1, 2) = ComboBox1.Value
        .Cells(ColA(ComboBox2.Value), "AE") = TextBox1.Value
    With Worksheets("MFRL")
        .Cells(Rows.Count, "B").End(xlUp).Offset(-1, 1).Resize(, 3).AutoFill .Cells(Rows.Count, "B").End(xlUp).Offset(-1, 1).Resize(, 3).Resize(2)
        .Cells(Rows.Count, "B").End(xlUp).Offset(-1, 1).Resize(, 3).Resize(2).Borders.LineStyle = xlContinuous
        End With
    ElseIf Not Criteria1 And Not Criteria2 Then 'SCENARIO 3
        .Cells(LastRow + 1, 1) = ComboBox2.Value
        .Cells(LastRow + 1, 2) = ComboBox1.Value
        'Add data to the column A next blank row in sheet CT
        LastRow = ThisWorkbook.Sheets("CT").Cells(ThisWorkbook.Sheets("CT").Rows.Count, 1).End(xlUp).Row + 1
        ThisWorkbook.Sheets("CT").Cells(LastRow, 1) = ComboBox2.Value
        ThisWorkbook.Sheets("CT").Cells(Rows.Count, "A").End(xlUp).Offset(-1, 1).Resize(, 21).AutoFill .Cells(Rows.Count, "A").End(xlUp).Offset(-1, 1).Resize(, 21).Resize(2)
        ThisWorkbook.Sheets("CT").Cells(Rows.Count, "A").End(xlUp).Offset(-1, 1).Resize(, 21).Resize(2).Borders.LineStyle = xlContinuous
        'Add data to the column A next blank row in sheet MFGLR
        LastRow = ThisWorkbook.Sheets("MFGL R").Cells(ThisWorkbook.Sheets("MFGLR").Rows.Count, 1).End(xlUp).Row + 1
        ThisWorkbook.Sheets("MFGLR").Cells(LastRow, 1) = ComboBox2.Value
        ThisWorkbook.Sheets("MFGLR").Cells(LastRow, "AE") = TextBox1.Value
        ThisWorkbook.Sheets("MFGLR").Cells(Rows.Count, "AE").End(xlUp).Offset(-1, 1).Resize(, 3).AutoFill .Cells(Rows.Count, "AE").End(xlUp).Offset(-1, 1).Resize(, 3).Resize(2)
        ThisWorkbook.Sheets("MFGLR").Cells(Rows.Count, "A").End(xlUp).Offset(-1, 1).Resize(, 38).Resize(2).Borders.LineStyle = xlContinuous
        ThisWorkbook.Sheets("MFRL").Cells(LastRow, 1) = ComboBox2.Value
        ThisWorkbook.Sheets("MFRL").Cells(LastRow, 2) = ComboBox1.Value
        ThisWorkbook.Sheets("MFRL").Cells(Rows.Count, "B").End(xlUp).Offset(-1, 1).Resize(, 3).AutoFill .Cells(Rows.Count, "B").End(xlUp).Offset(-1, 1).Resize(, 3).Resize(2)
        ThisWorkbook.Sheets("MFRL").Cells(Rows.Count, "B").End(xlUp).Offset(-1, 1).Resize(, 3).Resize(2).Borders.LineStyle = xlContinuous
   End If
 End With
 ActiveWorkbook.RefreshAll
 Unload Me
 End Sub

1 Ответ

1 голос
/ 28 мая 2019

Если я понял, что все ваши сценарии в порядке, это должно сработать, в противном случае, пожалуйста, не стесняйтесь изменить код:

Option Explicit 'always get this, it forces you to declare all your variables
Sub Test()

    Dim ColA As New Scripting.Dictionary  'Need Microsoft Scripting Runtime Reference
    Dim ColB As New Scripting.Dictionary
    Dim LastRow As Long
    Dim Criteria1 As Boolean
    Dim Criteria2 As Boolean
    Dim C As Range


    With ThisWorkbook.Sheets("MFGLR")
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 'This gets the last row on column A
        For Each C In .Range("A1:A" & LastRow) 'loop through the whole column
            'If you have duplicated entries this will throw an error
            ColA.Add C.Value, C.Row 'add the values from column A to DictA, also store it's row for later purposes
            ColB.Add C.Offset(0, 1).Value, C.Row 'add the values from column B to DictB, also store it's row for later purposes
        Next C
        'Criterias will give value of True if matched or False if not
        Criteria1 = ColA.Exists(Combobox2.Value) 'this is getting matched with ColA Dictionary
        Criteria2 = ColB.Exists(Combobox1.Value) 'this is getting matched with ColB Dictionary
        If Criteria1 And Criteria2 Then 'SCENARIO 1
            .Cells(ColA(Combobox2.Value), "AE") = Combobox2.Value
        ElseIf Criteria1 And Not Criteria2 Then 'SCENARIO 2
            .Cells(LastRow + 1, 1) = Combobox2.Value
            .Cells(LastRow + 1, 2) = Combobox1.Value
        ElseIf Not Criteria1 And Not Criteria2 Then 'SCENARIO 3
            .Cells(LastRow + 1, 1) = Combobox2.Value
            .Cells(LastRow + 1, 2) = Combobox1.Value
            'Add data to the column A next blank row in sheet CT
            LastRow = ThisWorkbook.Sheets("CT").Cells(ThisWorkbook.Sheets("CT").Rows.Count, 1).End(xlUp).Row + 1
            ThisWorkbook.Sheets("CT").Cells(LastRow, 1) = Combobox2.Value
            'Add data to the column A next blank row in sheet MFGLR
            LastRow = ThisWorkbook.Sheets("MFGLR ").Cells(ThisWorkbook.Sheets("MFGLR ").Rows.Count, 1).End(xlUp).Row + 1
            ThisWorkbook.Sheets("MFGLR").Cells(LastRow, 1) = Combobox2.Value
            ThisWorkbook.Sheets("MFGLR").Cells(LastRow, 2) = Combobox1.Value
            ThisWorkbook.Sheets("MFGLR").Cells(LastRow + 1, "AE") = Combobox2.Value
        End If
    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...