справочной информациисохраняют первоначальную первенствовать историю буфера обмена после выполнения макроса VBA
Я использую VBA макросы для выполнения последовательности из нескольких отдельных шагов с целью обмена содержимых двух строк в моем листе. В сущности, я могу перемещать выбранную строку вверх по строкам и, следовательно, изменять порядок строк по отношению к другим строкам. Для того, чтобы выполнить этот макрос, я установил комбинацию клавиш (или кнопку):
Sub MoveOneRowUp()
Dim rowCurrent As Integer
Dim colCurrent As Integer
' save current row coordinates
rowCurrent = ActiveCell.Row
colCurrent = ActiveCell.Column
' check validity
If rowCurrent > 1 Then
' select row above active cell
Rows(rowCurrent - 1).Select
' cut out entire row
Selection.Cut
' select
Rows(rowCurrent + 1).Select
' do the shift
Selection.Insert Shift:=xlDown
' select previously current cell
Cells(rowCurrent - 1, colCurrent).Select
End If
End Sub
Макрос явно изменяет буфер обмена из-за выбора, вырезания и вставки содержимого ячеек. Теперь я ожидаю, что история буфера обмена останется неизменной после выполнения макроса. Таким образом, пользователь может отменить/отменить/снять то, что сделал макрос, и даже вернуться в историю глобального буфера обмена. В моей системе Windows я обычно делаю это, нажимая <CTRL> + <Z>
. Но после выполнения макроса вся история буфера обмена исчезла, и я больше ничего не могу отменить.
вопрос
Что я мог сделать в описанном случае, чтобы сохранить историю буфера обмена, независимо от исполнения макроса? Есть ли какой-то намек на то, как обычно работает механизм истории буфера обмена EXCEL?
Спасибо.
копирования значений из/в переменных помогает только в этом случае, если нет ссылки или формула, которая будет перемещаться вокруг. К сожалению, существует формула и контент ссылок, которые должны сохраняться при перемещении строк. Нет ли более общего способа обработки истории буфера обмена? Например, если у вас есть ** буферный объект **, который может быть перенесен во временную ячейку памяти до операции макрокоманды и вытащен оттуда после операции? – nnako
@nnako. Если вы включаете ссылку на библиотеку объектов Microsoft Forms n.n, у вас есть доступ к MSForms.DataObject, который позволяет вам читать или записывать текст в буфер обмена. Ссылки: [Объект DataObject] (https://msdn.microsoft.com/EN-US/library/office/gg264345.aspx) и [Использование буфера обмена в VBA] (http://www.cpearson.com/excel/ Clipboard.aspx). Если вы хотите сохранить больше, чем текст, и если вы знаете какой-либо из языков .Net, вы можете рассмотреть возможность кодирования Addin для доступа к DataObject .Net [DataObject Class] (https://msdn.microsoft.com/en-us/library /system.windows.forms.dataobject(v=vs.110).aspx) –