Vlookup 单元格更改
Vvlookup on cell change
我正在尝试在 VBA 单元格值更改时执行 Vlookup,根据已更改的单元格查找值。
目前我有:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Frametype")) Is Nothing Then
On Error GoTo MyErrorHandler:
Range("Framewidth").Value = Application.WorksheetFunction.VLookup(Sheets("Frame Info").Range("FrameType"), Sheets("Frame Info").Range("FrameTable"), 7, False)
MyErrorHandler:
If Err.Number = 1004 Then
Range("Framewidth").Value = "error"
End If
End If
End Sub
我试过将 VBA VLOOKUP 单独分配给一个按钮,它 returns 是正确的值,但是当它插入到此工作表更改时,它只 returns错误。
如有帮助将不胜感激。
1004
错误可能来自这里:
If Not Intersect(Target, Range("Frametype")) Is Nothing Then
如果 Range("Frametype")
不在工作表上,代码所在的位置。然后 Target
不能与它相交,它会抛出一个错误。根据您要执行的操作,将 Intersect()
行更改为:
If Not Intersect(Target, Range([Frametype].Address)) Is Nothing Then
在处理 Worksheet_Change
事件时,最好禁用事件,否则代码可能会进入循环。
另一个最佳实践想法是在 Error Handler
之前退出,如果可以 Exit Sub
:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo MyErrorHandler:
Application.EnableEvents = False
If Not Intersect(Target, Range([Frametype].Address)) Is Nothing Then
'If Not Intersect(Target, Range("Frametype")) Is Nothing Then
With Worksheets("Frame Info")
Range("Framewidth").Value = Application.WorksheetFunction.VLookup(.Range("FrameType"), _
.Range("FrameTable"), 7, False)
End With
End If
Application.EnableEvents = True
Exit Sub
MyErrorHandler:
If Err.Number = 1004 Then Range("Framewidth").Value = "error"
Application.EnableEvents = True
End Sub
就是这样!谢谢 :)
我已将代码更改为:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo MyErrorHandler:
Application.EnableEvents = False
If Not Intersect(Target, Range("Frametype")) Is Nothing Then
Sheets("Specification").Range("Framewidth").Value = Application.WorksheetFunction.VLookup(Sheets("Specification").Range("Frametype"), _
Sheets("Frame Info").Range("FrameTable"), 7, False)
End If
Application.EnableEvents = True
Exit Sub
MyErrorHandler:
If Err.Number = 1004 Then Range("Framewidth").Value = "error"
Application.EnableEvents = True
End Sub
我正在尝试在 VBA 单元格值更改时执行 Vlookup,根据已更改的单元格查找值。
目前我有:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Frametype")) Is Nothing Then
On Error GoTo MyErrorHandler:
Range("Framewidth").Value = Application.WorksheetFunction.VLookup(Sheets("Frame Info").Range("FrameType"), Sheets("Frame Info").Range("FrameTable"), 7, False)
MyErrorHandler:
If Err.Number = 1004 Then
Range("Framewidth").Value = "error"
End If
End If
End Sub
我试过将 VBA VLOOKUP 单独分配给一个按钮,它 returns 是正确的值,但是当它插入到此工作表更改时,它只 returns错误。
如有帮助将不胜感激。
1004
错误可能来自这里:
If Not Intersect(Target, Range("Frametype")) Is Nothing Then
如果 Range("Frametype")
不在工作表上,代码所在的位置。然后 Target
不能与它相交,它会抛出一个错误。根据您要执行的操作,将 Intersect()
行更改为:
If Not Intersect(Target, Range([Frametype].Address)) Is Nothing Then
在处理 Worksheet_Change
事件时,最好禁用事件,否则代码可能会进入循环。
另一个最佳实践想法是在 Error Handler
之前退出,如果可以 Exit Sub
:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo MyErrorHandler:
Application.EnableEvents = False
If Not Intersect(Target, Range([Frametype].Address)) Is Nothing Then
'If Not Intersect(Target, Range("Frametype")) Is Nothing Then
With Worksheets("Frame Info")
Range("Framewidth").Value = Application.WorksheetFunction.VLookup(.Range("FrameType"), _
.Range("FrameTable"), 7, False)
End With
End If
Application.EnableEvents = True
Exit Sub
MyErrorHandler:
If Err.Number = 1004 Then Range("Framewidth").Value = "error"
Application.EnableEvents = True
End Sub
就是这样!谢谢 :) 我已将代码更改为:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo MyErrorHandler:
Application.EnableEvents = False
If Not Intersect(Target, Range("Frametype")) Is Nothing Then
Sheets("Specification").Range("Framewidth").Value = Application.WorksheetFunction.VLookup(Sheets("Specification").Range("Frametype"), _
Sheets("Frame Info").Range("FrameTable"), 7, False)
End If
Application.EnableEvents = True
Exit Sub
MyErrorHandler:
If Err.Number = 1004 Then Range("Framewidth").Value = "error"
Application.EnableEvents = True
End Sub