Статьи из блога

Разнос данных по строкам и столбцам таблицы

Игорь спрашивает:

Есть ряд слов:

собака кошка мышка кенгуру

цыпленок хомяк мишка птичка.

Как мне их добавить в таблицу, состоящую из 4 столбцов и 2 строк, чтобы каждое слово находилось в отдельной ячейке, не применяя к каждому слову операцию вырезать-вставить. Эти слова у меня так и находятся в столбик по 4 слова в строчку в вордовском документе (так же, как я и написал в примере), а чуть ниже есть таблица пустая, вот туда мне и надо их вставить.

Игорь, попробуйте вот такой макрос (ниже). Выделите ваши слова и запустите макрос:

Sub insertToTable()
Dim sStr1 As String
Dim sStr() As String
Dim rng As Range
Dim oTbl As Table
Dim i As Long
sStr1 = Trim(Replace(Selection.Text, Chr(13), Chr(32)))
Selection.Text = sStr1 & vbCr
Set oTbl = ActiveDocument.Tables(1)
Set rng = Selection.Range
sStr = Split(rng, Chr(32))
For i = 0 To (UBound(sStr) - 1)
   oTbl.Cell(1, 1).Range.Text = sStr(0)
   oTbl.Cell(1, 2).Range.Text = sStr(1)
   oTbl.Cell(1, 3).Range.Text = sStr(2)
   oTbl.Cell(1, 4).Range.Text = sStr(3)
   oTbl.Cell(2, 1).Range.Text = sStr(4)
   oTbl.Cell(2, 2).Range.Text = sStr(5)
   oTbl.Cell(2, 3).Range.Text = sStr(6)
   oTbl.Cell(2, 4).Range.Text = sStr(7)
Next i
End Sub

Если вы не знаете, как подключить к документу и применить эти макросы, изучите следующие заметки с сайта:

Создание макроса из готового кода

Автоматическая запись макроса

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 14

  1. 27.01.2009 в 13:19 | #1

    Странно, зачем заменять знаки абзаца пробелами? Если можно разбивать на слова построчно и сразу же, построчно, добавлять в таблицу. Но на скорую руку пойдет. Хорошая работа.

  2. 27.01.2009 в 13:23 | #2

    Только что попробовал стандартную функцию преобразовать в таблицу. Указал 4 столбца и пробел в качестве разделителя. Все сработало.

  3. Luna
    27.01.2009 в 22:06 | #3

    Да уж, в данном случае применение макроса - это стрельба из пушки по воробьям.

    Стандартное: Таблица -> Преобразовать Текст в Таблицу отлично справляется с поставленной задачей!

  4. Алексей К
    27.01.2009 в 23:26 | #4

    Небольшая опечатка: оператор For не нужен, т.к. переменная i не используется, индексы прописаны статически.

  5. Kostero
    30.01.2009 в 10:00 | #5

    Возможно еще проще. Выделить-Таблица-вставить.

  6. Евгений
    30.01.2009 в 21:44 | #6

    Вот есть вопросы по word незнаю к кому обратится думаю сюда

    1 какой символ ключа предотвращает обновление полей включенных в результат поля

    \! или \* или \# или \@

    2 Какой символ ключа формирует результаты дата/время в соответствии с указаным шаблоном

    \! или \* или \# или \@

    3 Для чего предназначены аргументы поля автоматизации

    1 Для определения выполняемых функции

    2 Для идентификации частей поля

    3 Для управления работой поля

    4 Для использования в других полях

    4 Над полем типа - допустимы операции

    1 Дату разделить на дату

    2 Дату умножить на число

    3 Дату разделить на число

    4 К дате прибавить число

    Прошу помочь остались только эти вопросы надеюсь на Вас

  7. Евгений
    31.01.2009 в 10:11 | #7

    Добрый день!

    Возник следующий вопрос:

    Есть, например, три документа Word : 1.doc, 2.doc, 3.doc.

    Возможно ли сделать так чтобы в документе 1.doc узнать количество страниц и заголовки из документов 2.doc и 3.doc.

    Т.е. из одного документа прочитать даннные в другом документе?

    Заранее спасибо за помощь!

  8. 01.02.2009 в 07:08 | #8

    Добрый день! … из одного документа прочитать даннные в другом документе?
    Заранее спасибо за помощь!

    Конечно, возможно

  9. Евгений
    02.02.2009 в 05:33 | #9

    Конечно, возможно

    Можно поконкретней? Может пример есть как это сделать?

  10. 02.02.2009 в 06:23 | #10

    …Можно поконкретней? Может пример есть как это сделать?

    Пишите viter точка alex собака gmail точка com. Желательно с примерами документов

  11. olegko
    21.04.2009 в 13:05 | #11

    Зачем писать целый маркос для операции, которую можно сделать обычным copy/paste?

    Ведь куда проще:

    1) Копируем текст в буфер обмена.

    2) Создаём пустую таблицу с количеством колонок и строк, равным их количеству (ожидаемому) в скопированном тексте.

    3) Выделяем таблицу и вставляем текст из буфера

    ==> вуа-ля! Таблица готова и никаких заморочек с макросами.

    P.S.: Для большого объёма данных можно использовать функцию "Convert text to table", указав "пробел" как разделитель (или другой символ в зависимости от исходного материала).

    Писать макрос для данной операции - это всё равно что чесать правой рукой левое ухо.

  12. Busine2009
    20.06.2010 в 06:38 | #12

    Сколько скрытых возможностей в Word. Я раньше использовал Таблица - Преобразовать - Текст в таблицу и только сегодня узнал, что есть др. способы.

    Kostero, olegko - как вы узнали об этих способах?

  13. Igor
    17.08.2010 в 18:25 | #13

    А зачем нужен цикл в конце макроса? Зачем 8 раз одно и тоже прописывать в ячейки таблицы:

    For i = 0 To (UBound(sStr) - 1)
    oTbl.Cell(1, 1).Range.Text = sStr(0)
    oTbl.Cell(1, 2).Range.Text = sStr(1)
    oTbl.Cell(1, 3).Range.Text = sStr(2)
    oTbl.Cell(1, 4).Range.Text = sStr(3)
    oTbl.Cell(2, 1).Range.Text = sStr(4)
    oTbl.Cell(2, 2).Range.Text = sStr(5)
    oTbl.Cell(2, 3).Range.Text = sStr(6)
    oTbl.Cell(2, 4).Range.Text = sStr(7)
    Next i

    итератор i в теле цикла не используется. Цикл вообще не нужен, или процедуру лучше переписать так

    Sub insertToTable()
    Dim sStr1 As String
    Dim sStr() As String
    Dim rng As Range
    Dim oTbl As Table
    Dim i As Long
    sStr1 = Trim(Replace(Selection.Text, Chr(13), Chr(32)))
    Selection.Text = sStr1 & vbCr
    Set oTbl = ActiveDocument.Tables(1)
    Set rng = Selection.Range
    sStr = Split(rng, Chr(32))
    i = 0
    For j = 1 To 2 ' количество строк
     For k = 1 To 4 ' количество столбцов
        oTbl.Cell(j, k).Range.Text = sStr(i)
        i = i + 1
        If (UBound(sStr) + 1) = i Then
            Exit For
        End If
        
     Next k
    Next j
    End Sub

  14. Таиса
    09.07.2012 в 10:09 | #14

    А можно еще все необходимые слова, скопировать в Excel и он сам автоматически расставит их в таблицу, потом просто эту таблицу вставить в Word.

Оставьте комментарий!

(обязательно)

^ Наверх