Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2010, 23:10   #1
UFO665
 
Регистрация: 21.06.2010
Сообщений: 5
По умолчанию Заливка прямоугольника в Excel

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

Полный код макроса:
ActiveSheet.Shapes.AddShape(msoShap eRectangle, 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.Transpare ncy = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transpare ncy = 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 - с синей.
UFO665 вне форума Ответить с цитированием
Старый 22.06.2010, 01:06   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Попробуйте с VB.Net перевести на С++
Проверил,все работает
Код:
Imports Microsoft.Office.Interop

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim lObjExcelApp As New Excel.Application()
        Dim lObjWorkBook As Excel.Workbook = lObjExcelApp.Workbooks.Add
        Dim SHP As Excel.Shape
        Dim lObjWorkSheet As Excel.Worksheet
        lObjWorkSheet = lObjWorkBook.Sheets(1)
        SHP = lObjWorkSheet.Shapes.AddShape(Microsoft.Office.Core.MsoAutoShapeType.msoShapeRectangle, 313.5, 268.5, 165.75, 6.0#)
        lObjExcelApp.Visible = True
        SHP.Fill.ForeColor.SchemeColor = 8
        SHP.Line.ForeColor.SchemeColor = 64
        SHP.Fill.BackColor.RGB = RGB(255, 255, 255)
        SHP.Line.DashStyle = Microsoft.Office.Core.MsoLineDashStyle.msoLineSolid
        SHP.Fill.Transparency = 0.0#
        SHP.Line.Style = Microsoft.Office.Core.MsoLineStyle.msoLineSingle
        SHP.Line.Visible = Microsoft.Office.Core.MsoTriState.msoTrue
        SHP.Line.Weight = 0.75
        SHP.Line.DashStyle = Microsoft.Office.Core.MsoLineDashStyle.msoLineSolid
    End Sub
End Class
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 22.06.2010, 04:51   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно чуть проще:
Код:
Sub CreateFillShape()
    Dim sh As Shape
    Set sh = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 313.5, 268.5, 165.75, 6#) 
    sh.Fill.ForeColor.SchemeColor = 8
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 22.06.2010, 19:16   #4
UFO665
 
Регистрация: 21.06.2010
Сообщений: 5
По умолчанию

doober, спасибо, завтра напишу ответ
SAS888, так пробовал, ошибка
UFO665 вне форума Ответить с цитированием
Старый 22.06.2010, 20:03   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
SAS888, так пробовал, ошибка
А вы пробовали заменять название константы msoShapeRectangle её числовым значением 1?
EducatedFool вне форума Ответить с цитированием
Старый 23.06.2010, 20:25   #6
UFO665
 
Регистрация: 21.06.2010
Сообщений: 5
По умолчанию

doober, не получилось. вообще если fill использовать, то ошибка.
EducatedFool, не пробовал. завтра исправлю упущение

Последний раз редактировалось UFO665; 23.06.2010 в 20:32.
UFO665 вне форума Ответить с цитированием
Старый 23.06.2010, 20:25   #7
UFO665
 
Регистрация: 21.06.2010
Сообщений: 5
По умолчанию

может это поможет. в файле 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;

Последний раз редактировалось UFO665; 23.06.2010 в 20:31.
UFO665 вне форума Ответить с цитированием
Старый 24.06.2010, 19:34   #8
UFO665
 
Регистрация: 21.06.2010
Сообщений: 5
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Площадь прямоугольника AndrSil Помощь студентам 5 22.04.2010 23:23
Вращение прямоугольника Ponaroshku Паскаль, Turbo Pascal, PascalABC.NET 11 03.11.2009 09:22
Excel заливка + формула DEHcuk Microsoft Office Excel 12 15.10.2009 14:27
Вращение прямоугольника Ponaroshku Общие вопросы Delphi 0 25.05.2009 23:09
Стороны прямоугольника Caragius Microsoft Office Excel 8 27.12.2008 03:02