Статьи из блога
Разнос данных по строкам и столбцам таблицы
Игорь спрашивает:
Есть ряд слов:
собака кошка мышка кенгуру
цыпленок хомяк мишка птичка.
Как мне их добавить в таблицу, состоящую из 4 столбцов и 2 строк, чтобы каждое слово находилось в отдельной ячейке, не применяя к каждому слову операцию вырезать-вставить. Эти слова у меня так и находятся в столбик по 4 слова в строчку в вордовском документе (так же, как я и написал в примере), а чуть ниже есть таблица пустая, вот туда мне и надо их вставить.
Игорь, попробуйте вот такой макрос (ниже). Выделите ваши слова и запустите макрос:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 |
Если вы не знаете, как подключить к документу и применить эти макросы, изучите следующие заметки с сайта:
Создание макроса из готового кода
Рубрика: Таблицы Word, Макросы, Вопрос-Ответ
Метки: макросы | таблицы
Просмотров: 30048
Подписаться на комментарии по RSS
Версия для печати
Метки: макросы | таблицы
Просмотров: 30048
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 10 вопросов и ответов по редактору Word (1 часть)
- 3 способа очистки списка недавно открытых документов
- Word 2007: добавляем свою вкладку и свои команды
- Word 2007: полотно, рисунки, линии
- Word 2007: смена формата сохранения файла
- Word 97 - решение проблемы с отображением символов на линейке
- Абзац с цветным фоном
- Автоматизация текстового набора в Word
- Автоматическая запись макроса
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Автотекст с последовательной нумерацией
- Белый текст на синем фоне в Word 2007
- Быстрая смена ориентации страниц документа
- Быстрое перемещение между открытыми документами Word
- Быстрое создание нового документа на основе шаблона
- Быстрое удаление границ у таблицы
- Быстрый ввод текста с помощью команды =rand()
- Ввод повторяющихся фрагментов текста в Word 2007
- Ввод часто повторяющихся фрагментов текста
- Вертикальное выравнивание текста
- Возможно ли запретить копирование текста из документа Word?
- Вопрос о работе с графиками (диаграммами) в Word
Комментариев: 14
Странно, зачем заменять знаки абзаца пробелами? Если можно разбивать на слова построчно и сразу же, построчно, добавлять в таблицу. Но на скорую руку пойдет. Хорошая работа.
Только что попробовал стандартную функцию преобразовать в таблицу. Указал 4 столбца и пробел в качестве разделителя. Все сработало.
Да уж, в данном случае применение макроса - это стрельба из пушки по воробьям.
Стандартное: Таблица -> Преобразовать Текст в Таблицу отлично справляется с поставленной задачей!
Небольшая опечатка: оператор For не нужен, т.к. переменная i не используется, индексы прописаны статически.
Возможно еще проще. Выделить-Таблица-вставить.
Вот есть вопросы по word незнаю к кому обратится думаю сюда
1 какой символ ключа предотвращает обновление полей включенных в результат поля
\! или \* или \# или \@
2 Какой символ ключа формирует результаты дата/время в соответствии с указаным шаблоном
\! или \* или \# или \@
3 Для чего предназначены аргументы поля автоматизации
1 Для определения выполняемых функции
2 Для идентификации частей поля
3 Для управления работой поля
4 Для использования в других полях
4 Над полем типа - допустимы операции
1 Дату разделить на дату
2 Дату умножить на число
3 Дату разделить на число
4 К дате прибавить число
Прошу помочь остались только эти вопросы надеюсь на Вас
Добрый день!
Возник следующий вопрос:
Есть, например, три документа Word : 1.doc, 2.doc, 3.doc.
Возможно ли сделать так чтобы в документе 1.doc узнать количество страниц и заголовки из документов 2.doc и 3.doc.
Т.е. из одного документа прочитать даннные в другом документе?
Заранее спасибо за помощь!
Конечно, возможно
Можно поконкретней? Может пример есть как это сделать?
Пишите viter точка alex собака gmail точка com. Желательно с примерами документов
Зачем писать целый маркос для операции, которую можно сделать обычным copy/paste?
Ведь куда проще:
1) Копируем текст в буфер обмена.
2) Создаём пустую таблицу с количеством колонок и строк, равным их количеству (ожидаемому) в скопированном тексте.
3) Выделяем таблицу и вставляем текст из буфера
==> вуа-ля! Таблица готова и никаких заморочек с макросами.
P.S.: Для большого объёма данных можно использовать функцию "Convert text to table", указав "пробел" как разделитель (или другой символ в зависимости от исходного материала).
Писать макрос для данной операции - это всё равно что чесать правой рукой левое ухо.
Сколько скрытых возможностей в Word. Я раньше использовал Таблица - Преобразовать - Текст в таблицу и только сегодня узнал, что есть др. способы.
Kostero, olegko - как вы узнали об этих способах?
А зачем нужен цикл в конце макроса? Зачем 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
А можно еще все необходимые слова, скопировать в Excel и он сам автоматически расставит их в таблицу, потом просто эту таблицу вставить в Word.