был бы хороший метод если бы совпадали ячейки. А так эксель придумывает какое-то свое количество ячеек ( Возможно из-за встречающихся переносов строки. "Ентеров"
был бы хороший метод если бы совпадали ячейки. А так эксель придумывает какое-то свое количество ячеек ( Возможно из-за встречающихся переносов строки. "Ентеров"koyaanisqatsi
Sub TextAdd() Dim i& With ThisDocument.Tables(2) For i = 2 To .Rows.Count - 2 .Cell(i, 3).Range.InsertAfter vbCr & "Текст в конце ячейки." Next End With End Sub
[/vba]
А если это нужно делать не из Word'а, то после Dim i& добавьте еще 2 строчки:[vba]
Код
Dim ThisDocument As Object Set ThisDocument = CreateObject("Word.Application").Documents.Open("Диск:\Путь\Файл.doc")
[/vba]
[p.s.]Не видел, что в конце 2 строки "Итого" (не листал так далеко ), спасибо Роману (Rioran), подправил.[/p.s.]
проще всего, думаю, так:[vba]
Код
Sub TextAdd() Dim i& With ThisDocument.Tables(2) For i = 2 To .Rows.Count - 2 .Cell(i, 3).Range.InsertAfter vbCr & "Текст в конце ячейки." Next End With End Sub
[/vba]
А если это нужно делать не из Word'а, то после Dim i& добавьте еще 2 строчки:[vba]
Код
Dim ThisDocument As Object Set ThisDocument = CreateObject("Word.Application").Documents.Open("Диск:\Путь\Файл.doc")
[/vba]
[p.s.]Не видел, что в конце 2 строки "Итого" (не листал так далеко ), спасибо Роману (Rioran), подправил.[/p.s.]KSV
Предлагаю подумать в этом направлении. Обратите внимание, нужная вам таблица в этом документе носит номер 2, поэтому Tables(2). Счётчик бежит от 2-й строки до последней минус 2, т.к. там заголовки и итоги.
[vba]
Код
Sub Rio_Adds_to_Table() Dim i& With ActiveDocument.Tables(2) For i = 2 To .Rows.Count - 2 .Cell(i, 3).Range.Text = .Cell(i, 3).Range.Text & " Rioran!" Next i End With End Sub
[/vba] *** UPD: Вставка от KSV выглядит производительнее моей, ещё учесть 2 строки "Итого" - и будет ближе к идеалу =)
UPD: Раннее связывание в Эксель документе будет производительнее, чем позднее. Для этого стоит в VBA редакторе Excel через Tools => References добавить Microsoft Word XX.0 Object Library и переписать строку объявления переменной:
[vba]
Код
Dim ThisDocument As Word.Application
[/vba] UPD: Сергей, наши с тобой коды делают перенос строки при добавлении =) Если бы не пятница, я бы попробовал убрать этот эффект =)
UPD: Сергей, не сразу заметил, что если в твоём коде убрать "vbCr &" - то переноса не будет.
koyaanisqatsi, здравствуйте.
Предлагаю подумать в этом направлении. Обратите внимание, нужная вам таблица в этом документе носит номер 2, поэтому Tables(2). Счётчик бежит от 2-й строки до последней минус 2, т.к. там заголовки и итоги.
[vba]
Код
Sub Rio_Adds_to_Table() Dim i& With ActiveDocument.Tables(2) For i = 2 To .Rows.Count - 2 .Cell(i, 3).Range.Text = .Cell(i, 3).Range.Text & " Rioran!" Next i End With End Sub
[/vba] *** UPD: Вставка от KSV выглядит производительнее моей, ещё учесть 2 строки "Итого" - и будет ближе к идеалу =)
UPD: Раннее связывание в Эксель документе будет производительнее, чем позднее. Для этого стоит в VBA редакторе Excel через Tools => References добавить Microsoft Word XX.0 Object Library и переписать строку объявления переменной:
[vba]
Код
Dim ThisDocument As Word.Application
[/vba] UPD: Сергей, наши с тобой коды делают перенос строки при добавлении =) Если бы не пятница, я бы попробовал убрать этот эффект =)
UPD: Сергей, не сразу заметил, что если в твоём коде убрать "vbCr &" - то переноса не будет.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Сообщение отредактировал Rioran - Пятница, 17.07.2015, 19:47
Роман, с ранним связыванием, нужно чтобы на всех компах, где будет использоваться этот документ (с макросом), была установлена та же версия офиса, ссылка на которую была добавлена через Tools => References, а это не всегда приемлемо, поэтому лучше пожертвовать лишние "полсекунды", но решение будет более универсальным.
Роман, с ранним связыванием, нужно чтобы на всех компах, где будет использоваться этот документ (с макросом), была установлена та же версия офиса, ссылка на которую была добавлена через Tools => References, а это не всегда приемлемо, поэтому лучше пожертвовать лишние "полсекунды", но решение будет более универсальным.KSV
лучше пожертвовать лишние "полсекунды", но решение будет более универсальным.
Сергей, ты прав. Сначала подумал - в чём вопрос? Просто добавить в Excel самую раннюю библиотеку Word - 11.0 например - чтобы на 2003 вордах работало, но... Оказывается, в поздних версиях Excel её нет в свободном доступе для добавления в References. Во всяком случае, в своём 2013 Excel я ссылки моложе 15.0 не нашёл.
лучше пожертвовать лишние "полсекунды", но решение будет более универсальным.
Сергей, ты прав. Сначала подумал - в чём вопрос? Просто добавить в Excel самую раннюю библиотеку Word - 11.0 например - чтобы на 2003 вордах работало, но... Оказывается, в поздних версиях Excel её нет в свободном доступе для добавления в References. Во всяком случае, в своём 2013 Excel я ссылки моложе 15.0 не нашёл.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Хм. Прям ГИК вечеринка образовалась )))) Вот и поговорили ))))
Думал будет какоето простое решение. Типа на подобии как в фаре или эсидиси переименовывать файлы ставишь какойто супер символ с чего менять и потом такой же супер символ и после него что добавить. и получаются новые файлы уже со старым именем + добавочка.
А можно тогда этот макрос переделать не под номерной столбец а под выделенный фрагмент ?
Хм. Прям ГИК вечеринка образовалась )))) Вот и поговорили ))))
Думал будет какоето простое решение. Типа на подобии как в фаре или эсидиси переименовывать файлы ставишь какойто супер символ с чего менять и потом такой же супер символ и после него что добавить. и получаются новые файлы уже со старым именем + добавочка.
А можно тогда этот макрос переделать не под номерной столбец а под выделенный фрагмент ?
Т.е., добавлять текст нужно не во всех ячейках столбца, а только в выделенных? Тогда, так:[vba]
Код
Sub TextAdd() Dim c As Cell For Each c In Selection.Cells c.Range.InsertAfter vbCr & "Текст в конце ячейки." ' так – добавляет отдельной строкой (для наглядности) 'c.Range.InsertAfter " Текст в конце ячейки." ' а так – добавляет в конец последнего абзаца (через пробел) Next End Sub
[/vba] (можно выделить ячейки сразу в нескольких столбцах и строках)
А можно тогда этот макрос переделать не под номерной столбец а под выделенный фрагмент ?
Т.е., добавлять текст нужно не во всех ячейках столбца, а только в выделенных? Тогда, так:[vba]
Код
Sub TextAdd() Dim c As Cell For Each c In Selection.Cells c.Range.InsertAfter vbCr & "Текст в конце ячейки." ' так – добавляет отдельной строкой (для наглядности) 'c.Range.InsertAfter " Текст в конце ячейки." ' а так – добавляет в конец последнего абзаца (через пробел) Next End Sub
[/vba] (можно выделить ячейки сразу в нескольких столбцах и строках)KSV
Сегодня вроде решил (чтоб без vba): 1. Выделяем в ворде столбец, без лишних ячеек. 2. Удаляем "^p" или заменям его на "разрыв строки" в выделенном через поиск и замена 3. Не снимая выделения, заменяем "разрыв строки" на && (или нечто подобное) 4. Копируем в эксель, и о чудо - ячейки не размножаются дальше как в посте 2 ~Последний пункт: меняем && на разрыв строки
Вчера звёзды не сошлись
Сегодня вроде решил (чтоб без vba): 1. Выделяем в ворде столбец, без лишних ячеек. 2. Удаляем "^p" или заменям его на "разрыв строки" в выделенном через поиск и замена 3. Не снимая выделения, заменяем "разрыв строки" на && (или нечто подобное) 4. Копируем в эксель, и о чудо - ячейки не размножаются дальше как в посте 2 ~Последний пункт: меняем && на разрыв строкиUdik
Вчера вставляли руками. Тратя много времени от откладывая уход с роботы до необозримого будущего (ну в 22:30 в итоге закончили.) А в следующий раз если пригодится можно будет уже вооружится чем-то из этой темы. Огромное спасибо !
Спасибо всем большое.
Вчера вставляли руками. Тратя много времени от откладывая уход с роботы до необозримого будущего (ну в 22:30 в итоге закончили.) А в следующий раз если пригодится можно будет уже вооружится чем-то из этой темы. Огромное спасибо !koyaanisqatsi
[offtop]Udik, ну, не знаю... Даже само кол-во действий уже "напрягает" , не говоря уже о времени, потраченном на эти действия. И это только для того, чтобы "без VBA". СтОит оно того? Мне кажется, что пара секунд, потраченная на то, чтобы открыть документ, выделить нужный фрагмент таблицы, нажать Alt+F11, вставить код макроса, нажать F5 и удалить код макроса, делают вариант "с VBA" гораздо привлекательней. И не нужно никаких сторонних программ (Excel) и никаких преобразований туда-обратно. Ну, это на мой взгляд...[/offtop]
[offtop]Udik, ну, не знаю... Даже само кол-во действий уже "напрягает" , не говоря уже о времени, потраченном на эти действия. И это только для того, чтобы "без VBA". СтОит оно того? Мне кажется, что пара секунд, потраченная на то, чтобы открыть документ, выделить нужный фрагмент таблицы, нажать Alt+F11, вставить код макроса, нажать F5 и удалить код макроса, делают вариант "с VBA" гораздо привлекательней. И не нужно никаких сторонних программ (Excel) и никаких преобразований туда-обратно. Ну, это на мой взгляд...[/offtop]KSV
KSV, да я не против вба. я просто в ворде еще ниразу не пробовал. Наверно получится ) В принцепе то тема уже думаю самодостаточная. Есть скорее всего полные варианты решания таких проблем разными способами. Наверняка не составит труда и вба запустить.
KSV, да я не против вба. я просто в ворде еще ниразу не пробовал. Наверно получится ) В принцепе то тема уже думаю самодостаточная. Есть скорее всего полные варианты решания таких проблем разными способами. Наверняка не составит труда и вба запустить.koyaanisqatsi
А можно так чтобы при запуске макроса он спрашивал какое слово вставлять ? я то и так справился бы как тут есть но если девченкам давать этот вариант для работы им то по вба ползать наверно не айс )
А можно так чтобы при запуске макроса он спрашивал какое слово вставлять ? я то и так справился бы как тут есть но если девченкам давать этот вариант для работы им то по вба ползать наверно не айс )koyaanisqatsi
Sub TextAdd() Dim s$, c As Cell s = InputBox("Введите текст, который нужно добавить", "Добавление текста", "Чтобы не вводить каждый раз") If Len(s) = 0 Then Exit Sub ' если нажали "Отмена" For Each c In Selection.Cells c.Range.InsertAfter vbCr & "Текст в конце ячейки." ' так – добавляет отдельной строкой (для наглядности) 'c.Range.InsertAfter " Текст в конце ячейки." ' а так – добавляет в конец последнего абзаца (через пробел) Next End Sub
[/vba]
[vba]
Код
Sub TextAdd() Dim s$, c As Cell s = InputBox("Введите текст, который нужно добавить", "Добавление текста", "Чтобы не вводить каждый раз") If Len(s) = 0 Then Exit Sub ' если нажали "Отмена" For Each c In Selection.Cells c.Range.InsertAfter vbCr & "Текст в конце ячейки." ' так – добавляет отдельной строкой (для наглядности) 'c.Range.InsertAfter " Текст в конце ячейки." ' а так – добавляет в конец последнего абзаца (через пробел) Next End Sub
То что ввел в появившеяся окошко никуда не попало. Но то что в коде прописано " c.Range.InsertAfter vbCr & "Текст в конце ячейки." " Вставилось без проблем.
KSV, Проверил макрос. ( Не сработал.
То что ввел в появившеяся окошко никуда не попало. Но то что в коде прописано " c.Range.InsertAfter vbCr & "Текст в конце ячейки." " Вставилось без проблем.koyaanisqatsi
Sub TextAdd() Dim s$, c As Cell s = InputBox("Введите текст, который нужно добавить", "Добавление текста", "Чтобы не вводить каждый раз") If Len(s) = 0 Then Exit Sub ' если нажали "Отмена" For Each c In Selection.Cells c.Range.InsertAfter vbCr & s ' так – добавляет отдельной строкой (для наглядности) 'c.Range.InsertAfter s ' а так – добавляет в конец последнего абзаца (через пробел) Next End Sub
[/vba]
Блин, конечно, косяк! Надо вот так: [vba]
Код
Sub TextAdd() Dim s$, c As Cell s = InputBox("Введите текст, который нужно добавить", "Добавление текста", "Чтобы не вводить каждый раз") If Len(s) = 0 Then Exit Sub ' если нажали "Отмена" For Each c In Selection.Cells c.Range.InsertAfter vbCr & s ' так – добавляет отдельной строкой (для наглядности) 'c.Range.InsertAfter s ' а так – добавляет в конец последнего абзаца (через пробел) Next End Sub