Страницы: 1
RSS
Изменение свойства встраиваемого объекта ActiveX в лист Excel средствами VBA, Управление свойствами встраиваемых объектов
 
Здравствуйте!

Система  64-bit с версией офиса 64-bit.
Вставляю. в  лист Excel объект Image из предлагаемой коллекции объектов ActiveX.
Изменяю значения свойств внедренного объекта через использование окна "Свойства" в режиме конструктора в опции меню "Разработчик":
1. Устанавливаю свойству BackStyle значение fmBackStyleTransparent (прозрачный фон)
2. Устанавливаю свойству BorderStyle значение fmBorderStyleNone (обрамления объекта невидимы) .
Все замечательно, объект становится прозрачным без рамок!
Теперь делаю тоже самое, но с использованием макроса.
Код макроса;
Код
Sub Proba()
    Dim I As Integer, EistOLEObj As OLEObject
    I = 1
    'Определяем количество имеющихся на активном листе объектов ActiveX
    With ThisWorkbook.ActiveSheet
        For Each EistOLEObj In .OLEObjects
            I = I + 1
        Next
        'Добавляем на лист дополнительный объект ActiveX Image
        .OLEObjects.Add ClassType:="Forms.Image.1", _
                        DisplayAsIcon:=False, _
                        Left:=0, _
                        Top:=0, _
                        Width:=175, _
                        Height:=320
        'Переопределяем имя добавленного объекта для последующего удобства обращения к нему
        .OLEObjects(I).Name = "TempImage"
        'Устанавливаем свойства объекту, чтобы он был невиден пользвателю
        With .OLEObjects("TempImage")
            .Object.BackStyle = fmBackStyleTransparent
            .Object.BorderStyle = fmBorderStyleNone
        End With
    End With
End Sub
Не работает корректно! Границы объекта успешно не выделяются, но при этом фон объекта не становится прозрачным.
Почему?
 
Доброе время суток.
Где-то так
Код
Public Sub test()
    Dim pOle As OLEObject
    Set pOle = ThisWorkbook.ActiveSheet.OLEObjects.Add( _
        ClassType:="Forms.Image.1", _
        DisplayAsIcon:=False, _
        Left:=0, _
        Top:=0, _
        Width:=175, _
        Height:=320 _
    )
    pOle.Object.BackStyle = fmBackStyleTransparent
    pOle.Object.BorderStyle = fmBorderStyleNone
    pOle.ShapeRange.Fill.Transparency = 1
End Sub
 
Ай, да спасибо!
Мало того, что мне объяснили, что в моем коде не хватало установки значения прозрачности внедряемого интересуемого меня объекта ActiveX , так еще и  ненавязчиво продемонстрировали альтернативный вариант используемого мною кода, который является более наглядным, эргономичным, а соответственно, более профессиональным.
Возьму этот вариант на вооружение.
Еще раз ОГРОМНОЕ СПАСИБО!
Все работает корректно, решение можно считать исчерпывающим.  
Страницы: 1
Наверх