Вопрос: Как перенести из Word-а в Excel с помощью VBA кое- | Добавлено: 24.04.08 14:04 |
Автор вопроса: ![]() |
Господа, добрый день!
Помогите решить задачку. Есть документ в ворде (диссертация), в тексте этого документа полно ссылок на источники литературы. Ссылка выглядит так: [какое-то число]. "Какое-то число" - это число от 1 до 999. Какие-то числа пропущены.. Нужно написать програмку, которая пробежится по тексту, соберет все "какие-то числа" и кинет их в столбик в эксель или в текстовый файл.. Как это сделать? Только, пожалуйста, не пишите логику работы программы - она ясна. У меня проблема со знанием операторов VBA, забились за давностью.. Спасибо |
Ответы | Всего ответов: 17 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 276 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 24.04.08 14:28 |
Просто пробежать по всем элементам коллекции ThisDocument.Characters и собрать в массив всё содержимое квадратных скобок. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #2 | Добавлено: 24.04.08 15:14 |
Спасибо. Но.. это Вам просто, не мне. Я не знаю? как собрать в массив все значения в квадратных скобках.. не знаю как потом из получившегося массива вставить значения в excel.. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 24.04.08 16:23 |
Почти закончил.
Текст документа в Word 2003: Qasdfko ajsdg kljasdg [345] wery lkjwsdgl kjsdfgsdfgh. Длордлордло [998]. Цукжплоывап цукпрждлоц. Ывапмдлоысмрирц цукпвыа [556]. Цкупдлоыврадплор [867] ывпдлоывапр всмиздшщгуц. Ывапдюлывап ывапдлоыврап ывапрдлыова. [777] цыдплорывап цупдлорывап вапо. Ывапдлоывапдол ывапждлоывап в [555]. [1] sdflgkjsdhfg – фывпдлофрывпдор фывпдлофырвап ывапываорывтфь. [12] ывадпрлщор – фывпдлофрывпдор фывпдлофырвап ывапываорывтфь. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 24.04.08 16:24 |
Sub Макрос1()
' 24.04.2008 Макрос написал Adam Smith Dim tmpLng As Long Dim tmpInt As Integer Dim tmpStr As String With ThisDocument For tmpLng = 1 To .Words.Count - 1 If .Words(tmpLng).Text = "[" Then tmpStr = tmpStr & .Words(tmpLng + 1).Text & vbCrLf Next MsgBox "Результаты поиска:" & vbCrLf & vbCrLf & tmpStr, vbInformation, vbOKOnly End With End Sub |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 24.04.08 16:26 |
Книгу в Эксель новую будеш создавать или использовать уже существующую? |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 276 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 24.04.08 16:30 |
Не советовал бы через слова — могут отсутствовать пробелы по ошибке. Если нет в тексте чистых цифр в скобках, то более правильно разобрать текст по символам. Заодно и на цифры проконтролтровать. |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 24.04.08 16:35 |
Мысль правильная, только работать будет на порядок медленнее. Я просто подумал если человек диссертацию пишет то элементарные ошибки в тексте наверное исправил. Пишу как проще ![]() |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 24.04.08 16:37 |
Корпорация чё молчиш? Макрос в документ вписать сможеш? Оперативнее ато мне бежать скоро. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 24.04.08 17:04 |
Вот те.
Sub Макрос1() ' 24.04.2008 Макрос написал Adam Smith ' код не оптимизирован притензии не принимаются ![]() Dim tmpLng As Long Dim tmpStr As String With ThisDocument For tmpLng = 1 To .Words.Count - 1 If .Words(tmpLng).Text = "[" Then tmpStr = tmpStr & .Words(tmpLng + 1).Text & vbCrLf Next End With 'MsgBox "Результаты поиска:" & vbCrLf & vbCrLf & tmpStr, vbInformation, vbOKOnly Dim ObjectExcel As Object Dim tmpArr() As String Dim tmpInt As Integer tmpArr = Split(tmpStr, vbCrLf) Set ObjectExcel = CreateObject("Excel.Application" ![]() ObjectExcel.Visible = True ObjectExcel.Workbooks.Open FileName:=" ![]() With ObjectExcel.ActiveSheet For tmpInt = 0 To UBound(tmpArr) .Cells(2 + tmpInt, 2).Value = tmpArr(tmpInt) Next End With ObjectExcel.ActiveWorkbook.Close Save ObjectExcel.Quit Set ObjectExcel = Nothing End Sub |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #10 | Добавлено: 24.04.08 17:17 |
Ребята, спасибо Вам огромное!!!
Адам Смит, спасибо! Корпорация..)) |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #11 | Добавлено: 25.04.08 09:44 |
Нормальные люди пишут диссерации в TeX и не мучаются с такими вещами, как список литературы, ссылки и т.п. |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #12 | Добавлено: 25.04.08 10:21 |
Жаль что такой УМИЩЕ направлен на унижение окружающих. |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #13 | Добавлено: 25.04.08 11:08 |
Adam Smith, у меня файл экселя пустой получился.. Я не очень понимаю, что такое words в терминах VB? Ссылки сделаны вот так в тексте: "Слава КПСС [100]". А в Вашем коде слово - это "[". Правильно ли я понимаю, что для корректной работы скрипта нужно, чтобы после "[" шел пробел?
2Sharp: а что такое TeX? "Я как бы это сказать первый раз слышу такое слово" (c) Незнайка на луне Спасибо. |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #14 | Добавлено: 25.04.08 11:46 |
"От оно чё михалыч!"
соберет все "[какие-то числа]" и кинет их в столбик
Вот такбы сразу, надо чтоб в ексель попали не циферки из квард. скоб. а полностью "Слава КПСС [100]", верно? Эт немного другая история. Самому интересно VBA в памяти освежить. Вообще знаеш создай документ Word с парой страничек из диссертации, и чтобы там ссылок побольше ![]() пришли на емайл, я макрос напишу и сюда скину. Words - эт массив слов документа. Качай, учи VBA еси интересно http://rapidshare.de/files/11204069/VBA_for_dummers.rar.html |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #15 | Добавлено: 25.04.08 12:21 |
Adam Smith, извините, если я вас запарил.. Нет, Вы все правильно сначала поняли, нужно именно содержимое квадратных скобок вытащить, т.е., например, есть такой текст:
Добрый день [100] уважаемые участники форума! Есть [очень большая] проблема! Помогите [102, c.100]. Спасибо. В экселевский файл нужно выкинуть в столбик: 100 очень большая 102, с.100 Я запускаю Вашу программу, но файл xls получается пустой. Может быть версия Excel-я 2007, в этом все дело? Еще раз большое спасибо. |
|