Destio небольшой блог

“Слишком длинный строковый параметр”, VBA

Сидел я крутил какие-то документы с макросами и обычный, вполне работающий макрос выпал с ошибкой:

Run-time error ‘5854’:
Слишком длинный строковый параметр

Вот срань, оказывается свойство объекта FindReplace .Find.Replacement.Text в VBA не может принимать параметры длиной больше 255 символов (привет, 70-е). А в автозаменах довольно легко упереться в эту крохотную границу. Странно, но параметр .Execute ReplaceWith: “replacementText” имеет точно такое ограничение.

Вот кусок кода, который вылетал с ошибкой, потому что citeEn (наша переменная с текстом) был слишком длинным.

With .Content.Find
   .Text = "#CitationPlaceholder#"
   .Replacement.Text = citeEn 'не больше 255 символов
   .Execute Replace:=wdReplaceAll
End With

Гугл рекомендовал мне рекурсивно разбивать .Replacement.Text на куски по 250 символов и автозаменять друг за другом. Однако громоздкость этого решения меня напугала, поэтому я подумал что лучше бы мне искать текст, выделять его, и заменять выделенное на наш большой текст:

Selection.Find.ClearFormatting
Selection.Find.Execute FindText:="#CitationPlaceholder#", Wrap:=wdFindContinue
If Selection.Find.Found = True Then Selection.Text = citeEn 'много символов

Такой способ позволяет заменить как минимум 900 знаков, а дальше я не проверял.

Ярлыки: ,


Ближайшие сообщения:

Похожие сообщения:

Комментарии к этой записи отключены.