ошибка времени выполнения 445 объект не поддерживает это действие

#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. он говорит об ошибке компиляции при попытке запустить его. Не могли бы вы, пожалуйста, взглянуть на экран, который я разместил в вопросе? Спасибо!!