Что делать, если в Microsoft Word возникла ошибка «‎слишком длинный строковый параметр»

Всем привет, сегодня снова работаем с эксель таблицей и шаблоном в ворд, в этом видео я вам покажу как работать с большим текстом, если у нас допустим, в нашей ячейке будет содержаться текста значительно больше чем 255 символов.

  • Как заполнить Word шаблон из таблицы Excel. Часть 1 — (видео)
  • Как заполнить Word шаблон из таблицы Excel. Часть 2 — (видео)

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

Давайте возьмём пример из первого видео, перейдете по ссылке в описании на странице есть файл в архиве.

Давайте сделаем так что у нас в заголовке таблицы будет не адрес, а текст для примера. Будем практиковаться на основе ячейки C2 .

Давайте сделаем проверку длинны текста в ячейке, используя функцию ДЛСТР — длина строки. У нас здесь сейчас находится 15 символов.

Сделаем больше текста для этого я в Microsoft Word используя функцию LOREM() , которая сформирует случайный текст.

Теперь я скопирую текст, нужен будет блокнот, вставлю текст из буфера обмена, уберу лишние отступы переносы.

Давайте посмотрим какой длины у нас получится сейчас этот текст. Так вот у нас даже не помещается текст на экране, поправим таблицу. Длина текста в ячейке 598 символов с пробелами.

Давайте перейдём в Редактор Visual Basic, alt+f11 и посмотрим код прошлого примера.

Исправим название переменной адрес на текст, здесь исправим на текст и посмотрим что у нас получится.

Теперь откроем шаблон и заменим Адрес на Текст и исправим конструкцию для замены на Не выполнено! " + Error

Вот теперь мы избавимся проблемы, когда у нас будет зависать в Диспетчере задач Microsoft Word, который мы не успеваем закрыть.

Давайте выполним макрос, появится сообщение — не выполнено слишком длинный строковый параметр, в принципе у нас документ сформировался, но он в целом не полностью отработал.

Сейчас мы исправим эту проблему, кстати гляну в диспетчер задач у нас Microsoft Word нигде не висит, и он нам не мешает. OK.

Теперь снова перейдём в редактор VBA. и разобьем переменную Text$ на фрагменты допустимой длины.

Ну кроме исправлю маленькую опечатку, тут естественно должен быть text , мы её скопируем и вставим несколько раз, дописав числа 2 и 3.

То есть у нас всякий раз вот этот фрагмент текст будет заменяться на значения из наших переменных temp , temp2 , temp3 . Можно в коде VBA продолжать добавлять разбивку основного текста на части, но будьте внимательны, указывая смещение и длину символов. Соответствующе правки так же вносите в шаблон.

Давайте попробуем запустить и посмотрим, что получится, закрыли, свернули.

Впишемся ли мы в данное ограничение, О’кей, готово.

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

Следующие файлы так же сформировались, но тут у нас все осталось как обычно.

Вот таким простым способом вы можете обойти эту условность, ограничение в 255 символов, в принципе сама строковая переменная Text$ может очень много вместить в себя значений, но при работе вот этой функции FindText замена текста, вот здесь, мы не можем производить большие какие-то преобразования, но вот с такой разбивкой большого текста на переменные в принципе можно это продолжать дальше.

То есть у нас 512 + 255 получается 767, следующий шаг в 255 символов можно делать с 768 знака.

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

Исходный код из видео

re>Sub main() Dim wdApp As Object Dim wdDoc As Object HomeDir$ = ThisWorkbook.Path Set wdApp = CreateObject("Word.Application") i% = 2 Do If Cells(i%, 1).Value = "" Then Exit Do If Cells(i%, 1).Value <> "" Then NPP$ = Cells(i%, 1).Text ID$ = Cells(i%, 2).Text Text$ = Cells(i%, 3).Text SN$ = Cells(i%, 4).Text DataC$ = Date FileCopy HomeDir$ + "template.doc", HomeDir$ + "" + NPP$ + "_" + ID$ + "_" + DataC$ + ".doc" Set wdDoc = wdApp.Documents.Open(HomeDir$ + "" + NPP$ + "_" + ID$ + "_" + DataC$ + ".doc") On Error GoTo ErrorHandler temp = Left(Text$, 255) temp2 = Mid(Text$, 256, 255) temp3 = Mid(Text$, 512, 255) temp4 = Mid(Text$, 768, 255) wdDoc.Range.Find.Execute FindText:=", ReplaceWith:=DataC$ wdDoc.Range.Find.Execute FindText:=", ReplaceWith:=ID$ wdDoc.Range.Find.Execute FindText:=", ReplaceWith:=temp wdDoc.Range.Find.Execute FindText:=", ReplaceWith:=temp2 wdDoc.Range.Find.Execute FindText:=", ReplaceWith:=temp3 wdDoc.Range.Find.Execute FindText:=", ReplaceWith:=temp4 wdDoc.Range.Find.Execute FindText:=", ReplaceWith:=SN$ wdDoc.Save wdDoc.Close End If i% = i% + 1 Loop wdApp.Quit MsgBox "Готово!" Exit Sub ErrorHandler: wdDoc.Save wdDoc.Close wdApp.Quit MsgBox "Не выполнено! " + Error End Sub

Исходный код из видео — скачать архив с файлами

Смотрите видео: Исправляем ошибку VBA № 5854 слишком длинный строковый параметр в шаблоне word из таблицы excel 255 символов

Трудовой договор в формате MS Word

Трудовой договор

Для большенства организаций стандартная печатная форма трудового договора в программе 1С:Зарплата и управление персоналом не подходит. Фирма 1С, в восьмой версии своей программы, любезно предусмотрела возможность добавлять дополнительные печатные формы для документов и других объектов. Воспользуемся данной возможностью и создадим трудовой договор, который будет открываться в Microsoft Word.

Специалисты по конфигурированию могут разрабатывать внешние обработки вне конфигурации, используемой в организации. Разработанный отчет или обработка передается в виде файла так называемой внешней обработки с расширением .epf. Пользователь может подключить эту обработку к конфигурации самостоятельно.

Сведения о подключенных обработках хранятся в справочнике «Внешние обработки». Чтобы подключить новую внешнюю обработку, нужно зарегистрировать ее в указанном справочнике.

Технические требования к внешней печатной форме

Внешняя обработка должна содержать:

  • Реквизит «СсылкаНаОбъект», куда при вызове будет передана ссылка на объект, для которого необходимо выполнить печать;
  • Необязательный реквизит «ДополнительныеПараметры» произвольного типа, которому будут передаваться дополнительные параметры примитивного типа в виде структуры;
  • Функция Печать() — без параметров, возвращающая табличный документ;
  • Внешняя печатная обработка может иметь в своем составе макет «Параметры_Авторегистрации», используемый для автоматического заполнения принадлежности печатной формы в справочнике «Внешние обработки» и состоящий из двух колонок: «Полное имя метаданного» и «Имя табличной части».

Создание внешней обработки

Запустим 1С:Предприятие в режиме «Конфигуратор» и через меню «Файл» — «Новый» создадим внешнюю обработку.

Создание внешней обработки

Создадим реквизит «СсылкаНаОбъект». Для этого нажимем кнопку «Добавить» или клавишу «Insert» и заполним свойства. В зависимости от того, для каких объектов будет использоваться эта печатная форма, нужно выбрать тип. В нашем случае, внешняя печатная форма будет использоваться только для справочника «Сотрудники организации», поэтому укажем соответствующий тип «СправочникСсылка.СотрудникиОрганизаций».

Свойства реквизита

Реквизит «ДополнительныеПараметры» нам не понадобится. Создадим экспортную функцию Печать() («Действия» — «Открыть модуль объекта»).

Функция Печать()

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

Макет трудового договора в формате Microsoft Word

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

Первый. В тексте документа содаются метки особого формата, например, «м_НомерДоговора», затем, в модуле обработки производится поиск и замена значений.

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

Способ три. В шаблон добавляются служебные поля, например, «DocVariable» или «Author». Используя DocVariable можно обращаться к переменной по имени, например, «ДокументВорд.Variables.Add(ИмяПеременной, ЗначениеПеременной);», но ее не видно в шаблоне. Поле «Author» отображается в шаблоне, но обращаться к нему придется в цикле по индексу: «ДокументВорд.Fields.item(Индекс).Result.Text = Значение;».

На мой взгляд, первый способ является самым оптимальным. Шаблон документа легко редактируется, метки видны в тексте, для создания меток не нужны сложные вставки. Поэтому будем делать шаблон именно этим способом.

Откроем программу Microsoft Office. Для примера добавим лишь одну строку: «Трудовой договор № [НомерДоговора]».

Добавим получившийся шаблон в нашу обаботку. Для этого выбираем «Макеты» и нажимаем кнопку «Добавить» или клавишу «Insert».

Выбор макета трудового договора

Откроется конструктор запроса, в котором выберем тип «Active Document» и файл шаблона.

Конструктор макета Active Document

Функция Печать()

Вернемся к функции, которую мы создали ранее. Настало время написать ее тело.

// Предопределенная функция для внешних печатных форм // Функция Печать () Экспорт

// Получим объект Microsoft Word из макета ОбъектВорд = ПолучитьМакет ( "ТрудовойДоговор" ). Получить ();

// Получим документ из объекта и активируем его Документ = ОбъектВорд . Application . Documents ( 1 ); Документ . Activate ();

// Поиск и замена маркеров Замена = Документ . Content . Find ; Замена . Execute ( "[НомерДоговора]" , , , , , , , , , "007" , 2 );

// Вывод документа ОбъектВорд . Application . Visible = Истина; ОбъектВорд . Activate ();

Из кода видно, что в файле шаблона производится поиск строки «[НомерДоговора]» и ее замена на строку «007».

Параметры авторегистрации

Для автоматического заполнения принадлежности печатной формы к объектам конфигурации, добавим еще один макет «Параметры_Авторегистрации». Это будет табличный документ, содержащий одну колонку с именами объектов метаданных, к которым будет принадлежать печатная форма. В нашем случае таблица будет выглядить следующим образом.

Параметры авторегистрации

Сохраним получившуюся внешнюю обработку.

Подключение дополнительных внешних печатных форм

Запустим 1С Предприятие. Откроем справочник «Дополнительные внешние печатные формы» через меню «Сервис» — «Дополнительные отчеты и обработки».

Нажмем кнопку «Добавить», затем зарегистрируем новую печатную форму, нажав «Заменить файл внешней обработки». Автоматически заполнится принадлежность печатной формы справочнику «Сотрудники». Выберем «Трудовой договор» в колонке «Заменяемая печатная форма» чтобы стандартная печатная форма более не использовалась.

Регистрация внешней печатной формы

В итоге справочник будет выглядить следующим образом.

Дополнительные внешние печатные формы

Проверка результата

Откроем любого работающего сотрудника и нажмем кнопку «Печать» — «Трудовой договор». Откроется документ Microsoft Word с трудовым договором под номером «007».

Трудовой договор в MS Word

Дальнейшее описывать не имет смысла. Думаю, не составит большого труда доработать функцию Печать() и макет договора.

  • Add new comment

Слишком длинный строковый параметр word vba

Ошибка, если в ячейке текста более 255 знаковДля заполнения шаблонов документов ворда, создал в экселе вот такой макрос: ‘ Открытие ворда Set.

Текст, состоящий не более чем из 255 символов, разбить на строки длиной не более 50 символов в строкеТекст, состоящий не более чем из 255 символов, разбейте на строки длиной не более 50 символов в.

Readln не более 255 символов.Как Readln’ом с клавиатуры ввести больше 256 символов?

Переменная типа String переменной длины может содержать строку длиной до прибл. 2 млрд. символов. -||- фиксированной длины — до 65400 символов.

Само название переменной — до 254 символов.

Diskretor, шото не пойму при работе с текстом болие чем 255 символов видает ошыбку слишком большой строковой параметр. coderxx, я копирую текст изз екселя в переменную и вставляю в шаблон ворда но если текст болие чем 255 символов то начинает ругатся Параметр чего? Например, максимальная длина формулы в ячейке Excel 2000 — 1024 символа. Как вставляете? Вот так — работает со строкой длиной 10000 (больше не проверял):

Видимо, проблема в том, в методе Range.Find свойства Text и Replacement.Text ограничиваются 255 символами.

Я правильно понимаю, что вы проходите таблицу из 2-х столбцов в Excel (Кстати, как у вас работает "ReplaceText = Trim$(.Cells(i))", нормально?), ищете текст из первого столбца и заменяете его текстом из второго столбца? Можно поинтересоваться зачем?

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

Очевидно, не с помощью инструмента Range.Find

Чтобы понять, что надо использовать вместо него, надо понять задачу целиком.

У вас есть шаблон в Word и вам надо, чтобы определенные части этого шаблона брались из таблицы Excel? Для этого в Word есть инструмент "Слияние" (Рассылки -> Начать слияние).

Gibboustooth, ето точно не подходит потому что сохраненний(изменненій ) документ изменяется при изминение в екселе

Добавлено через 1 минуту от как увеличеть Range.Find незнаю

Более 255 символов в полеВсем добрый вечер. Обнаружилась очередная "странность" Access’а. Предыстория: одна из.

Как ввести в строку более 255 символов?Всем привет))помогите пожалуйста. Как ввести в строку более 255 символов?Мне сказали использовать.

Дана строка S длиной не более 255 символовДана строка S длиной не более 255 символов. Подсчитать количество содержащихся в ней цифр. .

Дана строка длиной не более 255 символов.Дана строка длиной не более 255 символов. Группы символов, разделённых между собой одним пробелом и.

Читайте также:

  • Как удалить настройки эксель
  • Paint stripper что это
  • Не открывается куфар в опере
  • Как в 1с начислять зарплату по подразделениям
  • Фотографии для редактирования в фотошопе города
Оцените статью
InternetDoc.ru
Добавить комментарий