显示完整的下拉列表,但只在“ - ”之前用字符填充字段?

时间:2012-05-10 20:08:05

标签: excel validation

我正在尝试创建一个下拉列表,其中填充了另一个工作表中的范围。但我想要做的是显示完整列表,当用户选择和项目时,它只会在破折号之前输入该单元格中的所有字符。

所以,如果我选择了“大卫 - 项目经理”,那么选择单元格并填充“大卫”,并删除破折号后的所有内容。之后的一切都是为了让事情更容易被人看到。

3 个答案:

答案 0 :(得分:0)

您无法使用Data Validation执行此操作。 VBA可用于修改经过验证的单元格(但这会破坏验证,不是吗?)如果Data Validation提供完整条目,然后相邻单元格将其修剪为您的要求,那么如何进行折衷?我相信是:

=IFERROR(TRIM(LEFT(A1,SEARCH("-",A1)-1)),A1)

A1是包含Data Validation

的单元格

答案 1 :(得分:0)

VBA方法不会破坏验证,因为VBA可以满足这些要求。假设要调整DV的单元格范围是B2:B100,请尝试:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range

If Not Intersect(Target, Range("B2:B100")) Is Nothing Then
    For Each cell In Intersect(Target, Range("B2:B100"))
        If InStr(1, cell.Value, "-") > 0 Then
            Application.EnableEvents = False
            cell.Value = Trim(Left(cell.Value, InStr(1, cell.Value, "-") - 1))
            Application.EnableEvents = True
        End If
    Next cell
End If

End Sub

该宏进入了SHEET模块。

答案 2 :(得分:0)

我在Contextures Video找到了答案。

在可下载的XLS文件中有一个指向工作表所需代码的链接。

Option Explicit
' Developed by Contextures Inc.
' www.contextures.com
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo errHandler
If Target.Cells.Count > 1 Then GoTo exitHandler
If Target.Column = 6 Then
  If Target.Value = "" Then GoTo exitHandler
  Application.EnableEvents = False
  Target.Value = Worksheets("codes").Range("C1").Offset(Application.WorksheetFunction.Match(Target.Value, Worksheets("codes").Range("activitycodes"), 0) - 1, -2)
End If

exitHandler:
  Application.EnableEvents = True
  Exit Sub

errHandler:
  If Err.Number = 13 Or Err.Number = 1004 Then
    GoTo exitHandler
  Else
    Resume Next
  End If

End Sub