PDA

Показать полную графическую версию : [решено] Exel 2013 - вставить примечание макросом


Maestro
05-01-2017, 11:37
Всем привет
Можно ли вставить Конкретное примечание макросом в ТЕКУЩУЮ ячейку?
Пробовал запись макроса, но так оно вставляется в КОНКРЕТНУЮ ячейку, а не в ТЕКУЩУЮ
Было бы неплохо еще и форматировать сразу это примечание - шрифт, к примеру, увеличить и жирность добавить

Range("I311").AddComment
Range("I311").Comment.Visible = False

Спасибо

Iska
05-01-2017, 12:00
Maestro, достаточно заменить указание на конкретный диапазон ссылкой на активную ячейку и воспользоваться тем фактом, что метод .AddComment возвращает созданный объект Comment:
ActiveCell.AddComment("Какой-то комментарий").Visible = False

Maestro
05-01-2017, 12:09
Отлично, а можно форматировать само примечание и изменить размер рамки?

Iska
05-01-2017, 12:14
Было бы неплохо еще и форматировать сразу это примечание - шрифт, к примеру, увеличить и жирность добавить »
With ActiveCell.AddComment("Какой-то комментарий")
.Visible = False

With .Shape.TextFrame.Characters.Font
.Bold = True
.Size = 14
.ColorIndex = 8
End With
End With


и изменить размер рамки? »
With ActiveCell.AddComment("Какой-то комментарий")
.Visible = False

With .Shape.TextFrame
.AutoSize = True

With .Characters.Font
.Bold = True
.Size = 14
.ColorIndex = 8
End With
End With
End With

Maestro
05-01-2017, 12:21
СУПЕР! Как хорошо много знать :yahoo:
Ну и для ПОЛНОГО счастья размер рамки можно подкорректировать?
Этим по идее как-то....
Selection.ShapeRange.ScaleWidth 0.73, msoFalse, msoScaleFromTopLeft

Iska
05-01-2017, 13:30
Maestro, вот Вам более полный демонстрационный образец:
http://i.imgur.com/nIj3uer.png
Option Explicit

Sub Sample()
Dim objComment As Comment


With ActiveCell
If .Comment Is Nothing Then
Set objComment = .AddComment
Else
Set objComment = .Comment
End If
End With

With objComment
'.Visible = False
.Visible = True

With .Shape
.Height = 100
.Width = 200

With .TextFrame
With .Characters
.Text = "Мама мыла раму." & vbLf & vbLf

With .Font
.Bold = True
.Size = 14
.ColorIndex = 3
End With
End With

With .Characters(Len(.Characters.Text) + 1)
.Text = "Рабы не мы, "

With .Font
.Bold = False
.Size = 12
.ColorIndex = 4
End With
End With

With .Characters(Len(.Characters.Text) + 1)
.Text = "Мы не рабы."

With .Font
.Bold = False
.Italic = True
.Size = 10
.ColorIndex = 5
End With
End With
End With
End With
End With

Set objComment = Nothing
End Sub

Maestro
12-01-2017, 11:25
в дополнение: как макросом к текстовому содержимому ячейки добавить в уонец определенные символы и всю ячейку потом отформатировать шрифтом и цветом?

Спасибо

a_axe
12-01-2017, 13:39
как макросом к текстовому содержимому ячейки добавить в уонец определенные символы и всю ячейку потом отформатировать шрифтом и цветом? »
например - кодом наподобие такого (необходимо выделить все нужные вам ячейки, не обязательно смежные, и запустить код):
Public Sub Add_text_sel()
Dim rngCell As Range, strTxt As String, intCol As Integer
Dim colobj
strTxt = " Пример текста": 'Текст, который необходимо вставить в ячейку
intCol = 5: 'цвет рамки ячейки
colobj = RGB(255, 0, 0): 'цвет заливки ячейки
For Each rngCell In Selection.Cells
With rngCell
.Value = .Value & strTxt
.Font.Color = RGB(0, 255, 0): 'цвет текста в ячейке
.Font.Bold = True: 'Полужирное начертание, если не нужен - значение false
.Font.Underline = xlUnderlineStyleSingle: 'Подчеркнутый, если не нужен = xlUnderlineStyleNone
.Font.Italic = True: 'курсив , если не нужен - значение false
End With
With rngCell.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = colobj
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With rngCell.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = intCol
.TintAndShade = 0
.Weight = xlMedium
End With
With rngCell.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = intCol
.TintAndShade = 0
.Weight = xlMedium
End With
With rngCell.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = intCol
.TintAndShade = 0
.Weight = xlMedium
End With
With rngCell.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = intCol
.TintAndShade = 0
.Weight = xlMedium
End With
Next
End Sub

Iska
13-01-2017, 05:54
в дополнение: как макросом к текстовому содержимому ячейки добавить в уонец определенные символы и всю ячейку потом отформатировать шрифтом и цветом? »
Не надо «в дополнение». Надо — в отдельную тему.

например - кодом наподобие такого »
Ленитесь ;)?

a_axe
13-01-2017, 15:36
Ленитесь ? »
Если бы :). Лень - двигатель прогресса, а глядя на {большое} количество строчек в коде, кажется, что я в ударники записался. Исправляюсь (впрочем, если существует более оптимальный подход, подскажите ;) ):

Maestro, в экселе есть инструмент "стиль ячейки", в вашем случае более удобно будет использовать его (вкладка "Главная"->сектор "стили"-> кнопка "Стили ячеек").
В выпадающем меню можно создать свой стиль ячейки, либо воспользоваться стандартными (в коде ниже использован стандартный стиль Excel 2010 "Хороший", если создадите свой стиль - измените название стиля в коде).

Код ниже добавит ваш текст и присвоит вашим ячейкам указанный стиль "Хороший", соответственно преимущество будет в том, что оформление ячеек можно быстро изменить, поменяв один раз настройки в стиле, да и настраивать стиль будет гораздо удобнее в смысле визуального отображения, нежели вписывать параметры в код. В принципе - для разного вставляемого текста можно сделать несколько копий кода, и "повесить" их на разные кнопки (стилей нужно также несколько).
Public Sub Add_text_style()
Dim rngCell As Range, strTxt As String

strTxt = " Пример текста": 'Текст, который необходимо вставить в ячейку
Selection.Style = "Хороший"
For Each rngCell In Selection.Cells
rngCell.Value = rngCell.Value & strTxt
Next
End Sub

Iska
14-01-2017, 05:42
a_axe, я имел в виду, что полученный макрорекордером код просто стоило чуть получше «причесать».

a_axe
14-01-2017, 09:40
Это да. Тут еще момент, что из такого кода TS легче выкинуть ненужные куски при необходимости ;)




© OSzone.net 2001-2012