2012-12-23 116 views
0

我想知道是否有人能够帮助我请。默认值从下拉列表

我正在使用下面的代码,在正在执行的许多操作中,在内部创建新记录时,自动使用日期填充列“A”,使用文本值“否”自动填充列“AS”一个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”的名为“Lists”的表上设置。

请问有人可能会告诉我如何改变功能,以便列A填入日期后,列表中的第一个值即“Select”会自动填入列“ C”?

非常感谢和亲切的问候

克里斯

+0

'行(Target.Row).Range(“C1”)。Value =“Select”' - 这不就是你需要的吗? – mattboy

+0

嗨@mattboy,感谢您花时间回复我的帖子。我确实尝试过,但我遇到的问题是用户无法从下拉菜单中选择一个值,而不会将其恢复为“选择”。非常感谢和亲切的问候 – IRHM

回答

1

目前尚不清楚究竟哪些在C列单元格在正在从使用您的验证列表,但如果添加以下代码到你用的语句是当然应该适用于适当的下拉单元。现在

.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 
+0

嗨@斯科特霍尔茨曼,感谢您花时间回复我的文章。我承认,我不确定在哪里做出改变。然而,这是我的错,因为我没有在我的帖子中提供很多细节。我的第一篇文章包括我的完整脚本。我想要做的是当'Date'从第7行开始自动填充列“A”中的单元格时,我想让列“C”中的单元格显示文本值“Select”。该值是名为范围为“RDStaff”的名为“Lists”的表单中设置的下拉菜单中的第一个值。我希望这有帮助。非常感谢和亲切的问候 – IRHM

+0

@IRHM - 你的意思是你希望整个下拉验证适用于列C?所以用户可以选择他们是否想要...但是你希望单词select出现,所以他们知道下拉是在那里? –

+0

嗨@Scott Holtzman,谢谢你这么快就回到我身边。我的输入范围来自第7:400行。例如,如果用户在单元格“B7”中输入他们的名字,我希望单词“选择”出现在“C7”中,用户可以从下拉菜单中选择其他两个值,即“是”或“没有”。如果用户在“B100”中输入他们的名字,我想让“Select”这个词出现在单元格“C100”等中,我也希望这会有所帮助。非常感谢和亲切的问候。 – IRHM