Excel VBA вставляет измененное значение вместо исходного - PullRequest
0 голосов
/ 07 января 2019

Мой макрос ниже вставляет значение (Hello) в ячейку A1 и копирует это значение методом копирования. Затем он меняет значение в A1 (Hi).

В конце я хотел бы вставить (оригинальное) значение в другую ячейку, например. B1. Я очень удивлен, что Excel вставляет измененное значение вместо исходного (почему? Копирование было до изменения!).

Примечание: мой макрос начинается с CopyAndPasteData ().

Sub CopyAndPasteData()
  Range("A1") = "Hello"
  CopyData
  Range("A1") = "Hi"
  PasteData
End Sub

Sub CopyData()
  Range("A1").Copy
End Sub

Sub PasteData()
  Range("B1").PasteSpecial
End Sub

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Причина этого заключается в том, что метод .copy просто сохраняет ссылку на скопированную ячейку, а не сохраняет ее текущие атрибуты (то есть текст и форматирование).

Только когда .paste происходит, атрибуты скопированной ячейки считываются и применяются к ячейке вставки.

Именно поэтому, хотя .copy встречается до ваших изменений, изменения все равно отражаются в .paste.

Это не заметно при обычном использовании Excel, потому что как только вы вносите изменения в электронную таблицу, буфер обмена очищается, поэтому у вас нет возможности вставить после изменения скопированной ячейки.

Для подтверждения этого утверждения, если вы добавите Range("A1").Delete до PasteData, вы получите ошибку времени выполнения, поскольку ссылка .copy теперь указывает на несуществующий объект.

0 голосов
/ 07 января 2019
sub test()
    dim s as String
    Range("A1") = "Hello"
    s = Range("A1").value
    Range("B1").value = s
    PasteData
end sub    

Это лучшее, что ты можешь сделать. Создайте переменную и присвойте значение A1 определенной переменной, чтобы вы могли использовать первое значение где угодно, обращаясь к переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...