CompaEd Ха! "Нет человека, нет проблем".
Мне надо проверить этот код для объектов 2х типов: OleObject и Picture. Если так пойдёт, то лучше целиком файл стереть и все дела.
Да, кстати, преобразовывать OleObject в Picture не предлагать.
Добавлено: Пока сделал так ("все нормальные герои всегда идут в обход"
).
[more=Далее]В другом файле код каким-то чудом заработал,хотя и не без глюков. Если все картинки перебирать (For Each oo In Common_list.OLEObjects), то можно сбросить размеры на нужные, но если задать OleObject прямо при помощи Set - вылетает та же ошибка.Короче - барахлит бейсик с этой функцией. Поэтому приходится проверять на вылет и в этом случае запускать поиск всех OleObject, с выбором нужного по имени.
Код: Public Sub correct_all()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim oo As Variant
For Each oo In Common_list.OLEObjects
If Right(oo.name, 6) <> "Button" Then
Reset_picture_size oo
End If
Next oo
For Each oo In Common_list.Pictures
If Right(oo.name, 6) <> "Button" Then
Reset_picture_size oo
End If
Next oo
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Sub Reset_picture_size(object As Variant)
Select Case TypeName(object)
Case Is = "OLEObject"
Scale_picture object, 1
Case Is = "Picture"
Scale_picture object, 1
Case Else
Exit Sub
End Select
Dim f1 As Double, f2 As Double, factor As Double
f1 = object.Width / picture_max_width
f2 = object.Height / picture_max_height
If f1 < 1 Then f1 = 1
If f2 < 1 Then f2 = 1
If f1 > f2 Then factor = 1 / f1 Else factor = 1 / f2
If factor <> 1 Then
Scale_picture object, factor
End If
End Sub
Public Sub Scale_picture(picture As Variant, factor As Double, Optional norecursion As Boolean = False)
If TypeName(picture) <> "Picture" And TypeName(picture) <> "OLEObject" Then Exit Sub
Select Case picture.ShapeRange.Item(1).Type
Case msoEmbeddedOLEObject, _
msoLinkedOLEObject, _
msoOLEControlObject, _
msoLinkedPicture, msoPicture
On Error GoTo err1
picture.ShapeRange.Item(1).ScaleHeight factor, msoTrue
picture.ShapeRange.Item(1).ScaleWidth factor, msoTrue
On Error GoTo 0
Case Else
Exit Sub
End Select
Exit Sub
' -----------------------------------------------------------------------
err1:
On Error GoTo 0
If Application.Version = 14# And Not (norecursion) Then GoTo err2
fault2:
If resize_bug_message_displayed = True Then Exit Sub
resize_bug_message_displayed = True
MsgBox "Ваша версия MsOffice не поддерживает" + Chr$(13) + _
"изменение масштаба картинки с помощью макроса." + Chr$(13) + _
"(affected MsOffice 2007-2010). Для сброса размера" + Chr$(13) + _
"всех картинок загрузите этот файл в более" + Chr$(13) + _
"ранней версии оффиса или установите обновление.", vbExclamation, "Слава, Microsoft!"
Exit Sub
err2:
Dim name As String, oo As Variant
name = picture.name
For Each oo In Common_list.OLEObjects
If oo.name = name Then Scale_picture oo, factor, True: Exit Sub
Next oo
GoTo fault2
End Sub