перемещение примечаний при удалении строк

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
jaroslav
Сообщения: 45
Зарегистрирован: 07 дек 2009, 13:25

Добрый день. У меня такой вопрос: можно ли сделать так, чтобы при удалении строк примечания к ячейкам оставались на том уровне, как они были до удаления?
Прилагаю файл. Первоначальный вид примечаний показан на Листе1. После удаления строк 8-28 примечания переместились вниз (Лист1_после_удаления_строк). Нужно, чтобы они остались на прежнем уровне, то есть возле ячеек, к которым они относятся (Лист1_как_должно_быть)
Вложения
примечания_2..zip
(11.95 КБ) 36 скачиваний
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Jaroslav, В свойствах примечания можно установить привязку об'екта как Перемещать, но не изменять размеры. Если эту операцию, проделывать для каждого примечания, не хочется, то можно воспользоваться нижеопубликованным макросом :

Код: Выделить всё

Private Sub SetCommentPlacement()
    Dim iComment As Comment
    For Each iComment In ActiveSheet.Comments
        iComment.Shape.Placement = xlMove
        'xlMoveAndSize  - Перемещать и изменять об'ект вместе с ячейками
        'xlMove         - Перемещать, но не изменять размеры
        'xlFreeFloating - Не перемещать и не изменять размеры
    Next
End Sub
Если этот финт не прокатит (хотя в случае с удалением строк, лично мне повезло), то после удаления строк, можно выполнить следующий макрос :

Код: Выделить всё

Private Sub SetCommentMove()
    Const TopOffset! = 10  'Можно указать свои значения "смещений"
    Const LeftOffset! = 10  
    
    Application.ScreenUpdating = False

    Dim iComment As Comment, iCell As Range    
    For Each iComment In ActiveSheet.Comments
        Set iCell = iComment.Parent(0, 2)
        With iComment.Shape
             .Top = iCell.Top + TopOffset
             .Left = iCell.Left + LeftOffset
        End With
    Next
    
    Application.ScreenUpdating = True
End Sub
P.S. Обратите внимание на то, что здесь нет подбора ширины/высоты шейпа, ибо если Вы, всё-таки установите свойство Placement как xlMove(перемещать, но не изменять размеры), то в этом не будет необходимости, т.к. размеры будут "фиксированы"
jaroslav
Сообщения: 45
Зарегистрирован: 07 дек 2009, 13:25

Спасибо, pashulka. Заработал второй макрос
Ответить