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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2011, 19:23   #31
ntrader
 
Регистрация: 19.06.2011
Сообщений: 9
По умолчанию

Hugo121, а можно ли чтобы новосозданные книги автоматически сохранялись с именем файла, на основании которого была она создана? т.е. есть файл NVDA D.txt и сохраняется книга NVDA D.xls. или групповая обработка/сохранение сразу нескольких файлов. то что, уже открывается несколько книг, просто супер!
ntrader вне форума Ответить с цитированием
Старый 20.06.2011, 20:27   #32
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Можно конечно.
Путь к папке прописан теперь в этой переменной:
pathtofolder = "c:\Temp\ntrader\"
Можно сделать, чтоб путь брался по месту нахождения этого xls файла, или указывать папку в диалоге - подумайте, как удобнее, это легко добавить.
Можно и для сохранения изменить место.

Замените тот код на этот:
Код:
Sub tt()
    Const ForReading = 1
    Application.ScreenUpdating = False
    Dim FSO, WSH
    Dim TheFolder, TheFiles, AFile
    Dim pathtofolder$
    pathtofolder = "c:\Temp\ntrader\"
    Set WSH = CreateObject("WScript.Shell")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set TheFolder = FSO.GetFolder(pathtofolder)    'Каталог с файлами
    Set TheFiles = TheFolder.Files
    For Each AFile In TheFiles
        If UCase(FSO.GetExtensionName(AFile.Path)) = "TXT" Then
            Set objTextFile = FSO.OpenTextFile(AFile, ForReading)
            strText = objTextFile.ReadAll
            objTextFile.Close
            a = Split(strText, vbNewLine)
            ReDim b(1 To UBound(a), 1 To 2)
            For i = 1 To UBound(a)
                b(i, 1) = Split(a(i), vbTab)(0)
                b(i, 2) = Split(a(i), vbTab)(14)
            Next
            Set wb = Workbooks.Add    '# открываем новую книгу Excel
            With wb.Sheets(1)
            .Cells(1, 1) = "Date"
            .Cells(1, 2) = "POCvo"
            .Cells(2, 1).Resize(UBound(b), 2) = b
            .Columns.AutoFit
            End With
            wb.SaveAs Filename:=pathtofolder & Replace(UCase(AFile.Name), ".TXT", "")
            wb.Close 0
        End If
    Next
    Application.ScreenUpdating = True
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 20.06.2011 в 23:20.
Hugo121 вне форума Ответить с цитированием
Старый 20.06.2011, 20:55   #33
ntrader
 
Регистрация: 19.06.2011
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Можно сделать, чтоб путь брался по месту нахождения этого xls файла
Подскажите как это сделать
ntrader вне форума Ответить с цитированием
Старый 20.06.2011, 21:53   #34
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Код:
pathtofolder = ThisWorkbook.Path & "\"
Не забудьте добавить в конце слэш, иначе сгенерит файлы уровнем выше.
В общем, вполне удобный вариант - скопировали файл в паку с текстовыми файлами, открыли, запустили код - готово.

Вообще, вот чуть изменённая версия - теперь заголовки столбцов берутся из текстовых файлов.
В первой версии я их вписывал кодом, т.к. из файлов брал только данные, потому что сливал всё вместе. Так это и осталось...
Но теперь исправлено:
Код:
Sub tt()
    Const ForReading = 1
    Application.ScreenUpdating = False
    Dim FSO
    Dim TheFolder, TheFiles, AFile
    Dim pathtofolder$
    pathtofolder = ThisWorkbook.Path & "\"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set TheFolder = FSO.GetFolder(pathtofolder)    'Каталог с файлами
    Set TheFiles = TheFolder.Files
    For Each AFile In TheFiles
        If UCase(FSO.GetExtensionName(AFile.Path)) = "TXT" Then
            Set objTextFile = FSO.OpenTextFile(AFile, ForReading)
            strText = objTextFile.ReadAll
            objTextFile.Close
            a = Split(strText, vbNewLine)
            ReDim b(0 To UBound(a), 1 To 2)
            For i = 0 To UBound(a)
                b(i, 1) = Split(a(i), vbTab)(0)
                b(i, 2) = Split(a(i), vbTab)(14)
            Next
            Set wb = Workbooks.Add    '# открываем новую книгу Excel
            With wb.Sheets(1)
            .Cells(1, 1).Resize(UBound(b)+1, 2) = b
            .Columns.AutoFit
            End With
            wb.SaveAs Filename:=pathtofolder & Replace(UCase(AFile.Name), ".TXT", "")
            wb.Close 0
        End If
    Next
    Application.ScreenUpdating = True
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 20.06.2011 в 23:33.
Hugo121 вне форума Ответить с цитированием
Старый 20.06.2011, 22:09   #35
ntrader
 
Регистрация: 19.06.2011
Сообщений: 9
По умолчанию

и последнее, как можно удалить строки, где POCvo=0? имею в виду автоматически чтобы удалялись)

Последний раз редактировалось ntrader; 20.06.2011 в 22:40.
ntrader вне форума Ответить с цитированием
Старый 20.06.2011, 23:03   #36
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Точно последнее?
Это, как ни странно, добавить чуть сложнее было...
Эти строки не удаляются - они просто не импортируются.

Код:
Sub tt()
    Const ForReading = 1
    Application.ScreenUpdating = False
    Dim FSO
    Dim TheFolder, TheFiles, AFile
    Dim pathtofolder$
    pathtofolder = ThisWorkbook.Path & "\"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set TheFolder = FSO.GetFolder(pathtofolder)    'Каталог с файлами
    Set TheFiles = TheFolder.Files
    For Each AFile In TheFiles
        If UCase(FSO.GetExtensionName(AFile.Path)) = "TXT" Then
            Set objTextFile = FSO.OpenTextFile(AFile, ForReading)
            strText = objTextFile.ReadAll
            objTextFile.Close
            a = Split(strText, vbNewLine)
            ReDim b(0 To UBound(a), 1 To 2)
            Dim ii&: ii = -1
            For i = 0 To UBound(a)
                If Trim(Split(a(i), vbTab)(14)) <> "0.00" Then
                    ii = ii + 1
                    b(ii, 1) = Split(a(i), vbTab)(0)
                    b(ii, 2) = Split(a(i), vbTab)(14)
                End If
            Next
            Set wb = Workbooks.Add    '# открываем новую книгу Excel
            With wb.Sheets(1)
                .Cells(1, 1).Resize(ii + 1, 2) = b
                .Columns.AutoFit
            End With
            wb.SaveAs Filename:=pathtofolder & Replace(UCase(AFile.Name), ".TXT", "")
            wb.Close 0
        End If
    Next
    Application.ScreenUpdating = True
End Sub
В коде выше, где массивы с нуля начинал, была ошибка при выгрузке - последняя строка не выгружалась. Исправил.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 20.06.2011 в 23:32.
Hugo121 вне форума Ответить с цитированием
Старый 20.06.2011, 23:10   #37
ntrader
 
Регистрация: 19.06.2011
Сообщений: 9
По умолчанию

Да, это последнее. Точно)
ntrader вне форума Ответить с цитированием
Старый 20.06.2011, 23:34   #38
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Я ещё одну помарку нашёл - лишняя переменная WSH в код затесалась... убрал.
На функциональность не влияла, но непорядок...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 20.06.2011, 23:39   #39
ntrader
 
Регистрация: 19.06.2011
Сообщений: 9
По умолчанию

спасибо, Hugo121! если Вы из Украины, могу пополнить ваш моб. счет в знак благодарности)
ntrader вне форума Ответить с цитированием
Старый 20.06.2011, 23:54   #40
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Нет, не из Украины, так что только вебмани
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт TXT файлов в Excel Per4eLO Microsoft Office Excel 7 08.02.2017 19:33
импорт из txt файлов и их обработка evdss Microsoft Office Excel 7 29.11.2010 04:43
импорт данных из excel в txt и из txt в excel ESV Microsoft Office Excel 3 19.11.2010 10:29
импорт из txt, работа с массивом данных, экспорт в txt Danara Microsoft Office Excel 4 31.03.2010 00:26
Импорт из txt в MS SQL masterdela БД в Delphi 6 27.03.2010 22:06