Vvlookup关于细胞变化

时间:2018-08-03 08:54:04

标签: excel vba vlookup worksheet-function

当单元格值更改时,我试图在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本身分配给按钮,它会返回正确的值,但是当将其插入到此工作表更改中时,它只会返回错误。

任何帮助都将非常感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

就是这样!谢谢 :) 我已将代码更改为:

<?php

return array(
    ...,
    'log' => 'log.txt',
    ...
);