Заливка прямоугольника в Excel
Модератор: Naeel Maqsudov
Подскажите, пожалуйста, как сделать заливку прямоугольника в 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 - с синей.
Переделываю код макросов под 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
То же, подредактированный макрос
p.s. SchemeColor заменил на = 0 . как-то заметил, что с SchemeColor = 8 были проблемы.
Может я чего не понял, вот что пишет макрорекордер 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.: в 2003 Экселе прямоугольник по умолчанию создается почему-то с белой заливкой, а в 2007 - с синей.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
VictorM, спасибо, попробую выделить и залить.
если бы в 2003 была синяя заливка по умолчанию, мне бы это помогло)
если бы в 2003 была синяя заливка по умолчанию, мне бы это помогло)
А у меня по коду в 1-м посте выдает отличный черный прямоугольник (2007).
Код от VictorM заливает черным, правда оставляет границы первоначального цвета.
А что нужно получить?
Код от VictorM заливает черным, правда оставляет границы первоначального цвета.
А что нужно получить?
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, в 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;
А если не Fill, а FillRectangle?
забил на заливку. нарисовал в этом прямоугольнике линию. проблема решена другим путем)