agrippa
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Yuk Здравствуй. С прошлым заданием я разобрался. Но сейчас мне снова нужна помощь. Помоги,пожалуйста. Это очень важно. Вот этот макрос преобразовывает *.txt файлы в нужный мне вид в Exel. Пример таких текстовых файлов я тебе присылал, но если ты их удалил, то могу отослать заного. Напиши в тему и я их пришлю. Тут вот в чём дело: мой макрос вызывает OpenFileDialog сам, а мне надо сделать, чтобы он делал преобразования в уже открытом текстовом файле. Также он создает на втором, третьем листе, и так далее две зоны, которые разделены двумя пробелами, а мне нужно, чтобы эти зоны были не друг под другом, а рядом, и были разделены двумя строками, и так на каждом листе, кроме первого, т.к. там должен быть этот файл в первозданном виде. Sub Preobrazovanie() Dim fs, a, Str Dim Sh As Worksheet Dim d() As String Dim name As String 'открываем стандартый OpenFileDialog fileToOpen = Application.GetOpenFilename("Text Files (*.*), *.*") If fileToOpen <> False Then name = fileToOpen End If 'открываем файл для считывания по строкам Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.OpenTextFile(name) 'Set Sh = Worksheets("весь массив") 'Dim Dr As Range 'j = 1 List = 0 stroka = 0 stroka1 = 0 i = 1 'далеее в цикле до конца файла считываем все строки и анализируем их List = List + 1 ActiveWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count) Do While a.AtEndOfStream <> True stroka = stroka + 1 '.. и начинаем запись на новом листе с первой строки Str = a.ReadLine 'присваеваем строковой переменной str строку из файла Str = Trim(Str) 'удаляем пробелы в строке в начале и в конце d = Split(Str, " ") 'в динамический массив d записываем значения из строки разделенные пробелом If Str = "" Then 'если строка пустая т.е. нет ничего просто ее мереписываем на текущий лист Worksheets(List).Cells(stroka, 1) = "" 'просто записываем в первую ячейку нового листа считанную строку с датой Else If IsNumeric(d(0)) Then 'если у нас в строке числа то '...в цикле записываем последовательно в ячейки текущей строки переменные массива 'попутно их проверяя на число, т.к. могут встречаться и не цифры For j = LBound(d) To UBound(d) 'цикл для последовательного считывания элементов динамического массива If IsNumeric(d(j)) Then 'проверка на число Worksheets(List).Cells(stroka, i) = CDbl(d(j)) 'запись в ячейку листа значения, которое было переведено из строкового типа в double i = i + 1 End If Next i = 1 Else Worksheets(List).Cells(stroka, 1) = Str 'просто записываем в первую ячейку нового листа считанную строку с датой End If End If Loop a.Close Set a = fs.OpenTextFile(name) Do While a.AtEndOfStream <> True Str = a.ReadLine 'присваеваем строковой переменной str строку из файла Str = Trim(Str) 'удаляем пробелы в строке в начале и в конце d = Split(Str) 'в динамический массив d записываем значения из строки разделенные пробелом stroka = stroka + 1 stroka1 = stroka1 + 1 'далее идут проверки If Str = "" Then 'если строка пустая т.е. нет ничего просто ее мереписываем на текущий лист Worksheets(List).Cells(stroka, 1) = Str Worksheets(List).Cells(stroka + 31, 14) = Str Else 'если строка не пустая то начинаются проверки ... If IsDate(d(0)) Then 'если это дата то созаем новый лист If Len(d(0)) > 5 Then 'создаем новый лист List = List + 1 stroka = 1 '.. и начинаем запись на новом листе с первой строки stroka1 = 1 '.. и начинаем запись на новом листе с первой строки ActiveWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count) Worksheets(List).Cells(stroka, 1) = Str 'просто записываем в первую ячейку нового листа считанную строку с датой Worksheets(List).Cells(stroka + 31, 14) = Str 'просто записываем в первую ячейку нового листа считанную строку с датой End If End If If IsNumeric(d(0)) Then 'если у нас в строке числа то '...в цикле записываем последовательно в ячейки текущей строки переменные массива 'попутно их проверяя на число, т.к. могут встречаться и не цифры For j = LBound(d) To UBound(d) 'цикл для последовательного считывания элементов динамического массива If IsNumeric(d(j)) Then 'проверка на число Worksheets(List).Cells(stroka, i) = CDbl(d(j)) 'запись в ячейку листа значения, которое было переведено из строкового типа в double Worksheets(List).Cells(stroka1 + 31, i + 13) = CDbl(d(j)) 'запись в ячейку листа значения, которое было переведено из строкового типа в double i = i + 1 End If Next If i = 2 Then ' это условие необходимо для того чтобы писать две чиловые стороки файла в одну строку листа stroka1 = stroka1 - 1 Else i = 1 End If Else 'если строка содержит просто какойто текст то, записываем его просто на лист Worksheets(List).Cells(stroka, 1) = Str Worksheets(List).Cells(stroka + 31, 14) = Str End If End If Loop a.Close End Sub |