2015-09-08 69 views
1

我試圖在單元格中的值發生更改時應用宏。我有這個代碼在儀表盤表:在單元格值更改上應用宏:1004錯誤

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Target.Worksheet.Range("FilterChoice")) Is Nothing Then Call ApplyDashboardFilter 
End Sub 

觸發工作正常,並在之後執行的宏,但不知道爲什麼我上了高級過濾器功能的錯誤:「應用程序定義或對象定義的錯誤「

Option Explicit 

Sub ApplyDashboardFilter() 
    Dim rng As Range 
    Dim filterName As String 
    Dim tableName As String 
    filterName = "Filter" & Replace(Sheets("Dashboard").Range("FilterChoice").Value, " ", "") 
    tableName = filterName + "[#All]" 
    Sheets("Dashboard").Activate 
    Sheets("Dashboard").Columns("A:AN").Cells.Clear 
    Sheets("Critical Flows").Range("ClosingFlows[#All]").AdvancedFilter Action:=xlFilterCopy _ 
     , CriteriaRange:=Sheets(filterName).Range(tableName) _ 
     , CopyToRange:=Sheets("Dashboard").Range("A1"), Unique:=False 
    Set rng = Range(Range("A1"), Range("A1").CurrentRegion) 
    ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes).Name = _ 
     "Flows" & filterName 
    ActiveSheet.ListObjects("Flows" & filterName).TableStyle = "TableStyleMedium3" 
    If Sheets("Dashboard").Range("FilterChoice").Value = "Orchestrated" Then 
     Call ApplyFlormulaRunbookName 
    End If 
End Sub 

宏在Dashboard表單上的按鈕觸發時工作。

我錯過了什麼嗎?

由於提前,

編輯:

好,奇怪的事情發生了。我休息一會兒就重新打開了文件,它工作了。 我懷疑ActiveSheet發生了什麼和/或與另一個工作簿衝突,因爲我正在玩2個其他工作簿和總計10張。

可能嗎?

+0

這樣的聲音是爲什麼你應該引用正確的工作表而不是ActiveSheet的一個例子。它看起來像'儀表板'是活動工作表 - 所以傳遞給一個變量並使用它。例如。 - 'Set wrkSht = Thisworkbook.worksheets(「Dashboard」):wrksht.Columns(「A:AN」)。ClearContents:Set rng = wrksht.Range(「A1」)。CurrentRegion' etc ..... –

+0

我想這可能是問題所在。由於我無法測試它,我認爲這是一條路。我正在根據您的答案修改我的代碼,謝謝! – FaXaq

回答

1

我已添加爲答案,因爲評論不會讓我格式正確。此代碼只是引用表,而不是選擇他們:

Sub ApplyDashboardFilter() 
    Dim rng As Range 
    Dim filterName As String 
    Dim tableName As String 
    Dim wrkShtDash As Worksheet 
    Dim wrkShtFlows As Worksheet 

    Set wrkShtDash = ThisWorkbook.Worksheets("Dashboard") 
    Set wrkShtFlows = ThisWorkbook.Worksheets("Critical Flows") 

    filterName = "Filter" & Replace(wrkShtDash.Range("FilterChoice").Value, " ", "") 
    tableName = filterName + "[#All]" 
    wrkShtDash.Columns("A:AN").Cells.Clear 
    wrkShtFlows.Range("ClosingFlows[#All]").AdvancedFilter Action:=xlFilterCopy _ 
     , CriteriaRange:=ThisWorkbook.Worksheets(filterName).Range(tableName) _ 
     , CopyToRange:=wrkShtDash.Range("A1"), Unique:=False 
    Set rng = wrkShtDash.Range(wrkShtDash.Range("A1"), wrkShtDash.Range("A1").CurrentRegion) 
    wrkShtDash.ListObjects.Add(xlSrcRange, rng, , xlYes).Name = _ 
     "Flows" & filterName 
    wrkShtDash.ListObjects("Flows" & filterName).TableStyle = "TableStyleMedium3" 
    If wrkShtDash.Range("FilterChoice").Value = "Orchestrated" Then 
     Call ApplyFlormulaRunbookName 'Spelt correctly? 
    End If 
End Sub 

注:我沒有測試過的代碼,它只是表明你沒有做這個工作之前激活片,並明確有關它與哪個文件或工作表一起工作 - ThisWorkbook意味着VBA代碼所在的文件。