2016-11-11 63 views
0

我想调用一个来自Modulework中的子工作簿,但最终出现错误消息“Method'Sheets'object'_Global'failed”。如果单独运行,我在Module1中的子运行良好。我在的ThisWorkbook代码是如此简单:Excel VBA方法'表'失败,如果从本工作簿调用

我在模块1的代码是这样的:

Sub gvGetDPMlist() 
Sheets("Sheet1").Range("tDPM[#All]").AdvancedFilter Action:=xlFilterCopy, _ 
    CriteriaRange:=Sheets("Sheet3").Range("filterSite_ID"), _ 
    CopyToRange:=Sheets("Sheet1").Range("M1:O1"), Unique:=False 
End Sub 

我在做什么错在这里?

+0

这不是失败的方法调用。你的'Sub gvGetDPMlist()'从Sub Workbook_Open()'被调用时没有任何问题。尝试用一个消息框替换'Sub gvGetDPMlist()'中的代码。它在工作簿打开事件中被调用,没有任何错误。 – NavkarJ

+0

好的。但是'Sub gvGetDPMlist()'本身很好吗? – NavkarJ

+0

试图把你的建议放在Msgbox。这个消息就像你说的那样很好。那么问题在哪里呢? – ggv

回答

0

太长,不能正确地插入评论,所以我写它作为一个答案

它可能是工作表中的宏执行之间的计时问题(它在打开工作簿立即生效)和实际可用性

来测试这一点,你可以按如下方式重构代码:

Option Explicit 

Sub gvGetDPMlist() 
    Dim IRng As Range, Crng As Range, oRng As Range 

    Set IRng = Sheets("Sheet001").Range("tDPM[#All]") 
    Set Crng = Sheets("Sheet003").Range("filterSite_ID") 
    Set oRng = Sheets("Sheet001").Range("M1:O1") 

    IRng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Crng, CopyToRange:=oRng   
End Sub 

,这样就可以看它是否实际上是一个时间问题(应该在第一Set语句错误了)或错误服用p花边在AdvancedFilter执行(它应该错误在IRng.AdvancedFilter...声明)

+0

在Module1中尝试了一个。它在第一个Set语句中出错。 – ggv

0

经过一番调查后,它看起来像问题在于Excel保护视图设置。我从本地网络共享打开我的Excel文件。如果启用了源自Internet的文件的受保护视图,则即使我在Excel启动时回答启用,vba中的高级过滤器语句也会失败。如果禁用此Excel选项,它工作正常。

相关问题