#excel #vba
Вопрос:
Получил эту ошибку во время выполнения ошибка 445 объект не поддерживает это действие при попытке запустить этот код . Макросы работают, но каждый раз, когда я их запускаю, они выдают мне эту ошибку, могу ли я как-то избавиться от нее?
Sub Toggle_Row_Field()
'Add/Remove the field to the pivot table.
'The field is determined by the button text that calls the macro.
Dim pt As PivotTable
Dim pf As PivotField
Dim sField As String
Dim shp As Shape
'Set variables
Set pt = ActiveSheet.PivotTables(1)
Set shp = ActiveSheet.Shapes(Application.Caller)
sField = shp.TextFrame.Characters.Text
'Toggle field
'If visible then hide it
If pt.PivotFields(sField).Orientation = xlRowField Then
pt.PivotFields(sField).Orientation = xlHidden
shp.Fill.ForeColor.Brightness = 0.5
Else 'Add to Rows area
pt.PivotFields(sField).Orientation = xlRowField
shp.Fill.ForeColor.Brightness = 0
End If
End Sub
Обновить
Комментарии:
1. Какая строка вызывает ошибку?
Ответ №1:
Вы получаете сообщение об ошибке , потому что вы объявляете OLEobject
как shape
, так как OLEobjectdoes не обладает свойством Fill.Forecolor
как показано ниже:
Для того, чтобы использовать свойство Fill.Forecolor
, вы должны нарисовать фигуру и присвоить ей код VBA, красный Shape
-это, а серый — OLEobject
Поэтому в тот момент , когда я нажму на shape
нее, она изменит цвет, а также удалит pivot field
ее в соответствии с вашими ожиданиями:
Часть 2: Файл данных: Довольно сложно value field
скрыть или отобразить, однако вы все равно можете использовать следующий метод для ее решения.
Sub Rectangle1_Click()
Dim pt As PivotTable
Dim pf As PivotField
Dim sField As String, SFieldSum As String
Dim shp As Shape
Dim blfound As Boolean
Set pt = ActiveSheet.PivotTables(1)
Set shp = ActiveSheet.Shapes(Application.Caller)
sField = shp.TextFrame.Characters.Text
SFieldSum = "Sum of " amp; shp.TextFrame.Characters.Text
For Each pf In pt.DataFields
If pf.Name = SFieldSum Then
blfound = True
Exit For
End If
Next
If blfound Then
pt.PivotFields(SFieldSum).Orientation = xlHidden
shp.Fill.ForeColor.Brightness = 0.5
Else
pt.AddDataField pt.PivotFields(sField), SFieldSum, xlSum
shp.Fill.ForeColor.Brightness = 0
End If
End Sub
Комментарии:
1. Большое спасибо! Могу ли я как-то изменить его в коде, чтобы он был просто формой, а не цветом?
2. Большое спасибо! Могу ли я как-то изменить его в коде, чтобы он был просто формой, а не цветом? @КИнСианг
3. Вы имеете в виду, что хотите использовать
ActiveX control
вместоshape
этого ?4. Проверьте мой ответ на часть 2, он работает и сейчас
value field
, примите ответ, если помогает 🙂5. он говорит об ошибке компиляции при попытке запустить его. Не могли бы вы, пожалуйста, взглянуть на экран, который я разместил в вопросе? Спасибо!!