【问题标题】:Default Value From Drop Down List下拉列表中的默认值
【发布时间】:2012-12-23 15:34:11
【问题描述】:

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

我正在使用下面的代码,在执行的许多操作中,当在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”列的同一行中插入文本值“Select”。这个值取自我在下拉菜单中的第一个值,在名为“列表”的工作表上设置,命名范围为“RDStaff”。

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

非常感谢和亲切的问候

克里斯

【问题讨论】:

  • Rows(Target.Row).Range("C1").Value = "Select" - 这还不够吗?
  • 嗨@mattboy,感谢您抽出宝贵时间回复我的帖子。我确实尝试过,但我遇到的问题是用户无法从下拉菜单中选择一个值,而不会将其恢复为“选择”。非常感谢和亲切的问候

标签: excel excel-2003 vba


【解决方案1】:

目前尚不清楚 C 列中的哪个单元格是使用验证列表的确切位置,但如果将下面的代码添加到 with 语句中,它应该可以工作,当然,调整到适当的下拉单元格。

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

现在,这假定您的下拉列表,基于您的验证在单元格 C10 中工作簿的第一张表(按索引)。您需要调整这些以匹配您的数据/工作簿结构。

关键是您不要对值进行硬编码。您从下拉列表位置引用该值。

根据您的 cmets,这是一个代码 sn-p,用于将验证列表添加到您的代码中。

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

【讨论】:

  • 嗨@Scott Holtzman,感谢您抽出宝贵时间回复我的帖子。我承认,我不确定在哪里进行更改。但是,这是我的错,因为我没有在帖子中提供很多细节。我最初的帖子包括我的完整脚本。我想要做的是,当“日期”从第 7 行开始自动填充“A”列中的单元格时,我希望“C”列中的单元格显示文本值“选择”。该值是在名为“列表”的工作表上设置的下拉菜单中的第一个值,命名范围为“RDStaff”。我希望这有帮助。非常感谢和亲切的问候
  • @IRHM - 您的意思是您希望整个下拉验证适用于 C 列?因此,用户可以根据需要进行选择...但是您希望单词 select 出现,以便他们知道下拉菜单在那里?
  • 嗨@Scott Holtzman,谢谢你这么快就回来找我。我的输入范围从第 7:400 行开始。因此,例如,如果用户在单元格“B7”中输入他们的姓名,我希望“选择”一词出现在“C7”中,用户可以从下拉菜单中选择其他两个值,即“是”或“不”。如果用户在“B100”中输入他们的姓名,这同样适用,我希望在单元格“C100”等中添加“选择”一词。我希望这会有所帮助。非常感谢和亲切的问候。
  • @IRHM。然后,您每次都必须将验证列表添加到 C 列。你当然可以谷歌或宏记录来获取语法,但我在我的帖子中为你放了一个 sn-p。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2013-10-23
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
相关资源
最近更新 更多