Всем привет, сегодня снова работаем с эксель таблицей и шаблоном в ворд, в этом видео я вам покажу как работать с большим текстом, если у нас допустим, в нашей ячейке будет содержаться текста значительно больше чем 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» и файл шаблона.

Функция Печать()
Вернемся к функции, которую мы создали ранее. Настало время написать ее тело.
// Предопределенная функция для внешних печатных форм // Функция Печать () Экспорт
// Получим объект Microsoft Word из макета ОбъектВорд = ПолучитьМакет ( "ТрудовойДоговор" ). Получить ();
// Получим документ из объекта и активируем его Документ = ОбъектВорд . Application . Documents ( 1 ); Документ . Activate ();
// Поиск и замена маркеров Замена = Документ . Content . Find ; Замена . Execute ( "[НомерДоговора]" , , , , , , , , , "007" , 2 );
// Вывод документа ОбъектВорд . Application . Visible = Истина; ОбъектВорд . Activate ();
Из кода видно, что в файле шаблона производится поиск строки «[НомерДоговора]» и ее замена на строку «007».
Параметры авторегистрации
Для автоматического заполнения принадлежности печатной формы к объектам конфигурации, добавим еще один макет «Параметры_Авторегистрации». Это будет табличный документ, содержащий одну колонку с именами объектов метаданных, к которым будет принадлежать печатная форма. В нашем случае таблица будет выглядить следующим образом.

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

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

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

Дальнейшее описывать не имет смысла. Думаю, не составит большого труда доработать функцию Печать() и макет договора.
- 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с начислять зарплату по подразделениям
- Фотографии для редактирования в фотошопе города




