2013-08-29 6 views
0

Мой макрос выдает ошибку «index out of range», поскольку он проходит через ActiveWindow.Selection.shapeRange только для одной определенной группы фигур.Указатель ошибки вне диапазона в Powerpoint VBA

Конкретное изложение можно найти в http://free-editable-worldmap-for-powerpoint.en.softonic.com (выбрать любую большую группу форм, то есть в Южной Америке, и запустить код для репликации ошибки)

код ниже:

Dim shp As Shape 
For Each shp In ActiveWindow.Selection.shapeRange 
    shp.Fill.Transparency = 0 'Or any other code 
Next shp 

Я также попробовал использовать цикл For без успеха («Для i = 1 для ActiveWindow.Selection.shapeRange.Count Шаг 1»). Примечательно, что нет конкретного индекса, при котором возникает ошибка: иногда это i = 3, иногда i = 35, иногда больше.

+0

Вы можете быть более конкретным? Я не могу реплицировать эту ошибку, и, фактически, итерация 'Для каждого' должна всегда * обходить ошибку индекса за пределами диапазона. ** Какая конкретная группа форм вызывает проблему **? –

ответ

0

На этом слайде фигуры msoLine (shp.Type = 9). Это приведет к возникновению ошибки:

The specified value is out of range.

Если вы случайно не выбрали их. (Я бы ожидал ошибку Object does not support this property or method, так как msoLine не имеет члена .Fill, но иногда сообщения об ошибках являются загадочными. В любом случае эта ошибка может быть в ловушке).

Все остальные формы на этом слайде являются типом 5 или 6, которые поддерживают .Fill.

Я использовал это для отладки, хотя я не могу реплицировать вашу конкретную ошибку (если вы просто не ошиблись в описании ошибки), возможно, это будет вам полезной. Он пытается установить Fill.Forecolor для всех форм на слайде и напечатает некоторую информацию об ошибках в окне Immediate в VBE.

Sub Test() 
'Determine there are shapes which do not have a .Fill.ForeColor 
Dim shp As Shape 
For Each shp In ActivePresentation.Slides(1).Shapes 
    On Error Resume Next 
    shp.Fill.ForeColor.RGB = 43506 
    If Err.Number <> 0 Then 
     Debug.Print Err.Description & " >> " & _ 
      shp.Name & " is shape type " & shp.Type 
     On Error GoTo 0 
    Else: 
     shp.Fill.Transparency = 0 
     shp.Fill.ForeColor.RGB = 12632256 
    End If 
Next 

End Sub 
Смежные вопросы