Страница: 1 |
Страница: 1 |
Вопрос: Ругается за превышение количества символов.
Добавлено: 05.12.06 23:06
Автор вопроса: Роман
Как изменить в документе Word определенное слово например a="{NAME}" строкой с колличеством символов (переменная 'b') превышающим 255?
При таком раскладе:
With DocWord.Range.Find
.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.MatchWholeWord = True
.Execute FindText:=a, ReplaceWith:=b
End With
ругается Run-time error 5854, слишком длинный строковый параметр.
Можа каким-нибудь другим способом?
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 06.12.06 01:11
http://www.vbnet.ru/forum/show.aspx?id=123064
?
Номер ответа: 2
Автор ответа:
Роман
Вопросов: 26
Ответов: 60
Профиль | | #2
Добавлено: 07.12.06 10:19
Если имеется ввиду: .Application.Selection.Find., то тоже самое - для строк не более 255 символов.
У меня VB6.
Номер ответа: 3
Автор ответа:
Роман
Вопросов: 26
Ответов: 60
Профиль | | #3
Добавлено: 10.12.06 12:20
Ну помогите. Или никто не знает чтоли?
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 13.12.06 01:13
а
objWord.Selection.WholeStory
  = objWord.Selection.Text
objWord.Selection.Text = Replace(D, "вася", "петя"
?
Номер ответа: 5
Автор ответа:
Роман
Вопросов: 26
Ответов: 60
Профиль | | #5
Добавлено: 14.12.06 18:09
в VB6 это не работает.
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 15.12.06 22:28
дуриш...
Номер ответа: 7
Автор ответа:
Роман
Вопросов: 26
Ответов: 60
Профиль | | #7
Добавлено: 11.02.07 13:30
Спасибо, все работает. Только после этого изменяется формат всего документа. Можно ли этого избежать?
Номер ответа: 8
Автор ответа:
Nightblade
Вопросов: 0
Ответов: 1
Профиль | | #8
Добавлено: 17.02.07 16:02
Я тоже только что столкнулся с этой проблемой, правда в C# и обошел ее вот таким извратным способом.
Отрезаем от длинной строки 230 символов и заменяем то, что нам нужно, на эти 230 символов + метку.
Т.е. "{Comment}" на "Это очень длинный комметарий... {{{continue_continue}}}". Затем рекурсивно заменяем {{{continue_continue}}} на оставшуюся часть текста пока все не заменим. Проверил - работает.
Главное, только, чтобы эта хитрая строка {{{continue_continue}}} нигде не встречалась.
Вот код на С#
public bool ReplaceText(string a_TextToReplace, string a_Replacement)
{
string zReplacement = a_Replacement.Replace('\n', '\r');
// Чтобы обойти ограничение на 255 символов, делаем такой финт ушами
// Заменяем 230 символов и добавляем спец метку, которую заменяем на оставшиеся
if (zReplacement.Length > 255)
{
string zNewReplacement = zReplacement.Substring(0, 230) + "{{{continue_continue}}}";
// Если ничего не нашли то дальше можно не мучаться
if (!ReplaceText(a_TextToReplace, zNewReplacement)) return false;
// Берем следующие 230 символов и дальше по рекурсии
return ReplaceText("{{{continue_continue}}}", zReplacement.Substring(230));
}
else
{
m_Document.Activate();
m_WordApp.Selection.Find.ClearFormatting();
m_WordApp.Selection.Find.Replacement.ClearFormatting();
object zFindText = a_TextToReplace;
object zReplaceWith = zReplacement;
object zMatchCase = false;
object zMatchWholeWord = false;
object zMatchWildcards = false;
object zMatchSoundsLike = false;
object zMatchAllWordForms = false;
object zForward = true;
object zWrap = WdFindWrap.wdFindContinue;
object zMatchKashida = false;
object zMatchDiacritics = false;
object zMatchAlefHamza = false;
object zMatchControl = false;
return m_WordApp.Selection.Find.Execute(ref zFindText, ref zMatchCase,
ref zMatchWholeWord, ref zMatchWildcards, ref zMatchSoundsLike,
ref zMatchAllWordForms, ref zForward, ref zWrap, ref m_OptionalArg,
ref zReplaceWith, ref m_OptionalArg, ref zMatchKashida,
ref zMatchDiacritics, ref zMatchAlefHamza, ref zMatchControl);
}
}