0

我想知道是否有人可以帮助我。

我正在使用下面的代码,在执行的许多操作中,当在 Excel 电子表格中创建新记录时,会自动用日期填充“A”列,用文本值“No”填充“AS”列。

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”列的同一行中插入文本值“Select”。该值取自我在下拉菜单中的第一个值,设置在名为“列表”的工作表上,命名范围为“RDStaff”。

有人可以告诉我如何更改功能,以便在“A”列填充日期后,我列表中的第一个值,即“选择”会自动填充到“C”列中?

非常感谢和亲切的问候

克里斯

4

1 回答 1

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
于 2012-12-23T17:46:11.627 回答