Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

WinCity.Ru _ Microsoft/Office Excel _ Вопрос к знатокам VBA

Автор: Sellf Воскресенье, 14 Сентября 2008, 20:40

Помогите начинающему, пожалуйста.

Пишу код для рисования фигур. Вот его кусок:

Код
Sub ПримерФигуры()
Set Лист = Worksheets(1)
With Лист.Shapes.AddShape(msoShapeRectangle, 10, 10, 210, 110)
   With .Fill
       .ForeColor.RGB = QBColor(5)
       .OneColorGradient msoGradientFromCorner, 1, 1
   End With
End With
End Sub


По идее, при активации книги, должна рисоваться указанная фигура, но этого не происходит. Что я делаю не так?

Автор: Sellf Воскресенье, 14 Сентября 2008, 21:00

Ага, из макросов он вызывается. А как сделать так, чтобы фигура автоматом рисовалась?

Автор: pashulka Понедельник, 15 Сентября 2008, 21:42

Для создания графического об'екта, сразу после активации нужной рабочей книги, можно использовать нижеприведённое событие рабочей книги, которое необходимо разместить строго в модуле ThisWorkbook(ЭтаКнига)

Код
Private Sub Workbook_Activate()
   With Me.Worksheets(1).Shapes.AddShape _
        (msoShapeRectangle, 10, 10, 210, 110).Fill
        .ForeColor.RGB = QBColor(5) 'RGB()
        .OneColorGradient msoGradientFromCorner, 1, 1
   End With
End Sub


Однако, есть ряд нюансов, которые желательно учесть :
- в нужной рабочей книге может не оказаться рабочих листов (сие маловероятно, однако, не так уж и невероятно)
- рабочий лист с номером(индексом) может быть защищён в отношении об'ектов (в этом случае мы, при попытке создать графический об'ект, получим ошибку, которую можно избежать просто добавив соответствующую проверку)
- и наконец, наш прямоугольник уже будет существовать (избежать повторов можно, если предварительно проверить наличие подобного об'екта, или создавать об'ект только при наличии некого флага/разрешения)

Автор: Sellf Вторник, 16 Сентября 2008, 14:47

Спасибо огромное, работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)