Как я могу запретить excel отключать область выделения
Обычно, используя excel, когда пользователь выбирает диапазон и копирует его в буфер обмена, вы заметите, что он активирует выделение вокруг исходного диапазона, некоторые люди называют эту анимацию шаром марширующих муравьев. Для моих целей я создал простой скрипт VBA с сочетанием клавиш Ctrl-T, который принимает этот диапазон буфера обмена, а специальные – вставляет его значение и формат в новый выбранный диапазон назначения. (Пропустить его записку и такие свойства, которые мне не нужны в новом диапазоне).
Проблема возникает, если я хочу добавить к скрипту VBA и также правильно изменить текст диапазона назначения. Проблема заключается в том, что после добавления кода для правильного выравнивания он отключает область выделения и отключает содержимое буфера обмена в исходном диапазоне для любой горячей клавиши Ctrl-T (мой макрос), которая нажимает на большее количество целевых диапазонов. Если я не добавлю дополнительный код в конце VBA, то я могу продолжать вставлять исходный диапазон во многие диапазоны назначения по всей электронной таблице без необходимости повторного выбора исходного исходного диапазона / ячейки, которую я хочу наклеить на все таблицу.
Простое решение состоит в том, чтобы просто повторно выбрать и скопировать диапазон назначения в буфер обмена, но это не сработает, поскольку выбор источника в моем случае – это одна ячейка, а ячейки назначения будут разными.
- Вторая половина макроса VBA выполняется в 3 раза быстрее, если я не запускаю первую часть до
- Как я могу отключить приглашение буфера обмена в excel vba, когда я закрываю книгу?
- Декодировать содержимое XML-таблицы в клипе, создаваемом Excel
- Папка Excel.Range.Copy () с Clipboard.GetText ()
- Скопировать несколько ячеек из сетки в буфер обмена в формате Excel?
Вот код, о котором идет речь:
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
Спасибо за любую помощь.
- Справка по буферизу C #
- C # Вставить содержимое буфера обмена в рабочий лист Excel
- Excel VBA вставляет второй элемент из буфера обмена
- VBA: Получить HTML-буфер обмена
- excel macro cells.find по какой-то причине не будет использовать переменную
- Как мне программным образом получить адрес скопированного выделения из буфера обмена
- Что такое хорошая сетевая сетка, которая принимает данные буфера обмена Excel?
- Как избавиться от ошибки «can not empty the clipboard»?
Хорошо, я не думал, что получаю ответ так быстро, так как кто-то заметил, что 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, позволив мне оставить мои заметки …