我想在单元格范围发生变化时自动填充单元格("C2:C5")。它不起作用..。
Sub Worksheet_Change(ByVal Target As Range)
Dim Celula As String
Dim KeyCells As Range
Set KeyCells = Range("C2:C5")
Application.EnableEvents = False
Range("U2").ClearContents
Application.EnableEvents = True
If Not Application.Intersect(KeyCells, Target) Is Nothing Then
On Error Resume Next
Celula = Application.WorksheetFunction.Hlookup("2017-S1", Range("D11:AF11"), 1, True)
On Error GoTo 0
Range("U2") = Celula
End If
End Sub
如果我只放这个(并手动运行),它就能工作:
Sub Teste()
Dim Celula As String
Application.EnableEvents = False
Range("U2").ClearContents
Application.EnableEvents = True
On Error Resume Next
Celula = Application.WorksheetFunction.Hlookup("2017-S1", Range("D11:AF11"), 1, True)
On Error GoTo 0
Range("U2") = Celula
End Sub
我做错了什么?
发布于 2018-04-06 15:21:27
也许对您的代码进行以下更改就足够了
Option Explicit
Sub Worksheet_Change(ByVal Target As Range)
Dim Celula As String
Dim KeyCells As Range
Set KeyCells = Range("C2:C5")
Application.EnableEvents = False
Range("U2").ClearContents
If Not Application.Intersect(KeyCells, Target) Is Nothing Then
On Error Resume Next
Celula = Application.WorksheetFunction.HLookup("2017-S1", Range("D11:AF11"), 1, True)
On Error GoTo 0
Range("U2") = Celula
End If
Application.EnableEvents = True
End Sub
更新:根据注释中的讨论,TO希望监视第二个工作表中的范围。如果在那里发生了更改,那么应该在另一个工作表中进行更改。假设第二个工作表的名称为Dashboard,然后将以下代码放入Dashboard的worksheet模块中
Option Explicit
Sub Worksheet_Change(ByVal Target As Range)
Dim Celula As String
Dim KeyCells As Range
Set KeyCells = Range("D2:D5")
Dim ws As Worksheet
Set ws = Worksheets("Userdata")
Application.EnableEvents = False
ws.Range("U2").ClearContents
If Not Application.Intersect(KeyCells, Target) Is Nothing Then
On Error Resume Next
Celula = Application.WorksheetFunction.HLookup("2017-S1", ws.Range("D11:AF11"), 1, True)
On Error GoTo 0
ws.Range("U2") = Celula
End If
Application.EnableEvents = True
End Sub
这里假设应该进行更改的工作表的工作表名称是Userdata,并且要在sheet Dashboard中监视的范围是D2:D5。请进行相应的修改。
发布于 2018-04-06 15:24:53
Storax的答案是绝对正确的。您的代码将被执行,但对工作表的更改将再次触发change事件,并且单元格将再次被清除...但这一次没有满足条件,因此它保持为空。
https://stackoverflow.com/questions/49695940
复制相似问题