0

我创建了一个通用的 excel 文件来帮助演示我想要做什么。我命名为 Tool.xlsm 的文件包含两个工作表;工作表 1 和工作表 2。Sheet1 将被设计为有几个可以接受用户输入的字段。Sheet2将从用户隐藏,但将包含各种下拉列表选择选项及其相应的描述,这些描述应在选择特定代码时在Sheep1上的另一个单元格中显示。此外,Sheet2 将在一列中包含许多 ID#,在下一列中包含它们对应的用户名。这样做的目的是让用户能够快速将 ID# 与其所属的用户相关联。

这是我到目前为止所拥有的......我怀疑我是否会尽可能高效地完成它,但我非常感谢你们的专业知识!

Sub Button1_Click()

'Based on selected value of C1, show corresponding message in J1'
'Can this be done by simply referencing the code descriptions in sheet2?'

If Range("C1") = "code 1" Then
    Range("J1") = "code 1 description"
End If

If Range("C1") = "code 2" Then
    Range("J1") = "code 2 description"
End If

'End of code selection'
End Sub

Sub Button2_Click()

'Based on ID# entered into C3, display corresponding name in J1 (Sheet2 contains ID#s with corresponding names)'
'There has to be an esier way to loop through 1000s of records and display corresponding ID# and Person''s name'
'Rather than assigning Person 1, to Range J1, I should be able to just reference the cell Sheet2!E3 but that doesn''t seem to work'

If Range("C3") = "1001" Then
    Range("J1") = "Person 1"
End If

If Range("C3") = "34349090" Then
    Range("J1") = "Person 83"
End If

'End ID# search'
End Sub

Sub Button3_Click()

'Clear unlocked cells'

End Sub

我在 Dropbox 中的文件

4

2 回答 2

1

对于您的查询:

这可以通过简单地引用 sheet2 中的代码描述来完成吗?

是的。您可以VLOOKUP为此使用公式。

同样,您可以使用VLOOKUP公式根据 ID 返回名称。

例如,假设您的用户名在 K 列,ID 在 J 列:

在工作表 1 上,假设单元格 C3 中的 ID,输入公式:=VLOOKUP(C3, Sheet2!$J$K, 2, False)

于 2013-04-24T03:31:34.530 回答
0

您可以使用 worksheet_change 事件。请相应地设置 rngFindCode 和 rngFindCode1 范围以参考您在 sheet2 中的数据。

下面是代码。

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next

    Application.EnableEvents = False

    If Target.Address = "$C$1" And Target.Cells.Count = 1 And Target.Value <> "" Then

        Dim rngFindCode As Range '
        Dim cellCode As Range

        Set rngFindCode = Sheets("Sheet2").Range("C1:C100")    ' Refers to range where code is in sheet 2
        Set cellCode = rngFindCode.Find(What:=Target.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)

        If Not cellCode Is Nothing Then
            Range("J1").Value = cellCode.Offset(0, 1).Value
        End If

    ElseIf Target.Address = "$C$3" And Target.Cells.Count = 1 And Target.Value <> "" Then

        Dim rngFindCode1 As Range '
        Dim cellCode1 As Range

        Set rngFindCode1 = Sheets("Sheet2").Range("E1:E100")    'Refers to range where name is
        Set cellCode1 = rngFindCode1.Find(What:=Target.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)

        If Not cellCode1 Is Nothing Then
            Range("J1").Value = cellCode1.Offset(0, 1).Value
        End If

    Else
        Range("J1").Value = ""
    End If

    Application.EnableEvents = True
End Sub
于 2013-04-24T03:27:53.877 回答