上下文
在我的公司,一些助手填写Excel表,这是一个用户列表(名字,姓氏,ID号)。之后,我将此列表与PowerShell脚本一起使用。但通常用户列表未正确完成。例如,助理忘记输入身份证号码......。所以我希望帮助助手用数据建议/自动完成功能填写此Excel。
技术:
在“数据”表中,我可以获得所有数据(名字,姓氏,ID号)。
使用“名称管理器”我创建了:
d_FirstName
选择第一个单元格c_FirstName
选择所有列,l_FirstName
申请函数:=OFSSET(d_FirstName;0;0;COUNTA(c_FirstName)-1;1)
在“表单”表单中,我创建了具有以下功能的下拉列表:=IF(A1<>"";OFSSET(d_FirstName;MATCH(A1&"*";l_FirstName;0)-1;;SUMPRODUCT((MID(l_FirstName;1;LEN(A1))=TEXT(A1;"0"))*1));l_FirstName)
因此,当用户键入字母时,下拉列表会“建议”正确的FirstName。
问题:
如果用户仅键入名字,如何调整上一个查询,以完成行,其中包含名字和姓氏以及相应的ID号?
例如:
如果用户在下拉列表中选择名字,Excel将完成与姓氏和ID号对应的lign。
如果用户在下拉列表中选择 ID号,Excel将使用姓氏和名字对应完成lign。
第二次,当用户输入一个字母时,如何自动显示下拉列表?
谢谢
答案 0 :(得分:0)
您可以使用组合框的属性和更改事件来完成此操作。组合框将采用1维或2维命名范围或返回范围的公式,因为它是RowSource。在这里,我将文本列设置为第3列。
Private Sub cboEmpID_Change()
With cboEmpID
If Not IsNull(.Value) Then
lblEmployee.Caption = .List(.ListIndex, 1) & ", " & .List(.ListIndex, 0)
End If
End With
End Sub
Private Sub UserForm_Initialize()
Dim ColumnWidths As String
With Worksheets("Sheet1")
ColumnWidths = .Columns(1).Width & ";" & .Columns(2).Width & ";" & .Columns(3).Width
End With
With cboEmpID
.ColumnHeads = True
.ColumnCount = 3
.ColumnWidths = ColumnWidths
.TextColumn = 3
.ListWidth = Range("Sheet1!A:C").Width
.RowSource = "OFFSET(Sheet1!$A$1,1,0,COUNTA(Sheet1!$A:$A)-1,3)"
End With
End Sub
答案 1 :(得分:0)
您需要创建一个级联相关的Excel下拉列表。See