给出一个下拉列表,其中包含来自不同工作表的值,我想用与所选行相关的值来填充某些单元格:
来自另一张纸:
我用与所选行相关的值填充“值”单元格和其他值。
我正确地列出了列表,并尝试添加WorksheetChange:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim param As String
param = Target.value
Set lineBool = .Find(param, LookIn:=xlValues)
If Not lineBool Is Nothing Then
ActiveSheet.Cells(lineBool, 2) = Worksheets("DEF_BOOLEAN").Cells(lineBool, 6).value
End If
End Sub
但是我没有确切知道上面的代码应该放在哪里(我在工作表文件中尝试过,但是在运行时给了我一个参考错误),而且实际上也无法工作。
答案 0 :(得分:0)
您必须在工作表代码中添加代码
并将代码更改为此:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row + 10)) Is Nothing Then
Dim param As String
Dim lineBool As Range
param = Target.Value
Set lineBool = Find(param, LookIn:=xlValues)
If Not lineBool Is Nothing Then
Cells(lineBool.Row, 2).Value = Worksheets("DEF_BOOLEAN").Cells(lineBool.Row, 6).Value
End If
End If
End Sub
您未致电相交。您只想在A行中的某些内容发生更改时激活此代码。
答案 1 :(得分:0)
顾名思义,Worksheet_Change
事件是由工作表上的更改触发的。要使代码工作,必须将其放在验证列表的工作表的代码窗格中。
您可以像与其他过程一样,从与事件过程相同的代码模块中存在的另一个过程中手动调用该过程。为此,您需要向Range
过程提供一个Worksheet_Change
对象。
但是我建议对您的代码稍作调整:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim param As String
If Application.Intersect(Target, Me.Columns("A")) Is Nothing Then Exit Sub
param = Target.value
Set lineBool = Worksheets("DEF_BOOLEAN").UsedRange.Find(param, LookIn:=xlValues) ' My guess
If Not lineBool Is Nothing Then
Me.Cells(lineBool.Row, 2) = Worksheets("DEF_BOOLEAN").Cells(lineBool.Row, 6).Value
End If
End Sub