VBA;无效的过程或参数错误

时间:2013-07-15 14:09:39

标签: excel vba excel-vba excel-2007 excel-formula

一点背景; 我必须在周一为前一周的工作运行每周报告,但是我需要整合材料,我做了并制作了一个数据透视表,我必须为多个工作表执行此操作。但是我决定创建一个宏来完成这个冗余任务。现在创建它我似乎得到此错误消息“无效的过程或参数”。我无法在新的工作表中打开它,他的代码是>>

Sub weekmaster()
'
' weekmaster Macro
' Macro for the week
'
' Keyboard Shortcut: Ctrl+t
'
    Cells.Select
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "weekmaster!R1C1:R1048576C62", Version:=xlPivotTableVersion12). _
        CreatePivotTable TableDestination:="Sheet9!R3C1", TableName:="PivotTable1" _
        , DefaultVersion:=xlPivotTableVersion12
    Sheets("Sheet9").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Order ID")
        .Orientation = xlRowField
        .Position = 1
    End With

2 个答案:

答案 0 :(得分:1)

看来你错过了一个论点。 CreatePivotTable采用以下参数:

expression.CreatePivotTable(TableDestination,TableName,ReadData,DefaultVersion)

  1. TableDestination必需变量数据透视表报表的目标范围(工作表上将放置生成的数据透视表报表的范围)左上角的单元格。目标范围必须位于工作簿中包含由表达式指定的PivotCache对象的工作表上。
  2. TableName可选Variant新数据透视表的名称。
  3. ReadData可选Variant True用于创建包含外部数据库中所有记录的数据透视表缓存;这个缓存可能非常大。如果在实际读取数据之前启用将某些字段设置为基于服务器的页面字段,则为false。
  4. DefaultVersion可选Variant数据透视表的默认版本。
  5. 随后,您可能希望在TableName和DefaultVersion之间添加“true”。

    干杯,LC

答案 1 :(得分:0)

如果您多次运行宏,或者Sheet9已经存在(因为宏尝试在同一工作表上创建具有相同名称的相同数据透视表),您将收到错误。如果我假设您每次转到数据表并运行宏时都会生成工作表中的数据透视表,则可以使用以下代码更新代码:以下内容:

Dim myRange as Range
dim myNewSheet as Worksheet

' Stores all continuous data on the sheet in the myRange variable
Set myRange = Range("A1").CurrentRegion

' Adds a new sheet and stores it in the myNewSheet variable
Set myNewSheet = Sheets.Add

' Use the variables to create the new pivot table
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    myRange, Version:=xlPivotTableVersion12).CreatePivotTable _
    TableDestination:=myNewSheet.Cells(3, 1), DefaultVersion _
    :=xlPivotTableVersion12

' Select your Order ID field
With myNewSheet.PivotTables(1).PivotFields("Order ID")
    .Orientation = xlRowField
    .Position = 1
End With