Vba error 5854

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

Смотри

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

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

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

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

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

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

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

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

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

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

Теперь откроем шаблон и заменим Адрес на Текст и исправим конструкцию для замены на &text.

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

Посмотрим, что теперь получится, изменю масштаб, для доступа к кнопке запуска макроса.

Появляется ошибка № 5854 — слишком длинный строковый параметр.

И хотя бланк сформировался, произошло не то что ожидалось, ID вывели, серийный номер не изменился, потому как по коду данного макроса, мы не дошли до номера мы остановились вот здесь, ошибка произошла выше.

Давайте откроем диспетчер задач, существует проблема которую мы сейчас решим, иначе у нас при любой ошибке в работе макроса в Диспетчере задач в фоне остается запущен экземпляр Microsoft Word в котором рухнул наш шаблон.

Давайте ещё раз попробуем сформировать посмотрим, что у изменится.

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

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

Вставим вот здесь следующий код:

On Error GoTo ErrorHadler

Это у нас метка перехода, если произойдет ошибка, мы перейдём в конец модуля, вот здесь мы сделаем Exit Sub — Выход из модуля.

Ниже напишем ErrorHandler: наша метка и здесь нам нужно будет вставить код сохранения, закрытия и выхода из Word.

wdDoc.Save
wdDoc.Close
wdApp.Quit

Также добавим сообщение

MsgBox "Не выполнено! " + Error

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

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

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

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

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

Дайте я посмотрю, что изменится, хотя даже если мы исправили это значение, всё равно ничего не получилось.

Теперь удалим снова бланк, вернемся вот сюда, зададим переменную temp равно Left возьмём от переменной Text$ 255 символов, снова создадим переменную temp2, воспользуемся теперь функцией Mid, мы возьмём начиная с 256 символа текст длиной 255 символов.

Теперь нужно будет продублировать здесь строку для замены значений, укажем переменные temp, temp2, здесь мы сделаем заменяемое значение text2.

Сделаем с запасом, ещё разок скопирую и вставлю

temp3 = Mid(Text$, 512, 255).

Теперь мы шагнем от 256 + 255 равно 511, начиная с 512 символа мы опять шагнем на 255 символов.

Ещё продублирую строку замены, переменная temp3, значение text3.

Как нам указать в шаблоне заменяемые значения? А мы их ведем просто в наш шаблон, уже есть вот эта строка &text, мы её скопируем и вставим несколько раз, дописав числа 2 и 3.

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

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

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

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

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

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

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

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

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

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:="&date", ReplaceWith:=DataC$
wdDoc.Range.Find.Execute FindText:="&id", ReplaceWith:=ID$
wdDoc.Range.Find.Execute FindText:="&text", ReplaceWith:=temp
wdDoc.Range.Find.Execute FindText:="&text2", ReplaceWith:=temp2
wdDoc.Range.Find.Execute FindText:="&text3", ReplaceWith:=temp3
wdDoc.Range.Find.Execute FindText:="&text4", ReplaceWith:=temp4

wdDoc.Range.Find.Execute FindText:="&sn", 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

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


ZIP архив с файлами


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

Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

  • Remove From My Forums

 locked

Copy data from Excel to Word Document — Run-time error ‘5854’ — String parameter too long

  • Question

  • Hello Everyone.

    I need a help with the VBA macro.

    I have one excel file & a word file. I need the data in the excel sheet to copy in to the word document. I’d worked on it and it’s run accordingly. But when I put a long sentences in the excel’s cell, it return error and says ‘String parameter too long’

    Anyone have idea or a way to solve this? Help me..

    Here my files

    ZIP : http://www.uploadmb.com/dw.php?id=1356662678

    Notes: You need to open the excel file, in ‘Summary’ Sheet, then press the «Process Data» button and you get what i mean

    TQ

Answers

  • Do a little research on ‘DocVariables’ in MS Word.  When you’ve added a couple DocVariables in your Word document, run this code (run the code from Excel):

    Sub PushToWord()

    Dim objWord As New Word.Application
    Dim doc As Word.Document
    Dim bkmk As Word.Bookmark
    sWdFileName = Application.GetOpenFilename(, , , , False)
    Set doc = objWord.Documents.Open(sWdFileName)
    ‘On Error Resume Next

    objWord.ActiveDocument.variables(«BrokerFirstName»).Value = Range(«BrokerFirstName»).Value
    objWord.ActiveDocument.variables(«BrokerLastName»).Value = Range(«BrokerLastName»).Value
    objWord.ActiveDocument.variables(«Ryan»).Value = Range(«Ryan»).Value

    objWord.ActiveDocument.Fields.Update

    ‘On Error Resume Next
    objWord.Visible = True

    End Sub

    Of course, the ‘BrokerFirstName’ is a Named Range in Excel.

    Try it and you’ll see how it works.  Post back if you have specific questions.


    Ryan Shuell

    • Edited by

      Sunday, December 30, 2012 5:47 AM

    • Marked as answer by
      Quist Zhang
      Friday, January 4, 2013 7:41 AM

 

Salomon

Пользователь

Сообщений: 8
Регистрация: 13.03.2017

#1

20.03.2017 17:31:19

Добрый день. Есть макрос, позволяющий переносить текст из ячеек excel в вордовский шаблон. Однако, если в ячейку добавить больше 255 символов, то офис ругается и выдает ошибку «Run-time error ‘5854’: Слишком длинный строковый параметр». В инете пишут, что для лечения этой заразы необходимо сделать цикл, что у меня никак не получается. Люди добрые, помогите глупцу понять, как сделать этот самый цикл, ибо уже два дня как онный у меня не получается. Сам код и файлы прикладываю.

Код
Const ИмяФайлаШаблона = "Концепция образец для маркоса.docm"
Const КоличествоОбрабатываемыхСтолбцов = 169
Const РасширениеСоздаваемыхФайлов = ".docx"

Sub СформироватьДоговоры()
    ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
    НоваяПапка = NewFolderName & Application.PathSeparator
    Dim row As Range, pi As New ProgressIndicator
    r = Cells(Rows.Count, "A").End(xlUp).row: rc = r - 2
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub

    pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
    pi.StartNewAction , s1, "Запуск приложения Microsoft Word"

    ' Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
    Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word

    For Each row In ActiveSheet.Rows("3:" & r)
        With row
            ФИО = Trim$(.Cells(3) & " администр. заявление транспорт")
            Filename = НоваяПапка & ФИО & РасширениеСоздаваемыхФайлов

            pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", ФИО
            Set WD = WA.Documents.Add(ПутьШаблона): DoEvents

            pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ФИО
            For i = 1 To КоличествоОбрабатываемыхСтолбцов
                FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))

                ' так почему-то заменяет не всё (не затрагивает таблицу)
                'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True

                pi.line3 = "Заменяется поле " & FindText
                With WD.Range.Find
                    .Text = FindText
                    .Replacement.Text = ReplaceText
                    .Forward = True
                    .Wrap = 1
                    .Format = False: .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                    .Execute Replace:=2
                End With
                DoEvents
            Next i
            pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", ФИО, " "
            WD.SaveAs Filename: WD.Close False: DoEvents
            p = p + a
        End With
    Next row

    pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
    WA.Quit False: pi.Hide
    msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & НоваяПапка
    MsgBox msg, vbInformation, "Готово"
End Sub
=========================
Function NewFolderName() As String
    NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Заявления на восстановление, сформированные " & Get_Now)
    MkDir NewFolderName
End Function

Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function

Изменено: Salomon20.03.2017 17:40:29

 

Salomon

Пользователь

Сообщений: 8
Регистрация: 13.03.2017

Файлы

Прикрепленные файлы

  • уууу.zip (63.12 КБ)

 

Борис13

Пользователь

Сообщений: 81
Регистрация: 18.10.2018

Как то удалось в итоге решить данную проблему? у самого такой же вопрос.

 

Борис13

Пользователь

Сообщений: 81
Регистрация: 18.10.2018

#4

20.11.2020 13:14:59

Самостоятельно решил данный вопрос. Может быть кому будет полезно:    

Код
Dim FindText As String ' что ищем
    Dim ReplaceText As String ' на что меняем
    Dim PathTemp As String ' путь к шаблону документа
    Dim WA As Object
    Dim WD As Object
    
    Set WA = CreateObject("Word.Application")
    Set WD = WA.Documents.Add(PathTemp) ' на основании шаблона (передаем полный путь к нему)создаем новый документ Word.
' код по замене значений
metka1:
    With WD.Range.Find
        .Text = FindText
        If Len(ReplaceText) > 255 Then 'поскольку Find.ReplaceText не может принимать строку больше 255 символов,
'           пришлось в "цикле" подставлять строку по кусочкам, каждый раз добавляя в нее FindText,
'           чтобы в дальнейшем не потерять место, куда вставляем "хвостик" длинной строки
            .Replacement.Text = Left(ReplaceText, 255 - Len(FindText)) & FindText
            ReplaceText = Right(ReplaceText, Len(ReplaceText) - (255 - Len(FindText)))
            .Forward = True
            .Wrap = 1
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute Replace:=2
            GoTo metka1
        Else
            .Replacement.Text = ReplaceText 'текст на который меняем
        End If
        .Forward = True
        .Wrap = 1
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute Replace:=2
    End With

Изменено: Борис1320.11.2020 13:15:24

 

Тимофеев

Пользователь

Сообщений: 1319
Регистрация: 01.09.2020

#5

20.11.2020 13:52:57

Борис13,. а можете файлик архив правильный скинуть сюда

  • Home
  • Forum
  • VBA Code & Other Help
  • Word Help
  • ComboBox «ERROR 5854 — String Parameter too long»

  1. 08-09-2015, 09:36 AM


    #1

    ComboBox «ERROR 5854 — String Parameter too long»

    Hi VBA Enthusiasts

    I am a novice with ok instincts, but truthfully, I really am flying by the seat of my pants on this work project. So, the project requires the execution of a macro that populates various content into the body of a letter. In some cases, this content must contain drop downs (ComboBoxes).

    The problem I’m having is that I’ve built the code very basically as follows:


    Sub combobox2()

    ‘ Combobox Macro Example
    ‘ The following code yields the «ERROR 5854 — String Parameter too long» message.

    Selection.Range.ContentControls.Add (wdContentControlComboBox)
    Selection.ParentContentControl.DropdownListEntries.Clear
    Selection.ParentContentControl.DropdownListEntries.Add Text:= _
    «Choose an item.», Value:=»»
    Selection.ParentContentControl.DropdownListEntries.Add Text:= _
    «The $XXX.XX fee listed on the billing statement was a broker’s price opinion, which is a market evaluation of the property. They are used to get an approximate value of the property and are acceptable per the terms of the Note and/or Mortgage/Deed of Trust.» _
    , Value:= _
    «The $XXX.XX fee listed on the billing statement was a broker’s price opinion, which is a market evaluation of the property. They are used to get an approximate value of the property and are acceptable per the terms of the Note and/or Mortgage/Deed of Trust.»
    End Sub
    This code works well for instances where the desired drop down verbiage is shorter. So, I’m starting to think that the verbiage listed as drop down option is causing the String Parameter to exceed the 255 character limit. (I know that ComboBoxes allow for well over 255 characters when not executed using a macro.)

    Please help me find a workaround for this.

    NOTE that,

    1. I’m working in Word 2010.
    2. I can’t alter the desired verbiage at all.
    3. I must keep all content within the document and the user must not be able to see the drop down options until executing the macro. (Because of how this document will be used, I can’t import from a secondary file like an external excel file.)

    Ideas I’ve had include:

    • If possible, import the drop-down content from an xml file (or schema that’s housed within the word document)
    • Reconstruct the coding about to allow for more than 255 characters (but that’s beyond my scope of VBA understanding)
    • The last resort would be to contact the content creators for the letter and tell them that they have to keep the drop down content below 255 characters. They expressed this concern early on and since I knew that the comboboxes themselves would accommodate, I promised that it shouldn’t be a problem. (It didn’t occur to me that there could be coding string character limitations.)

    Thank you in advance for any input you VBA geniuses could provide

    Steve


  2. 08-09-2015, 01:57 PM


    #2

    Steve,

    I don’t really understand what you are trying to do. Why are you creating the comboboxes with code?

    Regardless, you are not going to get around the string length issue. It is what is and since you text and values are greater than 255 you are SOL there.

    You can map the CCs to an XML part and use the CC events to alter the CC value. I’ve attached a demo document.

    I left out a critical line of code in the attached file. Here is the affected/modified procedure:

    Private Sub Document_ContentControlBeforeContentUpdate(ByVal ContentControl As ContentControl, Content As String)
    Dim oNode As CustomXMLNode
      With ContentControl
        Select Case .Title
          Case "ComboBox_Demo"
            Set m_oXMLPart = ActiveDocument.CustomXMLParts.SelectByNamespace("http://gremaxey.mvps.org/demo").Item(1) 'Add this line
            Set oNode = m_oXMLPart.SelectSingleNode("/ns0:Mapped_ComboBoxes[1]/ns0:ComboBox[1]")
            Select Case .Range.Text
              Case "A"
                  oNode.Text = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" _
                             & "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" _
                             & "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
              Case "B"
                  oNode.Text = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" _
                             & "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" _
                             & "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
          End Select
      End Select
      End With
    lbl_Exit:
      Exit Sub
    End Sub

    Last edited by gmaxey; 08-09-2015 at 02:11 PM.


Tags for this Thread


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
  • BB code is On
  • Smilies are On
  • [IMG] code is On
  • [VIDEO] code is On
  • HTML code is Off

Forum Rules

  1. Jun 20th, 2005, 09:11 PM


    #1

    nandini_net_in is offline

    Thread Starter


    Member


    Question error 5854 String Parameter too Long in VB6

    Hi,
    I need to replace text more than 255 characters in word using word application in VB6. It gives me an error 5854 String parameter too long… Please help….


  2. Jun 21st, 2005, 05:05 AM


    #2

    Re: error 5854 String Parameter too Long in VB6

    find (without replace) and select the text, then input the new string into the selection

    if you want exact code do a search as i put it in 2 posts very recently

    pete


  3. Jun 21st, 2005, 07:34 AM


    #3

    Re: error 5854 String Parameter too Long in VB6

    Pass a pointer to the string instead?

    Is this VBA?


  4. Jun 21st, 2005, 07:54 AM


    #4

    Re: error 5854 String Parameter too Long in VB6

    yes it is vba

    find and replace can only handle 255 characters in the replace string

    pete


  5. Jun 21st, 2005, 08:27 AM


    #5

    Re: error 5854 String Parameter too Long in VB6

    Anything wrong with using the VBA Replace$? I just did a 100,000-char replace in about half a second.


  6. Jun 21st, 2005, 08:45 AM


    #6

    Re: error 5854 String Parameter too Long in VB6

    i am sure there are many ways to do it, but the .find.replacement.text in word 2000 is max lenght of 255 characters on my machine, over that it gives an error, same problem a few others have been having

    VB Code:

    1. With Selection.Find

    2.                           .Text = "mytest"

    3.                           .Replacement.Text = ""

    4.                           .Forward = True

    5.                           .Wrap = wdFindContinue

    6.                           .Execute

    7.                     End With

    8.                     Selection = mytext1 ' where mytext1 can be in excess off 255 characters

    is one way to replace the selection with a longer string

    pete


Ограничение длинны строки

Skorpika

Дата: Четверг, 15.01.2015, 18:41 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 32


Репутация:

0

±

Замечаний:
20% ±


Excel 2003 и 13

Друзья, подскажите. при составлении формы в переменную заносятся данные (это данные на примерно 20 человек, фио, время и место рождения, прописка), и текста там хватает. Вставляется в ворд это всё путём поиска и замены ключевого слова.

[vba]

Код

‘ Вставка в документ полных данных
               With ActiveDocument.Content.Find
               .ClearFormatting
               .Text = «*Otvetchikifull*»
               With .Replacement
               .ClearFormatting
               .Text = AllDataOtvet
               End With
               .Execute Replace:=wdReplaceAll
               End With

[/vba]

Но трабл в том что, программа ругается на «.Text = AllDataOtvet», ибо строковый параметр слишком большой (больше 255 символов ошибка 5854), но разбивать данные тоскливо, использовать текстбокс в активном листе проблематично.
Как это счастье обойти?

Поможет ли буфер обмена?

Сообщение отредактировал SkorpikaЧетверг, 15.01.2015, 20:21

 

Ответить

Gustav

Дата: Пятница, 16.01.2015, 10:17 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 2305


Репутация:

919

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1


Определенно поможет! Алгоритм такой. Перед поиском и заменой загоняем заменяющий текст в буфер обмена и далее в качестве Replacement.Text прописываем специальное двухсимвольное значение ^c ( http://gregmaxey.mvps.org/word_tip_pages/find_replace_long_string.html )
[vba]

Код

Sub io()
      Dim rText As String
      Dim i As Integer
      Dim AllDataOtvet As String

              rText = «НАЧАЛО »
      For i = 1 To 5
          rText = rText & «Специально подготовленный фрагмент текста замены из нескольких строк общей длиной более 255 символов »
      Next i
      rText = rText & «КОНЕЦ»

              Call SetClipboardText(rText)
      AllDataOtvet = «^c» ‘ = Left(rText, 255)

              With ActiveDocument.Content.Find
          .ClearFormatting
          .Text = «*Otvetchikifull*»
          With .Replacement
              .ClearFormatting
              .Text = AllDataOtvet
          End With
          .Execute Replace:=wdReplaceAll
      End With
End Sub

Sub SetClipboardText(ByVal txt$) ‘ запись в буфер обмена
      ‘(c) заимствовано из http://excelvba.ru/code/clipboard
      With GetObject(«New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}»)
           .SetText txt$
           .PutInClipboard
       End With
   End Sub

[/vba]


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал GustavПятница, 16.01.2015, 10:31

 

Ответить

Skorpika

Дата: Пятница, 16.01.2015, 21:15 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 32


Репутация:

0

±

Замечаний:
20% ±


Excel 2003 и 13

Gustav, Спс
Может я не до конца правильно всё объяснил, но твой ответ в конечном ответе принес результат. ВБ по итогу ругалась на некоторые строки, но помогло всего лишь их удаление, по итогу получился вот такой код, правильный, неправильный, но работает (переменная олдатаответ содержащая любое число символов теперь спокойно заменяет ключевое слово)
[vba]

Код

‘Запись в буфер обмена

             With GetObject(«New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}»)
                 .SetText AllDataOtvet
                 .PutInClipboard
             End With

     AllDataOtvet = «^c» ‘ = Left(rText, 255)

               With ActiveDocument.Content.Find
         .ClearFormatting
         .Text = «*Otvetchikifull*»
         With .Replacement
             .ClearFormatting
             .Text = AllDataOtvet
         End With
         .Execute Replace:=wdReplaceAll
     End With

[/vba]

Спасибо

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Vba error 430
  • Vba custom error
  • Vba compile error variable not defined
  • Vba compile error in hidden module
  • Vba compile error expected identifier