Переменная клона в Word VBA - PullRequest
       26

Переменная клона в Word VBA

0 голосов
/ 24 сентября 2011

Учитывая диапазон с изменениями в нем, мне нужно восстановить исходный текст и измененный текст. Первое решение было:

Sub OriginalText (ByVal Rng as Range)
Rng.Revisions.RejectAll
OriginalText = Rng.Text
End sub

Но оказалось, что ByVal на самом деле не ByVal. в тот момент, когда вызывается RejectAll, все изменения также отклоняются в исходном документе, и их невозможно применить - они исчезли из ThisDocument.Revisions.

Есть ли (желательно удобный) способ скопировать переменную Rng в любой (скажем, Rng2) в подпрограмме, чтобы я мог работать с копией диапазона, не затрагивая источник?

Есть ли способ сериализовать диапазон и собрать его вместе, может быть?

Upd: Позвольте мне сказать это так. Есть ли шанс скопировать объект (Range в моем случае), чтобы изменения, внесенные в копию, не влияли на источник? Я думаю, что это по-прежнему самое быстрое и элегантное решение.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2011

.RejectAll, кажется, очищает все ревизии (в том числе, когда текст был введен впервые).Было бы удобно, если бы мы могли получить доступ к .Revisions(0), но, похоже, это невозможно.

Лучше всего подумать, сможете ли вы сохранить оригинальный документ до внесения изменений.Если это невозможно, вы можете выполнить что-то вроде этого сценария и найти все изменения вручную.

0 голосов
/ 29 марта 2013

Попробуйте Range.Duplicate , который, кажется, создает клон диапазона.

0 голосов
/ 24 сентября 2011

Range - это маркер, даже если он возвращает содержимое диапазона. Если вы хотите текст, вы должны сказать так.

Set r = Selection.Range
TextNow = Selection.Range.Text
TextOrig = OriginalText(r)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...