Страница: 1 |
Страница: 1 |
Вопрос: VBA. Excel. Коментарии
Добавлено: 15.01.08 10:45
Автор вопроса: Mikle
При работе с комментариями возникли следующие проблемы:
1) Не удается откорректировать само поле комментариев (по длине и ширине).
2) После создания комментариев, а затем последующего сжатия/ расширения строк/ столбцов в данном листе – сами комментарии могут переместиться невесть куда, к тому же поле комментария может невесть как измениться (видимо "Глюк" в Excel).
Если кто сталкивался с такими проблемами, и находил решения, прошу откликнуться.
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #1
Добавлено: 15.01.08 11:29
С подобными проблемами сталкивался. Я бы отнёс такое поведение комментариев не к глюкам, а к объяснимому поведению комментариев, как и других встраиваемых объектов. Если делать руками, то в созданном комментарии делаешь правку, затем правый клик на границе комментария, выбираешь "Формат примечания..." и внимательно смотришь, что для примечания можно настроить (включая размер и привязку объекта к фону). То же самое ты можешь повторить, сделав макрос на VBA. Пиши макросы или исследуй объектную модель Excel.
Номер ответа: 2
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #2
Добавлено: 15.01.08 11:39
На мой взгляд, было бы гораздо удобней, если бы по умолчанию все новые комментарии создавались бы с параметром Формат примечания - Свойства - Привязка объекта к фону - перемещать, но не изменять размеры. По умолчанию же у всех стоит не перемещать и не изменять размеры, отсюда и глюк с пропажей примечаний, особенно когда примечание прячется в случае скрытия строк/столбцов.
Номер ответа: 3
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #3
Добавлено: 15.01.08 14:53
Dim iComment As Comment
For Each iComment In ActiveSheet.Comments
iComment.Shape.TextFrame.AutoSize = True
iComment.Shape.Height = iComment.Shape.Height + 10
iComment.Shape.Width = iComment.Shape.Width + 15
Next iComment
MsgBox "Размеры комментарий исправлены!", vbInformation, "Комментарии"
End Sub
Номер ответа: 4
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #4
Добавлено: 15.01.08 14:55
А так же для общего развития
Sub All_Comments_Size_Change()
Dim iComment As Comment
For Each iComment In ActiveSheet.Comments
iComment.Shape.TextFrame.AutoSize = True
Next iComment
End Sub
Sub ChangeFontInComment()
With Range("B2"
.ClearComments
.AddComment
.Comment.Text "бла-бла-бла"
With .Comment.Shape.TextFrame.Characters.Font
.Name = "Times New Roman"
.Size = 14
.Bold = True
End With
End With
End Sub
Sub All_Comments_Font_Change()
Dim iComment As Comment
For Each iComment In ActiveSheet.Comments
With iComment.Shape.TextFrame.Characters.Font
.Name = "Times New Roman"
.Size = 14
.Bold = True
End With
Next iComment
End Sub
Sub Change_Size_Comment_Window()
With Range("A1"
.AddComment "Bla-bla-bla"
With .Comment.Shape
.Width = 100
.Height = 200
.Visible = True
End With
End With
End Sub
Номер ответа: 5
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #5
Добавлено: 16.01.08 08:15
Вот и пример тебе Pavel привёл. Наслаждайся комментариями
Номер ответа: 6
Автор ответа:
MMikle
Вопросов: 0
Ответов: 4
Профиль | | #6
Добавлено: 19.01.08 14:38
Извиняюсь за измененный логин (работаю с другого ПК, а администраторы не помогли подключиться, приятные сны смотрят, наверное).
Большое спасибо mc-black, Pavel!
Ваши ответы на 90% развеяли мои проблемы:
'1) изменяем размер окошка всех примечаний на листе ровно под текст (AutoSize)
Sub All_Comments_Size_Change()
Dim iComment As Comment
For Each iComment In ActiveSheet.Comments
iComment.Shape.TextFrame.AutoSize = True
Next iComment
End Sub
Отлично работает!
Остаются вопросы:
1) Как запрограммировать свойство привязки комментария к ячейке (Формат примечания/ Свойства/ «Перемещать, но не изменять размер»)?
2) А возможно ли «ручками» задать все эти свойства («Автоматический размер» и «Перемещать, но не изменять размеров») для всех примечаний одновременно (не переберая их)?
Зараннее благодарен.
Номер ответа: 7
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #7
Добавлено: 19.01.08 18:29
Попробуйте так
'устанавливаем размер окна комментария AutoSize и меняем свойство окно на "Перемещать, но не именять размеры"
'Свойство XlPlacement объекта Shape может быть одним из этих констант (Формат примечания/Свойства/)
'- xlFreeFloating - не перемещать и не изменять размеры
'- xlMove - перемещать, но не именять размеры
'- xlMoveAndSize - перемещать и изменять объект вместе с ячейками
Dim iComment As Comment
For Each iComment In ActiveSheet.Comments
With iComment.Shape
.TextFrame.AutoSize = True
.Placement = xlMove 'перемещать, но не именять размеры
End With
Next iComment
MsgBox "Все комментарии обработаны!", 64, "Конец"
End Sub
P.S. с Вами я профессионалом по комментариям стану)) Сам сижу и разбираюсь, что как делать)
Номер ответа: 8
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #8
Добавлено: 19.01.08 18:37
По поводу вашего второго вопроса, я думаю, что "ручками" нельзя.
Как вы знаете можно выделить все примечания на листе Правка - Перейти... - Выделить... - Примечания - ОК, но когда вы захотите изменить примечания, то выделение со всех примечаний сразу снимется и будет активно лишь одно примечание.
Номер ответа: 9
Автор ответа:
MMikle
Вопросов: 0
Ответов: 4
Профиль | | #9
Добавлено: 19.01.08 18:52
Павел!
Очень большое спасибо!
Попробовал Ваш пример отлично работает.
Пожалуйста не обессудте за трудозатраты, я бы во век не додумался.
С товарищеским приветом Михаил.
Номер ответа: 10
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #10
Добавлено: 19.01.08 19:56
Да я только "ЗА" )
Рад, что помог )
Номер ответа: 11
Автор ответа:
Student
Вопросов: 2
Ответов: 8
Профиль | | #11
Добавлено: 20.01.08 02:28
With Range("A1"
.ClearComments
.AddComment
With .Comment.Shape
.Visible = False
End With
With .Comment.Shape.Fill
.UserPicture _
"C:\Documents and Settings\Dmitriy\My Documents\My Pictures\kinopoisk.ru-Ze-film-196190.jpeg"
End With
End With
End Sub
Подскажите, пожалуйста, какую строку необходимо вставить, чтобы размер окана примечания зависел от размера картинки? То есть (Autosize)
Номер ответа: 12
Автор ответа:
MMikle
Вопросов: 0
Ответов: 4
Профиль | | #12
Добавлено: 20.01.08 12:43
Павел.
В работе с комментариями, дошел до необходимости раскраски его части (строки), и тут чуть было не «стопорнулся», но творчески переработал передовой опыт, и пожалуйста:
'2) добавляем комментарий в ячейку и меняем его шрифт
' + раскраска части коментария (2й строки)
Sub ChangeFontInComment()
With Range("B2"
.ClearComments
.AddComment
.Comment.Text "Бла-" & Chr(10) & "бла-" & Chr(10) & "бла"
With .Comment.Shape.TextFrame.Characters.Font
.Name = "Times New Roman"
.Size = 12
.Bold = False
End With
With .Comment.Shape.TextFrame.Characters(Start:=6, Length:=4).Font
.Size = 14
.Name = "Arial Cyr"
.Bold = True
.ColorIndex = 3
End With
End With
End Sub
Так что, еще раз спасибо.
Номер ответа: 13
Автор ответа:
Student
Вопросов: 2
Ответов: 8
Профиль | | #13
Добавлено: 20.01.08 23:30
Подскжите, пожалуйста, ответ на мой вопрос. См. выше.