2017-10-11 81 views
0

我認爲這應該是一個簡單的考慮我有很少的VB知識:)我已經錄製了一個宏,爲當前工作表上的範圍創建數據透視表。當然,這給了我的是爲特定表單創建數據透視表的代碼。我正在嘗試調整代碼以獲取活動工作表的名稱,以便我可以在不同工作表中使用此宏。我試圖搜索並準確找到如何檢索名稱,然後將該名稱提供給將創建數據透視表的過程的代碼。傳遞Excel工作表名稱爲宏VB

我在代碼的ActiveWorkbook.PivotCaches.Create部分打了一個包版。我得到「運行時錯誤'1004':應用程序定義或對象定義的錯誤」消息。

任何幫助將不勝感激!

Sub Macro1() 

Dim sht As String 
sht = ActiveSheet.Name 

    Columns("A:K").Select 
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
     Worksheets(sht).Range("!R1C1:R1048576C11"), Version:=6).CreatePivotTable TableDestination:= _ 
     Worksheets(sht).Range("!R1C14"), TableName:="PivotTable3", DefaultVersion:=6 
    ActiveSheet.Select 
    Cells(1, 14).Select 
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Department") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    With ActiveSheet.PivotTables("PivotTable3").PivotFields(_ 
     "Originating Master Name") 
     .Orientation = xlRowField 
     .Position = 2 
    End With 
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Net") 
     .Orientation = xlRowField 
     .Position = 3 
    End With 
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Month") 
     .Orientation = xlRowField 
     .Position = 4 
    End With 
    ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTable3").PivotFields("Net"), "Count of Net", xlCount 
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Month") 
     .Orientation = xlColumnField 
     .Position = 1 
    End With 
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Count of Net") 
     .Caption = "Sum of Net" 
     .Function = xlSum 
    End With 
End Sub 
+0

我目前正在使用Excel 2016 – Zwick44

回答

1

更改此

Worksheets(sht).Range("!R1C1:R1048576C11") 

對此

ActiveWorkbook.Sheets(sht).Range("A1:K1048576") 

Worksheets(sht).Range("!R1C14") 

對此

ActiveWorkbook.Sheets(sht).Range("N1") 
+0

這工作!非常感謝!你介意給我一個關於範圍問題的簡單描述嗎? – Zwick44

+0

很高興我們找到了答案!你的宏將記錄的東西就像是「Sheet5!R1C12:R4C5」,請注意整個範圍參考在「」中。當你創建你的範圍使用變量你有工作表(sht).Range(「!R1C1:R1048576C11」)。由於錯誤指示,這不是有效的範圍構造。 !!表示工作表對象的末尾,即Sheet5! – QHarr

+0

具有完美的感覺。再次感謝QHarr! – Zwick44