Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Excel: перехватить работу с примечаниями


Автор: Dims 8.12.2008, 21:48
Excel позволяет вводить примечания для каждой своей клетки.

Можно ли как-то вмешаться в работу этого функционала и переопределить его? Например, чтобы сделать примечания с возможностью форматирования, вставления картинок и т.д.

Автор: FINANSIST 9.12.2008, 01:25
Да, это возможно
Код

Option Explicit
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim isect As Range: Static adr As String '-Статик необходим на случай клика по любой другой неактивной  ячейке при выходе из только что добавленного примечания
'-в случае клика по активной ячейке при выходе из только что добавленного примечания, примечание обрабатывается после клика по любой другой неактивной  ячейке
Set isect = Application.Intersect(Range("A1:IV65000"), Target) '-ДИАПОЗОН РЕАКЦИИ НА ДОБАВЛЕНИЕ ПРИМЕЧАНИЯ
If Len(adr) = 0 Then adr = ActiveCell.Address
If isect Is Nothing Then
    Exit Sub
Else
    If ActiveSheet.Range(adr).Comment Is Nothing Then
        Let adr = ActiveCell.Address
        Exit Sub
    Else
        ActiveSheet.Range(adr).Comment.Visible = True
        On Error Resume Next
       ActiveSheet.Range(adr).Comment.Shape.Select True
        Selection.ShapeRange.AutoShapeType = msoShapeVerticalScroll
        Selection.Font.ColorIndex = 2
        Selection.ShapeRange.Fill.PresetGradient msoGradientHorizontal, 1, msoGradientEarlySunset
        Selection.ShapeRange.Shadow.Type = msoShadow11
        ActiveSheet.Range(adr).Comment.Visible = False
        adr = ""
    End If
End If
End Sub

Код необходимо вставить в тело листа

Автор: Dims 9.12.2008, 08:35
Насколько я понял, Вы просто изменяете форму листочка, на котором отображается примечание. Но если, например, мне надо отобразить в примечании картинку, то всё равно непонятно, как это сделать...

Автор: FINANSIST 9.12.2008, 11:38
тогда вот так:
Код

Option Explicit
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim isect As Range: Static adr As String '-Статик необходим на случай клика по любой другой неактивной  ячейке при выходе из только что добавленного примечания
'-в случае клика по активной ячейке при выходе из только что добавленного примечания, примечание обрабатывается после клика по любой другой неактивной  ячейке
Set isect = Application.Intersect(Range("A1:IV65000"), Target) '-ДИАПОЗОН РЕАКЦИИ НА ДОБАВЛЕНИЕ ПРИМЕЧАНИЯ
If Len(adr) = 0 Then adr = ActiveCell.Address
If isect Is Nothing Then
    Exit Sub
Else
    If ActiveSheet.Range(adr).Comment Is Nothing Then
        Let adr = ActiveCell.Address
        Exit Sub
    Else
        Application.ScreenUpdating = False
            ActiveSheet.Range(adr).Comment.Visible = True
            On Error Resume Next
            ActiveSheet.Range(adr).Comment.Shape.Select True
            If Selection.ShapeRange.AutoShapeType = msoShapeVerticalScroll Then GoTo 10:
            Selection.ShapeRange.AutoShapeType = msoShapeVerticalScroll
            Selection.ShapeRange.Fill.UserPicture "C:\Documents and Settings\OEM\Мои документы\Мои рисунки\IMG_0549.JPG"
            Selection.ShapeRange.Shadow.Type = msoShadow3
            Selection.ShapeRange.ScaleWidth 1.72, msoFalse, msoScaleFromTopLeft
            Selection.ShapeRange.ScaleHeight 3.59, msoFalse, msoScaleFromTopLeft
10:         ActiveSheet.Range(adr).Comment.Visible = False
         Application.ScreenUpdating = True
        adr = ""
    End If
End If
End Sub

user posted image

Автор: Dims 9.12.2008, 21:39
Это знаю. Не то.

Надо, чтобы там был текст, наподобие HTML страницы: текст, разные шрифты, цвета, вставленные картинки (внутри текста) и так далее. 

Думал рендерить предварительно HTML и сохранять его таким образом в виде картинки, но остаётся вопрос, как дать пользователю возможность это всё редактировать?

Нужно своё окно GUI написать и как-то подставить его вместо функций отображения примечаний...

Автор: FINANSIST 10.12.2008, 20:24
Позволю себе 1 вопрос - к чему такие извращения с экселем?

Автор: Dims 11.12.2008, 03:20
Потенциальный заказ такой.

Автор: FINANSIST 11.12.2008, 16:33
Цитата(Dims @  9.12.2008,  21:39 Найти цитируемый пост)
Думал рендерить предварительно HTML и сохранять его таким образом в виде картинки, но остаётся вопрос, как дать пользователю возможность это всё редактировать?

Пользователь должен ещё и редактировать содержимое Html - страницы внутри примечания?
Очень странный у Вас заказчик, очень.....

Цитата(Dims @  9.12.2008,  21:39 Найти цитируемый пост)
Нужно своё окно GUI написать и как-то подставить его вместо функций отображения примечаний...

Как вариант - с помощью встроенных средств програмное построение через VBA этого извращения:
user posted image
С последующим отображением оного при активации ячейки
Однако, гимор получается...

Автор: Dims 14.12.2008, 09:05
Честно говоря, не вижу ничего странного. Внутри примечания нужно редактировать не HTML, а просто rich-text. И можно не внутри примечания, а в отдельном окне. Суть в том, чтобы в конечном итоге в примечании мог находиться богато отформатированный текст с картинками. 

Вполне понимаю такую потребность.

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