Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
         
        ;D = 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);
            }
        }

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам