У меня странная проблема, к счастью, у меня почти нет другого кода, поэтому я могу сузить его до источника. Мою проблему легче прочитать из кода, чем из моего описания, но я все равно попробую: -Я пытаюсь запомнить диапазон, который вырезан в моей книге, чтобы позже включить «Отменить» -Я нашел отличную функцию, которая сообщает мне диапазон вырезанных ячеек (возвращается как "GetCopiedRange", функция тоже названа так же) -Функция работает и возвращает правильное значение, но позже в Worksheet_Change диапазон внезапно изменится, и ничто не даст ему новое значение
TL; DR: как CutRange.Address в следующем коде может отличаться, когда я выбираю диапазон и после, когда я изменяю значение в диапазоне?
Dim CutRange As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode = xlCut Then
Call GetCopiedRange 'This function changes value of variable "GetCopiedRange" (Range) to the range that is cut to clipboard
Set CutRange = GetCopiedRange 'Save the range under a new variable because if I refer straight to GetCopiedRange later, it doesn't work
MsgBox ("Cut range: " & CutRange.Address)
End If
'This sub works perfectly. If a range is cut to clipboard, Msgbox tells the range correctly
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not CutRange Is Nothing Then
MsgBox CutRange.Address
End If
'This sub works incorrectly(!?) CutRange.address is somehow now the destination of paste instead of where it was cut. How did it change in between?
'Even though when cut-paste operation is carried out, change occurs twice: first to the cut range and then the paste range. Even during the first one, CutRange.Address is somehow already changed to the paste range address
End Sub
РЕДАКТИРОВАТЬ: Я не вижу, как содержимое указанной функции может повлиять на этот результат, я надеюсь, что нам не нужно туда идти, поскольку это скопированная функция намного сложнее, чем я могу понять. Однако, когда я попытался удалить CutRange из всего этого и сразу обратиться к GetCopiedRange в Worksheet_Change, я получил ошибку «не удалось получить данные из буфера обмена», что является сообщением об ошибке внутри функции. Однако, поскольку я использую переменную CutRange, я не вижу, как это можно изменить