На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Организуем VBA-FAQ! Если у Вас есть предложения, выскажитесь здесь: Пишем FAQ, интересно Ваше мнение
Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки

1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость - сестра таланта.
3. Не забывайте использовать теги [сode=vba] ...текст программы... [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
Модераторы: Old Bat, MIF
  
> Word: Переход на строку вниз?
    Есть необходимость от найденного в "Вордовском" тексте символа спуститься на строку ниже и вставить содержимое TextBox'а

    Пытался делать так (спускаться):

    ExpandedWrap disabled
      Dim a as String * 10
       
      a = TextBox1.Text
       
      Selection.Find.ClearFormatting
      With Selection.Find
      .Text = "#1"
      .Replacement.Text = ""
      .Forward = True
      .Wrap = wdFindContinue
      .Format = False
      .MatchCase = False
      .MatchWholeWord = False
      .MatchWildcards = False
      .MatchSoundsLike = False
      .MatchAllWordForms = False
      End With
      Selection.Find.Execute
      Selection.MoveDown Unit:=wdLine, Count:=1
      Selection.Text = a



    Это не работает . Вставляется в зависимости от положения курсора в Word'е.
    Надо чтобы начало нижней строки (на которую пререхожу) должно быть четко под началом найденных символов
    Сообщение отредактировано: bi-lya -
      Я так понял строкой ниже может быть всё что угодно: более короткая строка, более длинная, вообще пусто....

      Тут макрос должен "думать", как-то примерно так наверное:
      ExpandedWrap disabled
        Sub add_text (find_text as string, textbox As String)
        Dim line As Long
        Dim x As Double
         
        With Selection
         
        .Find.Execute find_text
        .MoveLeft
         
        'запоминаем строку
        line = .Information(wdFirstCharacterLineNumber)
        'запоминаем расстояние в мм от левого края до курсора
        x = .Information(wdHorizontalPositionRelativeToPage)
        'пытаемся двигаться вниз
        .MoveDown
        If line = .Information(wdFirstCharacterLineNumber) Then
            'не сдвинулись - пусто внизу
            'добавляем строку
            .EndKey
            .TypeParagraph
            'табуляция
            .ParagraphFormat.TabStops.Add x
            .TypeText Text:=vbTab + textbox
        Else
            'удалось сдвинуться, внизу есть строка
            If Abs(x - .Information(wdHorizontalPositionRelativeToPage)) < 4 Then '4 - примерно половина ширины самого широкого символа ("ж") 12 шрифтом (вообще тута надо-б наверное что-то получше придумать)
                'примерно попали под символ (ширина символов разная, длины в мм точно совпадать не должны я думаю)
                'внизу более длинная строка
                .TypeText Text:=textbox
            Else
                'более короткая, и тогда мы уже в её конце
                'добавляем метку табуляции
                .ParagraphFormat.TabStops.Add x
                .TypeText Text:=vbTab + textbox
            End If
        End If
         
        End With
         
        End Sub
      (100% что учтённые в процедуре 3 варианта не охватывают всех возможных случаев :ph34r: )

      Осталось поместить курсор в начало и вызвать
      ExpandedWrap disabled
        add_text "#1", TextBox1.Text
      Сообщение отредактировано: SV() -
        Цитата SV() @
        Я так понял строкой ниже может быть всё что угодно: более короткая строка, более длинная, вообще пусто....

        Точнее - в определенный участок строки ниже строки с найденным символом должно вставляться некоторое количество символов. Короче, это программка для вставки обоснований в смету. Если интересно, приведу кусок текста

        8 #1 Светильники с люминисцентным 6.000 372.59 2236 ....
        и лампами для общественных п шт. --------- ---------
        омещений, потолочный с рассе ....
        ивателем цельным из оргстекл
        9 #1 Щитки распределительные встр 1.000 1623.40 1623 ....
        аиваемые УОЩВ-6 с автоматиче шт. --------- --------- ....
        скими выключателями ....

        Мне нужно вставить вместо #1 14 символов, под #1 14 символов, можно бы использовать еще одну строку. Саму програмку я вообще-то уже сделал, но в 14 символов много не вкатаешь, сметчицы просят еще добавить
        Да... Посмотрел в предпросмотре, все "лишние" пробелы удалились.... Но смысл, наверное, понятен. Смета состоит из "столбцов" (без ячеек и знаков табуляции), первый столбец (где "8 #1")где-то 22 символа, второй - 30 и т.п
          По моему здесь явно нужен Excel, а не Word :blink:
            Цитата SV() @
            По моему здесь явно нужен Excel, а не Word :blink:

            Согласен. Но это выдают сметные программы - Барс в частности, поэтому приходиться приспосабливаться. Ваш вариант еще не пробовал, пытался передвижением влево MoveLeft'ом на следующую строку перебраться от найденного символа - то же :no: - не разобрался, как можно одновременно с заменой найденного символа вставить данные из другого TextBox'а перескакивая (не затирая) существующих символов в других "столбцах"
              Цитата bi-lya @
              приходиться приспосабливаться
              Ни в коем случае! >:(

              Легче потратить день, два и написать конвертер из формата Барс в Excel и обратно, и забыть о проблеме, работая в Excel’e, чем каждый раз городить огород при возникновении любых, даже самых простых задач (в итоге потеряете гораздо больше времени).

              З.Ы. Глядя на приведенный пример записи мне вообще кажется, что написанный за пару часиков простенький макрос в Excel, который откроет там файл, и перегруппирует ячейки и будет конвертор. :yes:
                Легче потратить день, два и написать конвертер из формата Барс в Excel и обратно
                ... написанный за пару часиков простенький макрос в Excel...
                Конвертер - для меня это недостижимо ;)
                А про макрос в экселе - не думаю, что там будет проще разобраться для меня - как я говорил, табуляции нет, поэтому даже не представляю, как можно это сделать
                Я сейчас пытаюсь разобраться с Range - сначала нахожу заданную группу символов с подстановочными знаками, потом область выделенния (естественно без текста) пытаюсь переместить на строку ниже и уже туда вставить нужное. И ничего пока не получается!!! :wall:
                  Ну в общем еще могу добавить, что ваша задача со смешениями сильно нестандартна, и простого решения в word'e не имеет. <_<

                  В любом случае удачи! ;)
                    Должен с удовлетворением заявить, что все получилось. Использовал метод Range.Move & wdCharakter & Left c Right'ом. Спасибо всем принявшим участие!!! :lool:
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0685 ]   [ 15 queries used ]   [ Generated: 4.07.25, 18:24 GMT ]