数据透视表FormatConditions ScopeType正在导致1004

尝试设置ScopeType时,在Sub的最后会发生1004错误。 我想格式条件适用于当前列中的所有活动行,所以我认为这将做到这一点。

Sub CreatePivot() ' Define RngTarget and RngSource as Range type variables Dim RngTarget As Range Dim RngSource As Range Dim intLastCol As Integer Dim intCntrCol As Integer Dim ws1, ws2 As Worksheet Dim pt As PivotTable Dim cf As FormatCondition Set ws1 = ThisWorkbook.Sheets("Sheet1") Set ws2 = ThisWorkbook.Sheets("Sheet2") ws2.Cells.Clear ' RngTarget is where the PivotTable will be created (ie: Sheet2, Cell B3) Set RngTarget = ws2.Range("B3") 'Set RngTarget = ThisWorkbook.Worksheets("Sheet2").Range("B3") ' RngSource defines the Range that will be used to create the PivotTable ' ActiveWorkbook = The currently opened Workbook ' ActiveSheet = The currectly opened sheet ' UsedRange = The Range of cells with active data in them Set RngSource = ws1.UsedRange 'Set RngSource = ActiveWorkbook.ActiveSheet.UsedRange ' Select the Range ws1.Select RngSource.Select ' Copy the Range into the clipboard RngSource.Copy ' Create a new PivotTable using the RngSource defined above, ' in Excel format, ' placed at the RngTarget location, ' And name it PivotB3 just for reference if needed ActiveWorkbook.PivotCaches.Create(xlDatabase, RngSource).CreatePivotTable RngTarget, "PivotB3" Set pt = RngTarget.PivotTable ' Get the last used column from the data table intLastCol = RngSource.Columns(RngSource.Columns.Count).Column ' Select the Pivot table so we can apply the conditional formats pt.PivotSelect "", xlDataAndLabel, True For intCntrCol = 3 To intLastCol ws2.Select ws2.Cells(4, intCntrCol).Select ' Select the current Sum column Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=5000" ' Set conditional format to less than 5000 Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority ' Take priority over any other formats With Selection.FormatConditions(1).Font ' Use the Font property for the next operations .ThemeColor = xlThemeColorLight1 ' Set it to the default (if it does not meet the condition) .TintAndShade = 0 ' Same as above End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 65535 ' Set the background color to Yellow .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions(1).ScopeType = xlFieldsScope ' Apply the format to all rows that match "Sum of xxxx" Next intCntrCol End Sub 

根据你最后一个问题,我提出这个方法来应用你的格式:

 Set ws2 = ThisWorkbook.Sheets("Sheet2") With ws2.UsedRange .FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=5000" ' Set conditional format to less than 5000 .FormatConditions(.FormatConditions.Count).SetFirstPriority ' Take priority over any other formats With .FormatConditions(1).Font ' Use the Font property for the next operations .ThemeColor = xlThemeColorLight1 ' Set it to the default (if it does not meet the condition) .TintAndShade = 0 ' Same as above End With With .FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 65535 ' Set the background color to Yellow .TintAndShade = 0 End With .FormatConditions(1).StopIfTrue = False End With