Как я могу запретить excel отключать область выделения

Обычно, используя excel, когда пользователь выбирает диапазон и копирует его в буфер обмена, вы заметите, что он активирует выделение вокруг исходного диапазона, некоторые люди называют эту анимацию шаром марширующих муравьев. Для моих целей я создал простой скрипт VBA с сочетанием клавиш Ctrl-T, который принимает этот диапазон буфера обмена, а специальные – вставляет его значение и формат в новый выбранный диапазон назначения. (Пропустить его записку и такие свойства, которые мне не нужны в новом диапазоне).

Проблема возникает, если я хочу добавить к скрипту VBA и также правильно изменить текст диапазона назначения. Проблема заключается в том, что после добавления кода для правильного выравнивания он отключает область выделения и отключает содержимое буфера обмена в исходном диапазоне для любой горячей клавиши Ctrl-T (мой макрос), которая нажимает на большее количество целевых диапазонов. Если я не добавлю дополнительный код в конце VBA, то я могу продолжать вставлять исходный диапазон во многие диапазоны назначения по всей электронной таблице без необходимости повторного выбора исходного исходного диапазона / ячейки, которую я хочу наклеить на все таблицу.

Простое решение состоит в том, чтобы просто повторно выбрать и скопировать диапазон назначения в буфер обмена, но это не сработает, поскольку выбор источника в моем случае – это одна ячейка, а ячейки назначения будут разными.

Вот код, о котором идет речь:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False With Selection .HorizontalAlignment = xlRight End With 

Спасибо за любую помощь.

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

Просто измените значения по умолчанию сочетания клавиш Ctrl-C и замените его собственной подпрограммой, которая выполняет стандартную копию, но также сохраняет объект в глобальной переменной. Таким образом, наша пользовательская комбинация клавиш клавиатуры может получить к ней доступ по мере необходимости, сколько угодно, независимо от того, отключает ли какой-либо процесс подпрограммы и удаляет содержимое буфера обмена.

В том же модуле VBA, который у меня есть как для копирования, так и для вставки специальных SUBroutines, я создал 2 глобальных переменных, которые содержат объекты Source & Destination.

Вот рабочий код:

 Public SourceCell As Range Public DestinationCell As Range Sub MyCopy() ' ' MyCopy Macro (Make sure to set the macro shortcut option to Ctrl-C) ' Set SourceCell = Selection Selection.Copy End Sub Sub MyPaste() ' ' MyPaste Macro (Make sure to set the macro shortcut option to Ctrl-T or our choice) ' Set DestinationCell = Selection SourceCell.Select Selection.Copy DestinationCell.Select 'You can substitute your own paste code here Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False With Selection .HorizontalAlignment = xlRight End With 'The two lines below are not necessary for our custom paste hotkey but It: '1) Recreates the marquee for standard Ctrl-V paste operations '2) Shows you what your original selection was in case you forgot SourceCell.Select Selection.Copy 'Then add the following line so the screen doesn't shift back to source cell DestinationCell.Select End Sub 

Таким образом, в основном вышеупомянутое дополнение модуля VBA позволит вам использовать Ctrl-C, чтобы скопировать диапазон и Ctrl-T, чтобы вставить только значение и формат, а затем он автоматически будет прав. Помните, что процесс того, что вы хотите вставить, зависит от пользователя.

Спасибо, stackoverflow, позволив мне оставить мои заметки …

  • Отключить приглашение буфера обмена в Excel VBA по книге закрыть
  • Копировать / Вставить в Excel с помощью буфера обмена
  • Как правильно форматировать текст для вставки его из C # в Excel?
  • Вызов подпрограммы из внешнего приложения
  • Буфер обмена c # в Excel и блокнот
  • Программно (C #) конвертировать Excel в изображение
  • Как заблокировать буфер обмена или не использовать его в MS Excel?
  • VB / VBA: выборка HTML-строки из буфера обмена (копируется через веб-браузер)
  • C # Добавить данные Excel в формате Excel в буфер обмена
  • .NET. Способ добавления моего собственного формата буфера обмена в существующие форматы.
  • Как определить, сколько столбцов / строк имеет таблица, скопированная из другого приложения?
  • Interesting Posts

    SqlBulkCopy не импортирует данные из Excel

    Копирование определенных строк с вкладки листа на другую вкладку листа простым нажатием кнопки

    Условие, связанное с заданным значением в формате

    быстрый способ скопировать формулы Excel

    CELL ("filename") перестает работать, когда файл Excel сохраняется в другом месте

    Экспорт диаграмм из Excel в виде изображений с использованием Python

    Поддержка NPOI CSV / TSV?

    Как я могу обойти ограничение поиска (what: =) в excel vba

    Запись и сохранение документа Excel в IIS – ASP.NET MVC

    Средние данные в нескольких файлах excel с использованием MATLAB

    Использование PHPExcel для добавления в файл Excel

    Как применить ATPVBAEN в наборе данных с пропущенными данными в одном столбце?

    Согласование 1-го удовлетворяющего неравенства с 1 критерием и получение заголовка столбца

    Excel Worksheet_SelectionChange для выбора значения ячейки в столбце 1

    Laravel / PHP Excel получает строки до тех пор, пока не вернет пустой массив

    Давайте будем гением компьютера.