Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2009, 09:24   #1
Kuchum-83
 
Регистрация: 28.07.2008
Сообщений: 4
По умолчанию Помогите пожалуста написать макрос

Мне нужно написать макрос который бы брал слова из документа .txt и составлял бы таблицу в Excel. Препод показал как сделать на примере одного слова, но я всеравно не понимаю. Хелп плиз.
Kuchum-83 вне форума Ответить с цитированием
Старый 19.04.2009, 11:54   #2
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

ну можно так:
Код:
 
  Dim File As String, CF As String  'объявим пеpеменнyю для имени файла и его cодеpжимого
   Dim i

   File = "c:\test.txt"   'ycтановим имя файла и пyть
   
   Open File For Binary As #1   'откpоем файл для чтения
      CF = Input(FileLen(File), 1)      'загpyзить в пеpеменyю CF вcе cодеpжимое файла
   Close #1   'закpыть файл


Dim Word() As String  ' объявим пеpеменнyю для массива слов

Word = Split(CF, " ") 'разобьём файл на слова

For i = 0 To UBound(Word) '  в цикле занесём слова в ячейки

Лист1.Cells(1, i + 1) = Word(i)

Next i
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru

Последний раз редактировалось alex77755; 19.04.2009 в 11:57.
alex77755 вне форума Ответить с цитированием
Старый 19.04.2009, 14:06   #3
Kuchum-83
 
Регистрация: 28.07.2008
Сообщений: 4
По умолчанию

Спасибо за ответ. Попробовал по вашему, но ничего не получилось.
Препод для примера написал макрос для одного слова:

Sub t()

Dim str As String

Open "C:\test.txt" For Input As #1

Do While Not EOF(1)
Line Input #1, str
Loop

Close #1

Application.ActiveSheet.Cells(2, 5) = str

End Sub

Вот эта штука добавляет одно слово в Excel, а надо чтобы несколько.
Kuchum-83 вне форума Ответить с цитированием
Старый 19.04.2009, 14:24   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Попробуйте так:

Код:
Sub t()
    Dim str As String, i As Long
    Open "C:\Documents and Settings\Игорь\Рабочий стол\Текстовый документ (2).txt" For Input As #1

    i = 2    ' начинаем вывод на лист со второй строки
    Do While Not EOF(1)
        Line Input #1, str    ' читаем строку
        Word = Split(str, " ")    'разобьём строку на слова
        For НомерСлова = LBound(Word) To UBound(Word)
            '  в цикле занесём слова в ячейки
            Cells(i, 5) = Word(НомерСлова)    ' сразу пишем слово в ячейку
            i = i + 1    ' увеличиваем номер строки на единицу
        Next НомерСлова
    Loop

    Close #1
End Sub
Хотя есть нормальные варианты с кодом длиной 2-3 строки.
EducatedFool вне форума Ответить с цитированием
Старый 19.04.2009, 14:29   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Это так, для сравнения:

Код:
Sub НормальныйВариант()
    Filename = "C:\Documents and Settings\Игорь\Рабочий стол\Текстовый документ (2).txt"
    txt = Split(CreateObject("scripting.filesystemobject").OpenTextFile(Filename, 1, True).ReadAll, " ")
    For НомерСлова = LBound(txt) To UBound(txt): Cells(НомерСлова + 2, 5) = txt(НомерСлова): Next НомерСлова
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 19.04.2009, 15:17   #6
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Всё зависит от формата test.txt
у меня пример для test.txt = "Мама мыла раму с мылом"

если
test.txt =
Мама
мыла
раму
с
мылом
то надо либо построчно
Line Input #1, str


либо целиком, но разбивать сначала на предложения, а потом на слова( если файл содержит данные в предложениях.

в твоём случае будет так:
Код:
Dim str As String
dim i
i=2
Open "C:\test.txt" For Input As #1

Do While Not EOF(1)
Line Input #1, str

Application.ActiveSheet.Cells(i, 5) = str
i = i + 1
Loop
Close #1

End Sub
Кто даёт оценку "нормальности"??
Sub НормальныйВариант()
Filename = "C:\Documents and Settings\Игорь\Рабочий стол\Текстовый документ (2).txt"
txt = Split(CreateObject("scripting.files ystemobject").OpenTextFile(Filename , 1, True).ReadAll, " ")
For НомерСлова = LBound(txt) To UBound(txt): Cells(НомерСлова + 2, 5) = txt(НомерСлова): Next НомерСлова
End Sub

Насколько я знаю, что бы использовать данный код, необходимо ещё подключить FSO. а это считается "тяжелой артилерией". А надо ли по воробьям из пушки?. Когда-то меня учили использовать минимальнодопустимые средства для достижения цели.
Но это лично моё мнение
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 19.04.2009, 15:32   #7
Kuchum-83
 
Регистрация: 28.07.2008
Сообщений: 4
По умолчанию

Круто парни, спасибо. Все заработало. Если завтра преподу че не понравится я сразу к Вам.
Kuchum-83 вне форума Ответить с цитированием
Старый 22.04.2009, 13:13   #8
Kuchum-83
 
Регистрация: 28.07.2008
Сообщений: 4
По умолчанию

Парни я вот хотел узнать че за странное слово Loop и для чего оно нужно.
Kuchum-83 вне форума Ответить с цитированием
Старый 22.04.2009, 14:51   #9
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

loop - заключительное слово цикла while

например как next - завершает цикл for
Tirendus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите написать макрос!!! zmax123 Microsoft Office Excel 4 16.03.2009 14:02
Помогите написать макрос Urban Microsoft Office Excel 3 03.03.2009 22:28
Помогите написать макрос для... КотФиларет Microsoft Office Word 15 24.01.2009 23:00
Помогите написать макрос для... КотФиларет Microsoft Office Word 6 23.01.2009 00:35
Помогите написать макрос Neo007 Microsoft Office Excel 4 24.10.2008 07:25