Ошибка компиляции - ожидаемый массив при обновлении сводки - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь автоматизировать сводную таблицу, чтобы она использовала самое низкое значение столбца в качестве фильтра для сводки.

Значение в ячейке H6 - это то, что будет обновлять фильтр для сводки, но мне нужно, чтобы это значение было динамическим c и изменилось на самое низкое значение в столбце W. Однако код не работает с формулой в ячейке, поскольку он не просматривает ее как значение.

Private Sub Worksheet_Change(ByVal Target As Range)
'Update by Extendoffice 20180702
    Dim xPTable As PivotTable
    Dim xPFile As PivotField
    Dim xStr As String
    On Error Resume Next
    If Intersect(Target, Range("H6:H7")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Set xPTable = Worksheets("cumulative sales pivot").PivotTables("PivotTable2")
    Set xPFile = xPTable.PivotFields("Issue Day Of Sale ID")
    xStr = Target.Text
    xPFile.ClearAllFilters
    xPFile.CurrentPage = xStr
    Application.ScreenUpdating = True
End Sub

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

    Range("H6").Select
    Range("H6").PasteSpecial xlPasteFormulas("=MIN(W:W)")
    Range("H6").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub

Первая часть кода работает, но вторая часть дает мне

"Ошибка компиляции - ожидаемый массив"

Есть идеи, где я ошибаюсь?

1 Ответ

0 голосов
/ 21 февраля 2020

Ввод комментария в качестве ответа. Обратите внимание, что комментарий BigBen решит эту проблему, поэтому его можно также записать здесь:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Range("H6").Value = Application.Min(Range("W:W"))
End Sub

Теперь к вашей ошибке компиляции:

Ошибка компиляции, возникающая при Range("H6").PasteSpecial xlPasteFormulas("=MIN(W:W)"), из-за синтаксиса.

В документации для Range.PasteSpecial вы заметите, что аргументы для действия вставки.

При записи ("=MIN(W:W)") прикрепляется к xlPasteFormulas будет указывать на ошибку, когда компилятор видит () как применимый к массиву. Вот почему вы получили ошибку, которую получили.


Теперь при правильном использовании Range.PasteSpecial ... Range.PasteSpecial (Paste, Operation, SkipBlanks, Transpose) имеется 4 возможных аргумента. Я оставлю дальнейшее объяснение документации о том, что может заполнять каждый аргумент, но приведу пример пары Paste общих аргументов:

'Pastes the value from the copied cell
Cells(1,1).Copy
Cells(2,2).PasteSpecial xlPasteValues

'Pastes the formula from the copied cell
Cells(1,1).Copy
Cells(2,2).PasteSpecial xlPasteFormulas

Обратите внимание, что в приведенном выше примере оба требуют, чтобы формула или значение получаются из скопированной ячейки.

Если вы хотите добавить формулу в ячейку, вы можете использовать Range.Formula, например:

Cells(1,1).Formula = "=Min(B:B)"

Надеемся это и объясняет проблему, и решает вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...