Заливка прямоугольника в Excel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
UFO665
Сообщения: 5
Зарегистрирован: 21 июн 2010, 23:07

Подскажите, пожалуйста, как сделать заливку прямоугольника в Excel.
Переделываю код макросов под Visual C++. Но почему-то при попытке залить прямоугольник черным выдает ошибку unhandled exception... (компилится нормально, сбой именно при выполнении кода)

Полный код макроса:
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 313.5, 268.5, 165.75, 6#). _
Select
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)

Пробовал адаптировать все эти действия для C++, но как уже писал выше - ошибка.

P.S.: в 2003 Экселе прямоугольник по умолчанию создается почему-то с белой заливкой, а в 2007 - с синей.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Здравствуйте.
Может я чего не понял, вот что пишет макрорекордер EXCEL 2003

Код: Выделить всё

Sub Макрос1() 'заливка фигуры черным цветом
              'фигура должна быть выделена
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8
    Selection.ShapeRange.Fill.Visible = msoTrue
    Selection.ShapeRange.Fill.Solid
End Sub
То же, подредактированный макрос

Код: Выделить всё

Sub FillMacro() 'заливка фигуры черным цветом - подредактированный
    With Selection.ShapeRange.Fill
        .ForeColor.SchemeColor = 0
        .Visible = msoTrue
    End With
End Sub
p.s. SchemeColor заменил на = 0 . как-то заметил, что с SchemeColor = 8 были проблемы.
P.S.: в 2003 Экселе прямоугольник по умолчанию создается почему-то с белой заливкой, а в 2007 - с синей.
не знаю, мне это ни разу не мешало
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
UFO665
Сообщения: 5
Зарегистрирован: 21 июн 2010, 23:07

VictorM, спасибо, попробую выделить и залить.
если бы в 2003 была синяя заливка по умолчанию, мне бы это помогло)
nilem
Сообщения: 112
Зарегистрирован: 14 ноя 2008, 01:59
Откуда: Уфа

А у меня по коду в 1-м посте выдает отличный черный прямоугольник (2007).
Код от VictorM заливает черным, правда оставляет границы первоначального цвета.
А что нужно получить?
UFO665
Сообщения: 5
Зарегистрирован: 21 июн 2010, 23:07

VictorM, не помогло. вообще если fill использовать, то ошибка.

nilem, в VBA проблем и не должно быть. нужно получить черный прямоугольник.

может здесь причина. в файле stdafx.h прописано:
// Импортируем файл Program Files\Common Files\Microsoft Shared\OFFICE11(или 12)\MSO.DLL
#import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52"\
rename("RGB","_RGB")
using namespace Office;
// Ипортируем файл Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB
#import "libid:0002E157-0000-0000-C000-000000000046"
using namespace VBIDE;
// Импортируем файл Program Files\Microsoft Office\Office11(или 12)\EXCEL.EXE
#import "libid:00020813-0000-0000-C000-000000000046"\
rename("RGB","ex_RGB") \
exclude("I","IPicture") \
exclude("I","IFont") \
rename("DialogBox","ex_DialogBox") \
rename("CopyFile","ex_DialogBox") \
rename("ReplaceText","ex_ReplaceTex t")
using namespace Excel;
nilem
Сообщения: 112
Зарегистрирован: 14 ноя 2008, 01:59
Откуда: Уфа

А если не Fill, а FillRectangle?
UFO665
Сообщения: 5
Зарегистрирован: 21 июн 2010, 23:07

такого свойства нет
UFO665
Сообщения: 5
Зарегистрирован: 21 июн 2010, 23:07

забил на заливку. нарисовал в этом прямоугольнике линию. проблема решена другим путем)
Ответить