我正在尝试创建一个下拉列表,其中填充了另一个工作表中的范围。但我想要做的是显示完整列表,当用户选择和项目时,它只会在破折号之前输入该单元格中的所有字符。
所以,如果我选择了“大卫 - 项目经理”,那么选择单元格并填充“大卫”,并删除破折号后的所有内容。之后的一切都是为了让事情更容易被人看到。
答案 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