Чтение из Txt файла

Тема в разделе "Visual Basic", создана пользователем Hryv, 21 авг 2008.

Статус темы:
Закрыта.
  1. Hryv

    Hryv Гость

    Помогите, плиз, кому не трудно
    Я, в принципе программировать умею, но с VB практически не сталкивался
    А тут понадобился макрос для EXCEL
    Вот упрощенная формулировака задачи (имея пример, я сам доделаю)

    1. Надо открыть файл по фиксированному пути (например C:\путь\файл.txt)
    2. Этот текстовый файл содержит 2 строки, в каждой строке число в формате nn...n.nn
    3. Эти числа надо записать в открытый в EXCEL файл в заранее известные ячейки
    Например: Лист1!A1 и Лист2!B2
    4. Закрыть файл

    Спасибо
     
  2. Gamlet

    Gamlet Well-Known Member

    Регистрация:
    8 янв 2007
    Сообщения:
    609
    Симпатии:
    0
    http://www.vbnet.ru/samples/download.aspx?id=726 - открытие файлов, в вба так же. Как залить в эксель ячейку, не знаю.
    чтоб числа были- при чтении открывай переменной типа стринг, потом сравняй лонг переменную с ней.
    Вроде заливать в ячейки так: Лист1.a1="тект", может что то путаю.
     
  3. Tanya

    Tanya Гость

    Код (Text):
    ' Первый параметр - имя файла
    ' Следующие - (неважно сколько, от 1) адреса ячеек
    Sub nn(fName As String, ParamArray arrCells())
    Dim s As String
    Dim arrLines() As String
    Dim iEnd As Integer
    Dim i As Integer

    'arrCells - адреса ячеек, куда будем вставлять
    'определяем верхнюю границу массива переданных адресов
    iEnd = UBound(arrCells)

    ' если нет адресов - так что тут делать ))) молча уходим
    If iEnd = -1 Then Exit Sub

    If Len(Dir$(fName)) > 0 Then
    ' заполняем буфер пробелами по размеру файла
    s = Space(FileLen(fName))

    ' открываем и читаем файл
    Open "e:\1.txt" For Binary As #1
    Get #1, , s

    Close #1

    If Len(s) Then
    ' если в файле что-то было разбиваем его на массив строк
    arrLines = Split(s, vbCrLf)

    ' определяем соответствие количества строк и количества переданных адресов
    If iEnd > UBound(arrLines) Then iEnd = UBound(arrLines)
    For i = 0 To iEnd
    ' и по адресам записываем значения
    ' без проверок число или нет записано - что есть то и пишем
    Range(arrCells(i)).Value = arrLines(i)
    Next i
    Else
    MsgBox "Нет данных!"
    End If
    Else
    MsgBox "Нет данных!"
    End If

    End Sub

    Sub kk()
    ' проверочный макрос
    'Call nn("e:\1.txt", "Лист1!A1", "Лист2!B2")
    Call nn("e:\1.txt")
    End Sub
    Проверочный макрос лучше все же так делать:
    Код (Text):
    Sub kk()
    ' проверочный макрос
    Call nn("e:\1.txt", "Лист1!A1", "Лист2!B2")
    End Sub
     
  4. Gamlet

    Gamlet Well-Known Member

    Регистрация:
    8 янв 2007
    Сообщения:
    609
    Симпатии:
    0
    Еще раз убеждаюсь, что мое место должна занять Tanya.
     
  5. Hryv

    Hryv Гость

    Tanya, спасибо
    Все работает

    Была небольшая неточность, открывался файл не из параметра а из строки Open "e:\1.txt" For Binary As #1
    но я еще до запуска заметил и подправил

    Отдельное спасибо, за то что очень универсально сделано
    Мне осталось сделать только нужное количество вызовов nn() с нужными параметрами и моя задача полностью решена :)
     
  6. Tanya

    Tanya Гость

    Код (Text):
    Была небольшая неточность, открывался файл не из параметра а из строки Open "e:\1.txt" For Binary As #1
    но я еще до запуска заметил и подправил
    О! Да! Вот так всегда, стараешься, стараешься и где-нибудь закрадется неточность ...
    Вроде мелочь, а осадок остается )))
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей