簡體   English   中英

vba / excel-根據用戶輸入到sheet1的單元格中,從sheet2的值填充sheet1中的單元格

[英]vba/excel - populate cells in sheet1 from values in sheet2 based on user input into cells on sheet1

我創建了一個通用的excel文件,以幫助演示我要執行的操作。 我命名為Tool.xlsm的文件包含兩個工作表。 Sheet1和Sheet2。 Sheet1將被設計為具有一些將接受用戶輸入的字段。 Sheet2將對用戶隱藏,但將包含各種下拉列表選擇選項及其相應的描述,當選擇特定代碼時,這些選項應顯示在Sheet1的另一個單元格中。 此外,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

我在保管箱中的文件

對您的查詢:

可以僅通過引用sheet2中的代碼描述來完成此操作嗎?

是。 您可以為此使用VLOOKUP公式。

同樣,您可以使用VLOOKUP公式根據ID返回名稱。

例如,假設您的用戶名在K列中,ID在J列中:

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

您可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM