如何解决VBA Event中不能调用另一个Worksheet中命名范围的情况



  • 最近遇到了一个问题,同样的代码放到普通的宏Procedure里面可以跑,但是在Worksheet Event中会报错的情况。
    代码是这样,一个简单的高级筛选

    Sub filterAdv()
    Sheet2.Cells.ClearContents
    Range("start").CurrentRegion.AdvancedFilter xlFilterCopy, Range("cri_1").CurrentRegion, Range("output")
    
    End Sub
    

    其中start,cri_1和output都是命名的范围,而且Scope都是Workbook
    8c74e1ff-644f-4912-a406-193ba109b0f8-image.png
    这段代码在普通宏中跑没有问题,但是一旦放到Worksheet Event里面就有如下Bug
    37f8dbdb-c74c-4287-9d62-0a076e6ac727-image.png
    原因是因为Output, Cri_1不在这个代码对应的工作表下,所以不能调用这两个范围。

    解决方法也很简单,只要把代码仍然写到普通的宏模块下并在Worksheet Change事件中直接调用写好的模块就可以顺畅运行啦。

    Private Sub Worksheet_Change(ByVal Target As Range)
    
    Application.EnableEvents = False
     ' Filter and copy data
    
    Call filterAdv
    
    Application.EnableEvents = True
    End Sub
    
    

登录后回复