Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Вставка только значения с примечанием

Автор Alexander.V, 13.05.2025, 08:50:08

« назад - далее »

Alexander.V

Добрый день.
По работе приходится периодически копировать значения из одной таблицы в другую без формата и прочего, но с примечаниями,  в которых фиксируются изменения к ячейкам, делается это в два этапа: сначала вставляются только значения, потом через специальную вставку - примечания. Поэтому хочется эти операции оптимизировать. Копирование нужно производить при помощи клавиш или другим стандартным способом, а вставку - через контекстное меню через добавленную кнопку, как это сделано в этой статье.
Прошу подсказать варианты решений.

Дмитрий Щербаков(The_Prist)

#1
Цитата: Alexander.V от 13.05.2025, 08:50:08Прошу подсказать варианты решений
Ну вот как бы...Подсказать варианты или сделать все с нуля?  ;-D Т.к. подсказки все есть в предыдущих темах и по ссылке, которую Вы уже приложили.
Александр, Вы пробовали хотя бы записать макрорекордером действия во вставке значений и примечаний? Это возможно сделать без доп.помощи. При этом в теме, в которой Вы изначально разместили вопрос, я давал уже готовые строки кода по упрощению такой вставки(только значений, но с примечаниями тоже самое). Т.е. как бы не видно совсем, чтобы Вы хоть что-то уже сделали. А если сделали - что именно из найденного не получилось адаптировать по себя? Именно поэтому все и выглядит как "я тут что-то поискал, но сам делать не хочу - сделайте все за меня" :)
По сути все сводится к трем строкам кода:
'Selection.Copy 'где-то копируем какой-то диапазон
Sub PasteValuesAndComments()
    ActiveCell.PasteSpecial Paste:=xlPasteValues 'вставка значений
    ActiveCell.PasteSpecial Paste:=xlPasteComments 'вставка примечаний
End Sub
Добавить это в контекстное меню для ячеек можно так:
With Application.CommandBars("Cell").Controls.Add(before:=1)
    .Caption = "Вставить значения и примечания"
    .Style = 2
    .OnAction = "'" & ThisWorkbook.Name & "'!PasteValuesAndComments"
End With
Но здесь есть нюанс: пункт будет добавлен столько раз, сколько раз будет вызван этот код. Поэтому лучше сначала проверять наличие такого пункта в меню и удалять его, и только потом добавлять новый.

Ну а в сборе это все может выглядеть так:
'добавление в контекстное меню ячеек пункта вставки значений и примечаний
'этот код правильнее вызывать при открытии нужной книги - на событие Workbook_Open(хотя и здесь есть нюансы)
Sub AddButtonToCellMenu()
    Dim cbb
    Const sBCaption$ = "Вставить значения и примечания"
    'ищем пункт в меню и если он уже есть - удаляем, чтобы не было задвоений
    On Error Resume Next
    Set cbb = Application.CommandBars("Cell").Controls(sBCaption)
    If Not cbb Is Nothing Then
        cbb.Delete
    End If

    With Application.CommandBars("Cell").Controls.Add(before:=1)
        .Caption = sBCaption
        .Style = 2
        .OnAction = "'" & ThisWorkbook.Name & "'!PasteValuesAndComments"
    End With
End Sub
'
Sub PasteValuesAndComments()
    On Error GoTo Err_Handler
    ActiveCell.PasteSpecial Paste:=xlPasteValues 'вставка значений
    ActiveCell.PasteSpecial Paste:=xlPasteComments 'вставка примечаний
Err_Handler:
    If Err.Number = 1004 Then
        MsgBox "Буфер обмена пуст!", vbInformation, "https:\\excel-vba.ru"
    End If
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Яндекс.Метрика Рейтинг@Mail.ru