VBA Excel Pivot Table - PullRequest
       9

VBA Excel Pivot Table

0 голосов
/ 06 апреля 2011

Я записал создание сводной таблицы для произвольных данных, и кажется, что она работает нормально, если дан один набор данных.Однако, когда программе дается несколько столбцов данных, вывод неверен.Код для общей сводной таблицы приведен ниже.Она похожа на записанную сводную таблицу за исключением того, что имена и столбцы менее жестко запрограммированы

    Dim tempString As String

    tempString = ActiveWorkbook.Sheets(sheetName).Range(column & "1").Value

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        sheetName & "!R1C" & ColTextToInt(column) & ":R" & g_totalRow & "C" &     ColTextToInt(column) & "", Version:=xlPivotTableVersion12 _
        ).CreatePivotTable TableDestination:=ActiveSheet.Range(colNamePos & "1"), _
        TableName:=column & "Table", DefaultVersion:=xlPivotTableVersion12
    ActiveCell(1, ColTextToInt(colNamePos)).Select
    With ActiveSheet.PivotTables(column & "Table").PivotFields(tempString)
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveSheet.Range(colNamePos & "1").Select
    ActiveWorkbook.ShowPivotTableFieldList = True
    ActiveSheet.PivotTables(column & "Table").AddDataField ActiveSheet.PivotTables( _
        column & "Table").PivotFields(tempString), "Count of " & tempString, xlCount
    ActiveWorkbook.ShowPivotTableFieldList = False

Программа доходит до конца.Вот конкретная строка:

ActiveSheet.PivotTables(column & "Table").AddDataField ActiveSheet.PivotTables( _
        column & "Table").PivotFields(tempString), "Count of " & tempString, xlCount

При попадании в эту строку кода столбец сводной таблицы (с конкретными именами ячеек) покрывается общим общим числом от общего числа строк.Ниже приведен ключ для обозначения переменных

sheetName = рабочий лист со всеми необработанными данными (например, "Sheet1") column = Пользователь указывает столбец, на который программа должна смотреть (например, F)") tempString = с учетом первых двух переменных это будет равно заголовку столбца (например," State ") g_totalRow = сколько строк в листе необработанных данных colNamePos = столбец, в который программа будет вводить сводную таблицу

Спасибо,

Джесси Смотермон

1 Ответ

1 голос
/ 07 апреля 2011

Понял.Часть кода, которая вызвала ошибку, должна быть перед частью «с».Я не совсем уверен, почему это так, но я попробовал, и это сработало.Если кто-то думает, что у него есть причина, по которой он должен быть перед тем, с кем я хотел бы знать.

Код:

    tempString = ActiveWorkbook.Sheets(sheetName).Range(column & "1").Value

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        sheetName & "!R1C" & ColTextToInt(column) & ":R" & g_totalRow & "C" & ColTextToInt(column) & "", Version:=xlPivotTableVersion12 _
        ).CreatePivotTable TableDestination:=ActiveSheet.Range(colNamePos & "1"), _
        TableName:=column & "Table", DefaultVersion:=xlPivotTableVersion12
    ActiveCell(1, ColTextToInt(colNamePos)).Select
    ActiveSheet.PivotTables(column & "Table").AddDataField ActiveSheet.PivotTables( _
        column & "Table").PivotFields(tempString), "Count of " & tempString, xlCount
    With ActiveSheet.PivotTables(column & "Table").PivotFields(tempString)
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveWorkbook.ShowPivotTableFieldList = False

Спасибо,

Джесси Смотермон

...