Значение по умолчанию из раскрывающегося списка

Интересно, может ли кто-нибудь помочь мне, пожалуйста.

Я использую приведенный ниже код, который среди ряда выполняемых действий автоматически заполняет столбец «А» датой, а столбец «КАК» текстовым значением «Нет» при создании новой записи в электронной таблице Excel.

Option Explicit
Public preValue As Variant
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Cell As Range, res As Variant
    Dim rCell As Range
    Dim Rng1 As Range
    Dim Rng2 As Range
    Dim Rng3 As Range


    Application.EnableCancelKey = xlDisabled
    'Sheets("Input").Protect "handsoff", UserInterFaceOnly:=True, AllowFiltering:=True, AllowFormattingColumns:=True

    If Target.Column = 3 Then
        If Target = "No" Then MsgBox "Please remember to make the same change to all rows for " & Target.Offset(0, -1).Value & " and delete any future forecasts"
    End If

       If Target.Cells.Count > 1 Then Exit Sub
    On Error Resume Next

    If Not Intersect(Target, Range("B5:AD400", "AF5:AQ400")) Is Nothing Then
        If Target.Value <> preValue And Target.Value <> "" Then
            Application.EnableEvents = False
           With Rows(Target.Row)
                    .Range("A1").Value = Date
                    .Range("AS1").Value = "No"
        End With
            Application.EnableEvents = True
            Target.Interior.ColorIndex = 35
        End If
    End If

    On Error GoTo 0
    If Target.Column = 45 Then
                If Target.Value = "Yes" Then
                Set Rng1 = Application.Union(Cells(Target.Row, "B").Resize(, 19), Cells(Target.Row, "R"))
                Rng1.Interior.ColorIndex = xlNone
                Set Rng2 = Application.Union(Cells(Target.Row, "S").Resize(, 12), Cells(Target.Row, "AD"))
                Rng2.Interior.ColorIndex = 37
                Set Rng3 = Application.Union(Cells(Target.Row, "AF").Resize(, 12), Cells(Target.Row, "AQ"))
                Rng3.Interior.ColorIndex = 42
                End If
    End If

    If Not Intersect(Target, Range("J7:J400")) Is Nothing Then
        Set Cell = Worksheets("Lists").Range("B2:C23")
        res = Application.VLookup(Target, Cell, 2, False)
    If IsError(res) Then
        Range("K" & Target.Row).Value = ""
    Else
        Range("K" & Target.Row).Value = res
    End If
    End If

End Sub

Что я хотел бы сделать, если это вообще возможно, так это то, что когда дата вставляется в столбец «A», я хотел бы вставить текстовое значение «Выбрать» в той же строке в столбце «C». Это значение берется из первого значения, которое у меня есть в раскрывающемся меню, настроенном на листе под названием «Списки» с именованным диапазоном «RDStaff».

Может ли кто-нибудь сказать мне, пожалуйста, как я могу изменить функциональность, чтобы, как только столбец «A» заполнялся датой, первое значение из моего списка, т.е. «Выбрать», автоматически заполнялось в столбце «C»?

Большое спасибо и с уважением

Крис


person IRHM    schedule 23.12.2012    source источник
comment
Rows(Target.Row).Range("C1").Value = "Select" - Разве это не все, что вам нужно?   -  person mattboy    schedule 23.12.2012
comment
Привет @mattboy, спасибо, что нашли время ответить на мой пост. Я пробовал это, но проблема заключается в том, что пользователь не может выбрать значение из раскрывающегося меню, не вернувшись обратно к Select. Большое спасибо и с уважением   -  person IRHM    schedule 23.12.2012


Ответы (1)


Не совсем ясно, из какой именно ячейки в столбце C используется ваш список проверки, но если вы добавите приведенный ниже код в свой оператор with, он, конечно, должен работать, настраиваясь на соответствующую раскрывающуюся ячейку.

.Range("C1").Value = Sheets(1).Range("C10").Value

Теперь это предполагает, что ваш раскрывающийся список, основанный на вашей проверке, находится на первом листе вашей книги (по индексу) в ячейке C10. Вам нужно будет настроить их в соответствии со структурой данных/книги.

Дело в том, что вы не жестко кодируете значение. Вы ссылаетесь на значение из раскрывающегося списка.

Согласно вашим комментариям, вот фрагмент кода, чтобы добавить список проверки в ваш код.

With Rows(Target.Row)

    '... your existing code
    With Range("C1").Validation
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween,  Formula1:=Lists!RDStaff ' you may need to make this named range global for it to work on another sheet in this context
      .IgnoreBlank = True
      .InCellDropdown = True
    End With

End WIth
person Scott Holtzman    schedule 23.12.2012
comment
Привет @Scott Holtzman, спасибо, что нашли время ответить на мой пост. Признаюсь, я не совсем уверен, где внести изменения. Однако это моя вина, так как я не предоставил много подробностей в своем посте. Мой первоначальный пост включает в себя мой полный сценарий. Что я хочу сделать, так это когда «Дата» автоматически заполняет ячейку в столбце A, начиная с row7, я бы хотел, чтобы ячейка в столбце C отображала текстовое значение Select. Это значение является первым значением в наборе раскрывающегося меню на листе под названием «Списки» с именованным диапазоном RDStaff. Надеюсь, это поможет. Большое спасибо и с уважением - person IRHM; 24.12.2012
comment
@IRHM - вы имеете в виду, что хотите, чтобы вся раскрывающаяся проверка применялась к столбцу C? Таким образом, пользователь может выбрать, если захочет... Но вы хотите, чтобы появилось слово select, чтобы он знал, что раскрывающийся список есть? - person Scott Holtzman; 24.12.2012
comment
Привет @Scott Holtzman, спасибо, что так быстро вернулся ко мне с этим. Мой диапазон ввода - от строк 7: 400. Так, например, если пользователь вводит свое имя в ячейку B7, я бы хотел, чтобы слово «Выбрать» отображалось в C7, и пользователь мог выбрать два других значения из раскрывающегося меню, т.е. «Да» или «Нет». То же самое будет применяться, если пользователь вводит свое имя в B100, я бы хотел, чтобы слово Select заполнило ячейку C100 и т. д. Надеюсь, это поможет. Большое спасибо и с уважением. - person IRHM; 24.12.2012
comment
@ИРХМ. Затем вам придется каждый раз добавлять список проверки в столбец C. Вы, конечно, можете использовать Google или запись макроса, чтобы получить синтаксис, но я поместил фрагмент в свой пост для вас. - person Scott Holtzman; 24.12.2012