Vba обработка файлов excel

VBA работа с файлами Excel

​Смотрите также​​для таких есть​
​ 1) ‘ Возвращает​ или папки и​ и R40C11 ничего​ в свою таблицу​
​ просто показал, что​названия файлов могу​ файле в столбе​ False Then ЛистСводный.Cells(LastRowСводный​ j + 1​ CreateObject(«Scripting.FileSystemObject») Set oFolder​ .Cells(LastRowКонечный + СколькоОбъединять,​ не имеющих объединение.​

​ брались», vbCritical Exit​​ данных выходим из​
​Application.ScreenUpdating = False​CTAJIuH​

​ подраздел в разделе​​ 8 (режим Append)​​ диска. При использовании​​ жирного нет, то​ (строку вы знаете​ откуда берется.​
​ менять.​ X1 сверялось с​
​ + j, 25).Value​ ЛистСводный.Cells(LastRowСводный + j,​ = oFileSystemObject.GetFolder(ИмяПапки) ‘Проверка,​ 4)).Merge .Cells(LastRowКонечный +​ ‘Сначала поработаем с​ Sub End If​
​ цикла For для​ ‘Здесь идёт открытие/закрытие​: Здравствуйте!​

​ «Карьера»​​ Close FileNum ‘​ имен файлов или​
​ использовать жирноту для​ это переменная цикла​Busine2009​пока только занимаюсь​
​ данными и если​ = ЛистИсточник.Cells(31 +​ 17).Value = ЛистИсточник.Cells(31​ что в папке​
​ 1, 5).Value =​ теми ячейками, которые​ Next oCell End​ J что бы​ книги Application.ScreenUpdating =​Вопрос в следующем:​Hugo121​ Закрывает файл​ папок, содержащих пробелы​ поиска последней строки​ i, а столбцы,​: т.е. только данные​ все делаю вручную,​ в строке Y1​ i, 6).Value Else​ + i, 1).Value​ нет файлов, кроме​

​ ЛистИсточник.Cells(10, 4).Value .Range(.Cells(LastRowКонечный​​ нужно объединить. ’15​​ With Set ЛистИсточник​​ дальше ни чего​ True​
​ Как реализовать чтение​: ну в общем​Категория​ следует использовать дополнительные​ интересующей нас таблицы.​ я надеюсь в​
​ внутри этих файлов​ но такими темпами​ оно сошлось, то​ ЛистСводный.Cells(LastRowСводный + j,​ End If Next​ файлов Excel. For​
​ + 1, 5),​​ столбец For i​ = ActiveWorkbook.Worksheets(1) Set​ не смотрелось Exit​

​Hugo121​​ и запись данных​ сегодня добился, что​
​Функции работы с​ кавычки — Dir(«»C:Русский​lalike​
​ ваших файлах не​ меняются что ли?​ мне не справиться…​ бралось бы значение​
​ 25).Value = 0​ i j =​ Each oFile In​ .Cells(LastRowКонечный + СколькоОбъединять,​

​ = 1 To​​ ЛистКонечный = Workbooks(«Конечный.xls»).Worksheets(1)​ For End If​: Set WB =​ из другой книги?​ могу считывать из​ файлами​ Проектapp.exe»») или Dir(Chr(34)​: Да, я думаю​
​ меняются).​lalike​Busine2009​ из столба Z1​

​ End If Next​​ 0 СколькоОбъединять =​ oFolder.Files If InStr(oFile.Type,​
​ 5)).Merge .Cells(LastRowКонечный +​ LastRowИсточник — 31​ LastRowКонечный = ЛистКонечный.Cells.SpecialCells(xlCellTypeLastCell).Row​ End If Row​ Workbooks.Open(myPath)так будет лучше.​

​Т.е. имеется форма(находится​​ файла и записывать​​FileLen(PathName)​ & «C:Русский Проектapp.exe»​ можно использовать жирность.​Busine2009​:​
​:​ строки Y1​ i With ЛистСводный​ ЛистСводный.Cells.SpecialCells(xlCellTypeLastCell).Row — LastRowСводный​ «Excel») = 0​ 1, 6).Value =​ Step 2 If​ If Selection.Address(ReferenceStyle:=xlR1C1) =​ = Row +​А если отключить/включить​ в одном файле),​ в таблицу колонки​Функция​
​ & Chr(34))​

CyberForum.ru

Работа с файлами Excel

​ но у меня​​:​Busine2009​lalike​
​и вставлялось бы​​ .Cells(LastRowСводный + 1,​ ‘Будем отдельно заносить​ Then MsgBox «В​ ЛистИсточник.Cells(11, 4).Value .Range(.Cells(LastRowКонечный​

​ IsEmpty(ЛистИсточник.Cells(31 + i,​ «R1C1» Then ЛистКонечный.Cells(LastRowКонечный​ 1 ‘переходим на​ обновление экрана, то​
​ с помощью которой​ , как-то так​FileLen​Примечание: Хотя PathName​ таблица заканчивается на​lalike​,​,​ в файл источник​ 4).Value = ЛистИсточник.Cells(8,​ данные в отношении​ выбранной папке есть​ + 1, 6),​ 12).Value) = False​ + 1, 4).Value​ след строчку в​ будет прям как​ пользователь взаимодействует с​Sub Import() Dim​позволяет узнать длину​ указан, как необязательный​ С17, а не​,​В одной папке​я в Excel​ в столб Z​ 4).Value .Range(.Cells(LastRowСводный +​ ячеек конечного файла,​ файлы недопустимых форматов​ .Cells(LastRowКонечный + СколькоОбъединять,​ Then Сумма =​ = ЛистИсточник.Cells(8, 4).Value​ общей таблице Next​ в паскале с​ книгой(второй файл с​ Fname As Variant​ файла в байтах.​ аргумент, он обязателен​ С11.​а у вас​ около 200 Excel​ не работал практически,​ строку Y?​ 1, 4), .Cells(LastRowСводный​ имеющих и не​ (не Excel).», vbCritical​ 6)).Merge .Cells(LastRowКонечный +​ Сумма + ЛистИсточник.Cells(31​ ЛистКонечный.Cells(LastRowКонечный + 1,​ j ‘————————— book.Close​ текстом​ данными), в которой​ Fname = Application.GetOpenFilename(«Text​ Перед вызовом функции​ при первом вызове​таким образом, у​ конечный файл уже​ документов. Каждый документ​ поэтому не знаю,​Busine2009​ + СколькоОбъединять, 4)).Merge​ имеющих объединение. ‘Сначала​ Exit Sub End​ 1, 7).Value =​ + i, 12).Value​ 5).Value = ЛистИсточник.Cells(10,​ Next i​Здравствуйте,​ хранятся исходные данные​ Files (*.txt),*.txt», ,​ есть смысл проверить​ функции, а также​ нас два ячейки​ заполнен и нужно​ разный. Я беру​

​ можно это сделать​​:​
​ .Cells(LastRowСводный + 1,​ поработаем с теми​ If Next oFile​
​ ЛистИсточник.Cells(20, 4).Value .Range(.Cells(LastRowКонечный​
​ End If Next​ 4).Value ЛистКонечный.Cells(LastRowКонечный +​
​lalike​CTAJIuH​ и результаты.​ _ «Select Text​
​ существование файла с​ в случаях, если​ обозначены жирным. R40C11​ только связи обновлять​ данные из определенных​ или нет средствами​lalike​ 5).Value = ЛистИсточник.Cells(10,​ ячейками, которые нужно​
​ ‘Собственно заполнение сводного​ + 1, 7),​ i ЛистКонечный.Cells(LastRowКонечный +​ 1, 6).Value =​

​:​​, Самое универсальное решение​​Alex Dark​​ Data File») If​
​ помощью функции Dir.​ задан аргумент Attributes​ и R40C17.​ или нужно заносить​ ячеек, но в​ самого Excel.​,​ 4).Value .Range(.Cells(LastRowСводный +​ объединить. ’15 столбец​ файла данными из​
​ .Cells(LastRowКонечный + СколькоОбъединять,​ 1, 15).Value =​ ЛистИсточник.Cells(11, 4).Value ЛистКонечный.Cells(LastRowКонечный​у меня просто​ вам уже подсказали​: Очень просто.​ Fname = False​
​ Если в момент​ AttributesНеобязательный аргумент, содержащий​это невозможно, так​ данные из файлов-источников?​ некоторых документах диапазон​Наверное, можно решить​а что в​ 1, 5), .Cells(LastRowСводный​ For i =​ файлов-источников. For Each​ 7)).Merge .Cells(LastRowКонечный +​ Сумма With ЛистКонечный​ + 1, 7).Value​ проходит цикл, но​ — открывать книгу​Макросом открываешь файл,​ Then Exit Sub​ вызова фунции указанный​ константу или числовое​ как таблица иногда​А если в​ определенных ячеек изменен.​ вашу задачу с​ книге Уокенбаха по​ + СколькоОбъединять, 5)).Merge​ 1 To LastRowИсточник​ oFile In oFolder.Files​ 1, 8).Value =​ .Range(.Cells(LastRowКонечный + 1,​ = ЛистИсточник.Cells(20, 4).Value​ ничего не вставляет​ не обновляя экран​ считываешь данные, закрываешь.​ With ActiveSheet.QueryTables.Add(Connection:= _​ файл открыт, то​ выражение, описывающее атрибуты​ заходит за рамки​ файл-источник внесли изменения,​Из них я​ помощью VBA, тогда​ этому вопросу написано?​ .Cells(LastRowСводный + 1,​ — 31 Step​ Set ФайлИсточник =​ ЛистИсточник.Cells(10, 11).Value .Range(.Cells(LastRowКонечный​ 15), .Cells(LastRowКонечный +​ ЛистКонечный.Cells(LastRowКонечный + 1,​Добавлено через 32 минуты​ компьютера.​CTAJIuH​ «TEXT;» & Fname,​ возвращается длина файла​ файла. Если этот​ этого лимита​ то вы должны​ собираю данные в​ вам нужно более​Или сначала надо​ 6).Value = ЛистИсточник.Cells(11,​ 2 If IsEmpty(ЛистИсточник.Cells(31​ Workbooks.Open(oFile.Path) Set ЛистИсточник​ + 1, 8),​ СколькоОбъединять, 15)).Merge End​ 8).Value = ЛистИсточник.Cells(10,​а как сделать​Но если работа​:​ Destination:= _ Range(«A1»))​ до его открытия.​ аргумент опущен, возвращаются​в столбах R11​ эти данные поместить​ один документ.​ подробно описать, что​ прочитать 500 страниц,​ 4).Value .Range(.Cells(LastRowСводный +​ + i, 12).Value)​ = ФайлИсточник.Worksheets(1) Set​ .Cells(LastRowКонечный + СколькоОбъединять,​ With ’22 столбец​ 11).Value ЛистКонечный.Cells(LastRowКонечный +​ так, чтобы​ со второй книгой​Alex Dark​ .Name = «File_01″​ Для определения размера​ все файлы, имена​ и R17 -​ в конец конечного​данные меняются внутри​ вам нужно.​ мысленно представляя себе​ 1, 6), .Cells(LastRowСводный​ = False Then​ ЛистСводный = Workbooks(«Сводный.xls»).Worksheets(1)​ 8)).Merge .Cells(LastRowКонечный +​ If IsEmpty(ЛистИсточник.Cells(LastRowИсточник, 17).Value)​ 1, 11).Value =​в файле источнике​ ограничивается только обработкой​, Видимо что то​ .FieldNames = True​ открытого файла используйте​ которых удовлетворяют содержимому​ больше нет других​ файла?​ документа 1.xls и​Вопросы:​ работу кода, чтобы​ + СколькоОбъединять, 6)).Merge​ Сумма = Сумма​ LastRowСводный = ЛистСводный.Cells.SpecialCells(xlCellTypeLastCell).Row​ 1, 11).Value =​ = False Then​ ЛистИсточник.Cells(17, 11).Value ЛистКонечный.Cells(LastRowКонечный​ в столбе X​ данных — то​ лагануло… последняя строка​ .RowNumbers = False​ фукцию LOF​ аргумента PathName. Допустимые​ ячеек помеченных жирным.​lalike​ других подобных, из​Где расположены Excel-файлы?​ решить эту задачу?​ .Cells(LastRowСводный + 1,​ + ЛистИсточник.Cells(31 +​ metka_1: Set АктивнаяЯчейка​ ЛистИсточник.Cells(17, 11).Value .Range(.Cells(LastRowКонечный​ ЛистКонечный.Cells(LastRowКонечный + 1,​ + 1, 12).Value​ строке Y брались​ есть хорошая альтернатива​ не отправилась…​ .FillAdjacentFormulas = False​Возвращаемое значение​ значения Attributes vbNormal=0Обычное​DarkSacred​: после таблице в​ которых я собираю​Какие ячейки вы берёте?​Я бы использовал​ 7).Value = ЛистИсточник.Cells(20,​ i, 12).Value End​ = Application.InputBox(«Выберите ячейку:​ + 1, 11),​ 22).Value = ЛистИсточник.Cells(LastRowИсточник,​ = ЛистИсточник.Cells(17, 15).Value​ данные,​ в виде использования​Все это дело​ .PreserveFormatting = True​Возвращает значение типа Long,​ состояние файла.Используется по​, Вы не могли​ источнике еще есть​ все в один​Зачем вы можете менять​ Find для поиска​ 4).Value .Range(.Cells(LastRowСводный +​ If Next i​ R1C1, последнюю ячейку​ .Cells(LastRowКонечный + СколькоОбъединять,​ 17).Value Else ЛистКонечный.Cells(LastRowКонечный​ ЛистКонечный.Cells(LastRowКонечный + 1,​потом в другом​ технологии ADO. Результаты​ нужно сделать программно…​ .RefreshOnFileOpen = False​ содержащее длину заданного​ умолчанию vbReadOnly=1Атрибут только​ бы поподробнее?​ кое-что, но я​ документ => 2.xls​ названия файлов?​ в файле нужной​ 1, 7), .Cells(LastRowСводный​ ЛистСводный.Cells(LastRowСводный + 1,​ » & _​ 11)).Merge .Cells(LastRowКонечный +​ + 1, 22).Value​ 15).Value = 0​ файле в столбе​ моих экспериментов с​Т.е. на данный​ .RefreshStyle = xlInsertDeleteCells​ файла​ для чтения vbHidden=2Скрытый​DarkSacred​ могу это удалить.​кажется это может​lalike​ информации, и Offcet,​ + СколькоОбъединять, 7)).Merge​ 15).Value = Сумма​ «столбца C11 или​ 1, 12).Value =​ = 0 End​ ЛистКонечный.Cells(LastRowКонечный + 1,​ X1 сверялось с​ этой альтернативой прилагаю​ момент у меня​ .SavePassword = False​Параметры​ атрибут vbSystem=4Системный атрибут​: А это кое​Busine2009​ пригодиться​: Вобщем, имеется куча​ чтобы брать или​ .Cells(LastRowСводный + 1,​ With ЛистСводный .Range(.Cells(LastRowСводный​ последнюю ячейку столбца​ ЛистИсточник.Cells(17, 15).Value .Range(.Cells(LastRowКонечный​ If With ЛистКонечный​ 17).Value = 0​ данными и если​ (макрос в книге​ «физически» открывается файл,​ .SaveData = True​PathName​ vbVolume=8Метка тома vbDirectory=16Каталог​ — что находится​,​Sub CombineWorkbooks()​ .xls файлов в​ вставлять данные относительно​ 8).Value = ЛистИсточник.Cells(10,​ + 1, 15),​ C17.», Type:=8) If​ + 1, 12),​ .Range(.Cells(LastRowКонечный + 1,​ ЛистКонечный.Cells(LastRowКонечный + 1,​ в строке Y1​ CTAJIUH_UI.xlsm, обрабатываемые данные​ а это как​ .AdjustColumnWidth = True​Обязательный аргумент типа String,​ или папка Примечание:​ в столбце «A».​файл-источник не изменяется.​Dim FilesToOpen​ одной папке.​ определённой ячейки.​ 11).Value .Range(.Cells(LastRowСводный +​ .Cells(LastRowСводный + СколькоОбъединять,​ АктивнаяЯчейка.Address(ReferenceStyle:=xlR1C1) = «R1C1″​ .Cells(LastRowКонечный + СколькоОбъединять,​ 22), .Cells(LastRowКонечный +​ 19).Value = 0​ оно сошлось, то​ и результаты в​ то не устраивает​ .RefreshPeriod = 0​ содержащий имя файла(может​ Можно также указывать​ Если нет то​нужно заносить данные​Dim x As​на листе 1​lalike​ 1, 8), .Cells(LastRowСводный​ 15)).Merge End With​ Then ЛистСводный.Cells(LastRowСводный +​ 12)).Merge End With​ СколькоОбъединять, 22)).Merge End​ ЛистКонечный.Cells(LastRowКонечный + 1,​ бралось бы значение​ книге CTAJIUH_DB.xlsx).​ меня.​ .TextFilePromptOnRefresh = False​ содержать имя диска​ комбинации атрибутов путем​ он будет игнорировать​ из файлов-источников.​ Integer​ находится нужная информация.​: =ИНДЕКС(Sheet1!$C$3:$K$2848;ПОИСКПОЗ(D3028;Sheet1!$C$4:$C$2849;0);9)​ + СколькоОбъединять, 8)).Merge​ ’22 столбец If​ 1, 4).Value =​ ‘Делаем запись на​ With ’26 столбец​ 20).Value = 0​ из столба Z1​С уважением, Аксима​Можно ли как​ .TextFilePlatform = 1252​ или папки). Если​ их суммирования​ это кое -​Busine2009​On Error GoTo​Требуется собрать всю​как то так?)​ .Cells(LastRowСводный + 1,​ IsEmpty(ЛистИсточник.Cells(LastRowИсточник, 17).Value) =​ ЛистИсточник.Cells(8, 4).Value ЛистСводный.Cells(LastRowСводный​ добавленном в конечную​ If IsEmpty(ЛистИсточник.Cells(LastRowИсточник, 11).Value)​ ЛистКонечный.Cells(LastRowКонечный + 1,​ строки Y1​lalike​ то не открывая​ .TextFileStartRow = 1​ диск или папка​Например, vbHidden+vbDirectory выводит​ что, т.к. стоит​:​ ErrHandler​ информацию с этих​Busine2009​ 11).Value = ЛистИсточник.Cells(17,​ False Then ЛистСводный.Cells(LastRowСводный​ + 1, 5).Value​

​ книгу листе, что​​ = False Then​ 21).Value = 0​

​и вставлялось бы​​: какой процедурой выплняется​
​ «физически» отредактировать файл​

​ .TextFileParseType = xlDelimited​​ не заданы, по​ скрытые папки​ проверка Len(Cells(i,1).Text) <>​lalike​Application.ScreenUpdating = False​ файлов в один​:​ 11).Value .Range(.Cells(LastRowСводный +​ + 1, 22).Value​ = ЛистИсточник.Cells(10, 4).Value​ данный файл-источник обработан.​ ЛистКонечный.Cells(LastRowКонечный + 1,​ ЛистКонечный.Cells(LastRowКонечный + 1,​ в файл источник​
​ сборка информации с​Alex Dark​ .TextFileTextQualifier = xlTextQualifierDoubleQuote​ умолчанию принимаются текущие​Пример​ 0​,​FilesToOpen = Application.GetOpenFilename​ .xls для последующего​lalike​ 1, 11), .Cells(LastRowСводный​ = ЛистИсточник.Cells(LastRowИсточник, 17).Value​ ЛистСводный.Cells(LastRowСводный + 1,​ With Workbooks(«Конечный.xls»).Worksheets(«Имена файлов»)​ 26).Value = ЛистИсточник.Cells(LastRowИсточник,​ 22).Value = 0​ в столб Z​ эксель файлов?​: Это как ???​ .TextFileConsecutiveDelimiter = True​ диск и папка.​Dim retval ‘ При​lalike​т.е. у вас​ _​ анализа.​,​ + СколькоОбъединять, 11)).Merge​ Else ЛистСводный.Cells(LastRowСводный +​ 6).Value = ЛистИсточник.Cells(11,​ .Range(«A» & .Cells.SpecialCells(xlCellTypeLastCell).Row​ 11).Value Else ЛистКонечный.Cells(LastRowКонечный​ ЛистКонечный.Cells(LastRowКонечный + 1,​ строку Y?​Комментарий модератора​ Телепатически что ли?​ .TextFileTabDelimiter = True​ Если файл не​ наличии выводит WIN.INI​:​ одноразовая работа что​(FileFilter:=»Microsoft Excel Files​(1.xls — пример​у тебя функции​ .Cells(LastRowСводный + 1,​ 1, 22).Value =​ 4).Value ЛистСводный.Cells(LastRowСводный +​ + 1) =​ + 1, 26).Value​ 23).Value = 0​Busine2009​Именуйте темы осмысленно.​Вы термин «физически»​ .TextFileSemicolonDelimiter = False​ существует, генерируется ошибка​ retval=​DarkSacred​ ли: есть папка​ (*.xls), *.xls», _​ документов, ИЗ которых​ Excel используются. Я​ 12).Value = ЛистИсточник.Cells(17,​ 0 End If​ 1, 7).Value =​ ActiveWorkbook.Name End With​ = 0 End​ ЛистКонечный.Cells(LastRowКонечный + 1,​:​ Название темы должно​ для нас расшифруйте,​ .TextFileCommaDelimiter = False​ времени исполнения File​Dir​, А Вы не​ с 200 Excel-файлами.​MultiSelect:=True, Title:=»Files to​ берется информация. желтым​ в Excel практически​ 15).Value .Range(.Cells(LastRowСводный +​ With ЛистСводный .Range(.Cells(LastRowСводный​ ЛистИсточник.Cells(20, 4).Value ЛистСводный.Cells(LastRowСводный​ ‘Сохранение измений в​ If With ЛистКонечный​ 24).Value = 0​lalike​ максимально полно отражать​ что он означает​ .TextFileSpaceDelimiter = True​ not found​(«c:windowswin.ini») Print retval ‘​ могли бы полный​ Вы заносите нужные​ Merge»)​ обозначены ячейки нужные.​ не работал, поэтому​ 1, 12), .Cells(LastRowСводный​ + 1, 22),​ + 1, 8).Value​ конечной книге. Workbooks(«Конечный.xls»).Save​ .Range(.Cells(LastRowКонечный + 1,​ ЛистКонечный.Cells(LastRowКонечный + 1,​,​ ее содержание.​ в вашем представлении.​ .TextFileColumnDataTypes = Array(1,​Пример​ Возвращает имя файла​ макрос выложить?​ данные из этих​If TypeName(FilesToOpen) =​ Проблема в том,​ не могу сказать,​ + СколькоОбъединять, 12)).Merge​ .Cells(LastRowСводный + СколькоОбъединять,​ = ЛистИсточник.Cells(10, 11).Value​ ‘Просто сообщение, что​ 26), .Cells(LastRowКонечный +​ 25).Value = 0​вот код. Т.к.​DarkSacred: Вот смотри, только​Если я правильно​ 1, 1, 1,​’ Узнаем длину файла​ с расширением txt​DarkSacred​ 200-х файлов в​ «Boolean» Then​ что в диапазоне​ правильно у тебя​ End With metka_2:​ 22)).Merge End With​ ЛистСводный.Cells(LastRowСводный + 1,​ работа макроса завершена.​ СколькоОбъединять, 26)).Merge End​ ЛистКонечный.Cells(LastRowКонечный + 1,​ файл сделан в​ я его не​ телепатировал ваши мысли,​ 1) .TextFileTrailingMinusNumbers =​ autoecex.bat Print​ ‘ При наличии​, да и можно​ конечный файл и​MsgBox «Не выбрано​ R32C3 — R40C17​ или нет, к​ ФайлИсточник.Close j =​ ’26 столбец If​ 11).Value = ЛистИсточник.Cells(17,​ MsgBox «Данные из​ With ‘Теперь с​ 26).Value = 0​ Excel 2003, а​ проверял, если что​ то как то​ True .Refresh BackgroundQuery:=False​FileLen​ нескольких файлов возвращается​ ли несколько диапазонов​ на этом работа​ ни одного файла!»​ в разных файлах​ тому же я​ 0 СколькоОбъединять =​ IsEmpty(ЛистИсточник.Cells(LastRowИсточник, 11).Value) =​ 11).Value ЛистСводный.Cells(LastRowСводный +​ файла-источника взяты», vbInformation​ необъединёнными ячейками поработаем.​ ‘Делаем запись на​ в коде есть​ спрашивай​ так​ End With End​(«c:autoexec.bat»)​ ‘ первый найденный​ выделять и определять​ завершена?​GoTo ExitHandler​ меняется количество строк,​ задачу твою понял​ 0 Сумма =​ False Then ЛистСводный.Cells(LastRowСводный​ 1, 12).Value =​ End SubЕщё будет​ For i =​ добавленном в конечную​ команда, связанная с​’Выбираем файлы для​’ запоминает текущую​ Subне могу понять​Категория​ файл retval =​ положение конечных ячеек?​lalike​End If​ соответственно и расположение​ не до конца.​ 0 Next oFile​ + 1, 26).Value​ ЛистИсточник.Cells(17, 15).Value ЛистСводный.Cells(LastRowСводный​ макрос для проверки,​ 1 To LastRowИсточник​ книгу листе, что​ сохранением, то будет​ загрузок nFile =​ книгу Set OldBook​ только последнюю часть​Функции работы с​ Dir(«c:windows*.txt») Print retval​Dir [(PathName[, Attributes])]​:​x = 1​ ячеек. изменяется от​Я говорил про​ ‘Просто сообщение, что​ = ЛистИсточник.Cells(LastRowИсточник, 11).Value​ + 1, 15).Value​ все ли файлы-источники​ — 32 Step​ данный файл-источник обработан.​ появляться диалоговое окно,​ Application.GetOpenFilename( _ FileFilter:=»xls-файл​ = ActiveWorkbook …​ задания с поиском​ файлами​Категория​Dir$ [(PathName[, Attributes])]​Sub Main()​While x Workbooks.Open​ 1 до 7​ инструменты VBA.​ работа макроса завершена.​ Else ЛистСводный.Cells(LastRowСводный +​ = 0 ЛистСводный.Cells(LastRowСводный​ были обработаны или​ 2 j =​ With Workbooks(«Конечный.xls»).Worksheets(«Имена файлов»)​ связанное с разными​ (*.xls),*.xls», _ Title:=»Выберите​ … … ‘​ дублей и частичных​vbanub​Функции работы с​Функция​Dim myPath As​ Filename:=FilesToOpen(x)​ строк обычно.​у вас эта​ MsgBox «Сбор данных​ 1, 26).Value =​ + 1, 17).Value​ нет.​ j + 1​ .Range(«A» & .Cells.SpecialCells(xlCellTypeLastCell).Row​ форматами – жмите​ файлы для загрузки»,​ открываем книгу, с​ дублей, сообщение знаю​: Прошу людей, разбирающихся​ файлами​Dir​ String, myName As​Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)​2.xls — это​ формула работает? Я​ из файлов-источников завершён.»,​ 0 End If​ = 0 ЛистСводный.Cells(LastRowСводный​Busine2009​ If IsEmpty(ЛистИсточник.Cells(31 +​ + 1) =​ OK.​ _ MultiSelect:=True) If​ именем из переменной​ как вывести, а​ в VBA решить​FileAttr(FileNumber[,ReturnType])​служит для проверки​ String, i As​x = x + 1​ таблица, которая должна​ просто с формулами​ vbInformation End Sub​ With ЛистСводный .Range(.Cells(LastRowСводный​ + 1, 19).Value​: Внесены изменения в​ i, 14).Value) =​ ActiveWorkbook.Name End With​К коду в​ IsEmpty(nFile) Or Not​ myPath Workbooks.Open Filename:=myPath​ вот алгоритм поиска​ данную задачу, сам​Функция​ существования каталога или​ Integer​Wend​ получиться, В которую​ редко имел дело.​lalike​ + 1, 26),​ = 0 ЛистСводный.Cells(LastRowСводный​ пояснительную записку.​ False Then ЛистКонечный.Cells(LastRowКонечный​ ‘Сохранение измений в​

​ файле Word приложена​​ IsArray(nFile) Then Exit​
​ Set WB =​ хз​
​ на этом языке​FileAttr​
​ файла, отвечающих заданному​With Application.FileDialog(msoFileDialogFolderPicker)​ExitHandler:​

​ вставляются данные).​​ Т.е. в одну​​: СПАСИБО!!!!​​ .Cells(LastRowСводный + СколькоОбъединять,​
​ + 1, 20).Value​lalike​ + j, 19).Value​ конечной книге. Workbooks(«Конечный.xls»).Save​ пояснительная записка, которую​ Sub ‘выбран ли​ ActiveWorkbook ‘ Здесь​Вообще я работаю​ не работал. Буду​

​(​​ образцу. Функция поддерживает​.Title = «Укажите​Application.ScreenUpdating = True​Заранее благодарю за​

​ формулу можно 2​​использовал на все​​ 26)).Merge End With​​ = 0 ЛистСводный.Cells(LastRowСводный​
​: СПАСИБО BUSINE2009!!!!​ = ЛистИсточник.Cells(31 +​ ‘Просто сообщение, что​ нужно обязательно прочитать​ файл для загрузок​ мы с ней​

​ с С, С++​​ рад, если откликнетесь.​
​File Attr​ использование подстановочных знаков​ рабочую папку»: .Show​Exit Sub​ оказанную помощь!​ формулы засунуть?​
​ 100%.​​ ‘Теперь с необъединёнными​ + 1, 21).Value​
​Все РАБОТАЕТ!!!​ i, 14).Value Else​
​ работа макроса завершена.​ и если что-то​ qFile = UBound(nFile)​ что то делаем,​
​ и если бы​Surrogate​ibute) анализирует состояние файла​ для нескольких символов(*)​If .SelectedItems.Count =​ErrHandler:​У меня Excel​lalike​очень удобно и​
​ ячейками поработаем. For​ = 0 ЛистСводный.Cells(LastRowСводный​Busine2009​ ЛистКонечный.Cells(LastRowКонечный + j,​

​ MsgBox «Данные из​​ не понятно, то​​ ‘запоминаем количество файлов​​ а именно считываем​
​ меня там заставили​: для начала —текст​ и выдает сообщение​
​ и одиночного символа(?)​ 0 Then Exit​MsgBox Err.Description​ 2007.​: да, можно.​
​ сэкономило столько времени.​ i = 1​ + 1, 22).Value​: Вариант с автоматическим​ 19).Value = 0​ файла-источника взяты», vbInformation​ спросить.​

​ ‘————————— Set sh​​ данные … …​
​ проверить на дубли​

​vbanub​​ о режиме файла,​​ для указания нескольких​​ Sub​
​Resume ExitHandler​Некоторая информация указана​она работает, но​я вот думаю,​ To LastRowИсточник -​ = 0 ЛистСводный.Cells(LastRowСводный​ открытием всех файлов-источников​ End If If​ Exit Sub ElseIf​Sub m_1() Dim​
​ = ActiveSheet ‘запоминает​ ‘ И закрываем,​
​ я мне бы​: vbanub, вам Закон​ открытого с помощью​ файлов. Функция возвращает​myPath = .SelectedItems(1)​End Sub​ в примечаниях.(R-Row- строка,С-column-столбец)​

​ для других диапазонов​​ как бы сделать​
​ 32 Step 2​ + 1, 23).Value​

​ из указанной папки.​​ IsEmpty(ЛистИсточник.Cells(31 + i,​​ ActiveCell.Column <> 11​​ ЛистКонечный2 As Excel.Worksheet​
​ лист куда надо​ за ненадобностью WB.close​ хватило пройтись одного​ не писан что​
​ инструкции​ первое имя файла,​ & «»​Добавлено через 1 минуту​

​Для удобства столбцы,​​Busine2009​ эту програмку универсальной..​ j = j​
​ = 0 ЛистСводный.Cells(LastRowСводный​ Оказывается в Excel​ 13).Value) = False​ And ActiveCell.Column <>​ Dim Флаг As​ вносить информацию Row​ ‘ Возвращаемся назад​ цикла for по​ ли ?​Open​ имя которого соответствует​

CyberForum.ru

Работа с файлами Excel

​End With​​здесь происходит просто​ которые не требуются​:​
​Busine2009​​ + 1 If​ + 1, 24).Value​ во время выполнения​ Then ЛистКонечный.Cells(LastRowКонечный +​

​ 17 Or _​

​ Boolean Dim oCell​​ = 2 ‘начинаем​ в книгу OldBook.Select​
​ многомерному массиву, чтобы​я про Правила​
​Возвращаемое значение​ аргументу PathName. Для​
​Application.ScreenUpdating = False:​
​ сбор всех книг​ в заполнении скрыты.​
​lalike​:​
​ IsEmpty(ЛистИсточник.Cells(31 + i,​ = 0 ЛистСводный.Cells(LastRowСводный​ макроса есть возможность​ j, 20).Value =​

​ IsNumeric(ActiveCell) = False​​ As Excel.Range Dim​​ запись с 3​​CTAJIuH​
​ найти соответствия и​ нашего форума !​Возвращает значение типа Long,​ получения остальных файлов,​ myName = Dir(myPath​ в одну.​
​Ответы на вопросы​,​lalike​ 14).Value) = False​ + 1, 25).Value​ выделять ячейки и​
​ ЛистИсточник.Cells(31 + i,​

  1. ​ Or ActiveCell.Font.Bold =​
  2. ​ ЛистИсточник As Excel.Worksheet​
  3. ​ строчки For i​:​

​ выдать сообщения​​Surrogate​ представляющее режим файла​ имена которых соответствуют​
​ & «*.xls»): i​как бы сделать​
​1. Excel файлы​надо попробовать формулы​,​ Then ЛистСводный.Cells(LastRowСводный +​ = 0 ЛистСводный.Cells(LastRowСводный​
​ перемещаться по листу:​ 13).Value Else ЛистКонечный.Cells(LastRowКонечный​ False Then MsgBox​ Dim ЛистКонечный As​ = 1 To​Alex Dark​vbanub​: Прошу простить мою​ для файлов, открытых​ PathName, следует повторно​ = 1: Cells.ClearContents​ так, чтобы еще​ расположены в одной​
​ Excel обуздать для​в смысле «универсальной»?​ j, 19).Value =​ + 1, 26).Value​
​ для этого нужно​ + j, 20).Value​
​ «Выделенными ячейками могут​ Excel.Worksheet Dim i​
​ qFile Set book​, наверное я как​
​: Ну так и​ оплошность, выкладывал с​ с помощью инструкции​
​ вызвать функцию​
​Do While myName​ и определенные ячейки..?​ папке. c:/1/ например​
​ вашей задачи. У​
​ Начните изучать потихоньку​ ЛистИсточник.Cells(31 + i,​

​ = 0 GoTo​​ использовать метод InputBox​​ = 0 End​​ быть только R1C1,​
​ As Long Dim​ = Workbooks.Open(nFile(i)) ‘заполняем​ то неверно выразился…​ тут пройдитесь по​ телефона,​

​Open​​Dir​ <> «»​ да и еще​
​2. желтые ячейки​ вас хорошая идея.​

​ VBA, я помогу​​ 14).Value Else ЛистСводный.Cells(LastRowСводный​​ metka_2 ElseIf АктивнаяЯчейка.Column​​ (не путать с​
​ If If IsEmpty(ЛистИсточник.Cells(31​ последняя ячейка столбца​ j As Long​ общую информацию Row​меня не устраивает,​ многомерному — если​Писан, ребят поймите​

​, в соответствии со​​без аргументов. Последовательные​​Cells(i, 2).Formula =​​ и диапазон переменчивый?​
​3. для удобства​Я создал ситуация,​ на первых порах,​
​ + j, 19).Value​ <> 11 And​ функцией InputBox). Перед​
​ + i, 12).Value)​ C11 или последняя​ Dim LastRowКонечный As​

​ = Row +​​ что файл открывается​ что-то уже есть​ с телефона выкладывал,​

​ следующей схемой:​​ вызовы функции без​​ «='» & myPath​​ может, быть вручную​
​ написания макроса)​ что ваша формула​ т.к. обладаю только​ = 0 End​ АктивнаяЯчейка.Column <> 17​ использованием кода прочтите​ = False Then​ ячейка столбца C17.»​
​ Long Dim LastRowИсточник​ 1 ‘переходим на​ так, как будто​
​ на листе, это​ больше не повторится!​Input=1 Output=2 Random=4 Append=8​ аргументов возможны до​ & «[» &​ диапазон указывать для​
​Busine2009​ наконец у меня​
​ неполными базовыми знаниями.​
​ If If IsEmpty(ЛистИсточник.Cells(31​
​ Or _ IsNumeric(АктивнаяЯчейка)​ Руководство пользователю.​
​ ЛистКонечный.Cells(LastRowКонечный + j,​ & vbCr &​
​ As Long Dim​
​ след строчку в​ я просто открыл​
​ можно взять в​vbanub​
​ Binary=32​ тех пор, пока​
​ myName & «]Лист1′!$C$5″​ каждого документа?​
​:​ заработала.​
​ И будете превращать​
​ + i, 13).Value)​
​ = False Or​
​Sub m_1() Dim​ 21).Value = ЛистИсточник.Cells(31​
​ _ «Если это​
​ СколькоОбъединять As Long​
​ общей таблице sh.Cells(Row,​
​ его из проводника(в​
​ массив, затем пройтись​
​:​
​Параметры​
​ имеются файлы или​
​Cells(i, 3).Formula =​
​DarkSacred​
​lalike​
​booleg​ этот код в​ = False Then​
​ АктивнаяЯчейка.Font.Bold = False​ ЛистИсточник As Excel.Worksheet​ + i, 12).Value​ последняя ячейка столбца​ Dim Сумма ‘Проверка,​ 1) = Cells(8,​ окне)…​ как привыкли.​

​vbanub​​Функция содержит именованные​ папки, соответствующие образцу​ «='» & myPath​
​: Вот как решить​,​: Подскажите как будет​ универсальный.​ ЛистСводный.Cells(LastRowСводный + j,​ Then MsgBox «Выделенными​ Dim ФайлИсточник As​ Else ЛистКонечный.Cells(LastRowКонечный +​ C11 или столбца​ что добавлен лист​ 4) sh.Cells(Row, 2)​вот например паскаль:​Вообще обычно под​, где попытки решения?​
​ аргументы FileNumberОбязательный аргумент​ первого вызова(с аргументами)​ & «[» &​ проблему с выбором​кроме этого диапазона​
​ выглядеть код если​lalike​ 20).Value = ЛистИсточник.Cells(31​ ячейками могут быть​ Excel.Workbook Dim ЛистСводный​ j, 21).Value =​ C17, то проверьте​ в конечную книгу​ = Cells(10, 4)​ открыть файл для​ виндой для этого​Surrogate​ типа Integer, указывающий​Примечание: Рекурсивные вызовы​ myName & «]Лист1′!$D$8″​ файлов для загрузки​ ячеек R32C3 -​ ситуация попроще:​: отлично! огромное спасибо,​

​ + i, 13).Value​​ только R1C1, последняя​​ As Excel.Worksheet Dim​​ 0 End If​
​ форматирование этой ячейки:​ для записи в​ sh.Cells(Row, 3) =​ чтения — там​ привлекают словарь, вероятно​: Никогда не работал​
​ на любой допустимый​ функции​Cells(i, 1) =​’Выбираем файлы для​ R40C17, всё остальное​Есть около 1000​

​ я сейчас читаю​​ Else ЛистСводный.Cells(LastRowСводный +​ ячейка столбца C11​ oFileSystemObject As Scripting.FileSystemObject​ If IsEmpty(ЛистИсточник.Cells(31 +​
​ » & vbCr​​ нём имён файлов,​
​ Cells(11, 4) sh.Cells(Row,​
​ же не открывается​ в С, С++​

​ с этим языком,​​ номер файла ReturnTypeНеобязательный​​Dir​​ myName: i =​
​ загрузок nFile =​ полностью одинаковое во​ файлов с абсолютно​ А. Гарнаева, Самоучитель​ j, 20).Value =​ или последняя ячейка​ Dim oFolder As​ i, 8).Value) =​ & _ «в​ из которых данные​

​ 4) = Cells(13,​​ сам текстовый документ​
​ тоже есть аналогичный​
​ по-этому и попросил​ аргумент типа Integer,​запрещены​ i + 1:​
​ Application.GetOpenFilename( _ FileFilter:=»xls-файл​
​ всех файлах?​ одинаковыми таблицами (отличаются​
​ VBA.​ 0 End If​ столбца C17.» &​
​ Scripting.Folder Dim oFile​ False Then ЛистКонечный.Cells(LastRowКонечный​
​ этой ячейке должно​
​ уже получены. For​ 4) ‘и т.д.​ в окне блокнота)​ инструмент, но я​
​ помощи​ указывающий характер возвращаемых​
​Возвращаемое значение​ myName = Dir​ (*.xls),*.xls», _ Title:=»Выберите​lalike​
​ только данные) и​Busine2009​ If IsEmpty(ЛистИсточник.Cells(31 +​ vbCr & _​
​ As Scripting.File Dim​ + j, 23).Value​ быть число и​ Each ЛистКонечный2 In​
​ заносите шапку файла​Alex Dark​
​ не в курсе,​
​vbanub​ данных. Начиная c​Функция возвращает данные типа​
​Loop: [A:C].Value =​
​ файлы для загрузки»,​​: Да! Расположение всех​
​ необходимо получить в​:​
​ i, 12).Value) =​ «Если это последняя​ ИмяПапки As String​

​ = ЛистИсточник.Cells(31 +​​ шрифт должен быть​ Workbooks(«Конечный.xls»).Worksheets If ЛистКонечный2.Name​ ‘теперь переходим к​, на данный момент,​ не изучал.​: все когда-то бывает​
​ Visual Basic версии​ String, структурно представляющего​ [A:C].Value​
​ _ MultiSelect:=True) If​ остальных ячеек полностью​ сводный файл такую​lalike​ False Then ЛистСводный.Cells(LastRowСводный​ ячейка столбца C11​ Dim Response As​ i, 8).Value Else​

​ жирным.», vbCritical Exit​​ = «Имена файлов»​ таблице EndRow =​ у меня так​Но вот насчёт​ в первый раз.​ 5, поддерживается только​
​ имя файла или​End Sub​ IsEmpty(nFile) Or Not​ одинаковое.​
​ же таблицу но​,​ + j, 21).Value​ или столбца C17,​
​ String Dim АктивнаяЯчейка​ ЛистКонечный.Cells(LastRowКонечный + j,​ Sub End If​ Then Флаг =​
​ Range(Range(«A1»), Range(«A1»).SpecialCells(xlLastCell)).Rows.count ‘определяем​​ и сделано)​ частичных дублей -​

​нарисуйте или опишите​​ одно значение:1, которое​ папки, которые удовлетворяют​теперь осталось еще​ IsArray(nFile) Then Exit​ЗЫ Само содержание​ содержащую результат обработки​что ты именно​ = ЛистИсточник.Cells(31 +​ то проверьте форматирование​

​ As Range Dim​​ 23).Value = 0​​ LastRowИсточник = ActiveCell.Row​​ True Exit For​ последнию строчку For​Alex Dark​
​ я не представляю​​ алгоритм решения по​ параметр принимает по​ указанному шаблону имени​ решить момент с​

CyberForum.ru

Функция Dir

​ Sub 'выбран ли​
​ ячеек разное.​

​ исходных таблиц (​​ читаешь? Какой раздел​​ i, 12).Value Else​ этой ячейки: «​ i As Long​ End If If​ ‘Заполним сначала столбец​ End If Next​ j = 32​: С этими претензиями​ как делать…​ вашему мнению, или​ умолчанию. Поэтому его​ файла, набору атрибутов​ разными диапазонами)​ файл для загрузок​Busine2009​ например сумму значений​​ этой книги и​​ ЛистСводный.Cells(LastRowСводный + j,​ & vbCr &​ Dim j As​ IsEmpty(ЛистИсточник.Cells(31 + i,​ 17 в конечном​ ЛистКонечный2 If Флаг​ To EndRow ‘смотрим​
​ в мелкософт.​Surrogate​​ дайте код на​​ можно игнорировать. В​

​ файла или метке​

​Добавлено через 1 минуту​ qFile = UBound(nFile)​:​ соответствующих ячеек) ?​ для чего ты​ 21).Value = 0​ _ «в этой​ Long Dim LastRowИсточник​ 7).Value) = False​ файле, чтобы знать,​ = False Then​​ заполненна ли первая​​Но сомневаюсь что​: Ну вот в​
​ том языке который​ 16-разрядных системах значение​ тома на диске.​Busine2009​ ‘запоминаем количество файлов​lalike​lalike​ читаешь этот раздел​

​ End If If​​ ячейке должно быть​ As Long Dim​ Then ЛистКонечный.Cells(LastRowКонечный +​ сколько объединять ячеек​ MsgBox «Не добавлен​ ячейка в строчке​ они вас там​ vba, как раз​ вам знаком.​ 2 задает возвращение​ Если аргумент PathName​,​ ‘—————————Потом определяем последнию​
​,​: какой процедурой выплняется​ книги?​ IsEmpty(ЛистИсточник.Cells(31 + i,​ число и шрифт​ LastRowСводный As Long​ j, 24).Value =​ в дальнейшем. For​ лист в конечный​ j If Len(Cells(j,​ будут слушать.​ с этим и​чтоб было видно​ дескриптора файла в​ не найден, то​нет это неодноразовая​ активную строку​а файлы каждый​ сборка информации с​lalike​ 8).Value) = False​ должен быть жирным.»​ Dim СколькоОбъединять As​ ЛистИсточник.Cells(31 + i,​ i = 1​
​ файл для записи​ 1).Text) <> 0​​Вы либо пользуетесь​

​ проблемы, можете предложить​ ход ваших мыслей​ операционной системе. В​​ функция​​ работа.​qRow = Range(Range("A1"),​ раз новые оказываются​ эксель файлов?​: еще вот посоветовали​ Then ЛистСводный.Cells(LastRowСводный +​ & vbCr &​ Long Dim Сумма​

​ 7).Value Else ЛистКонечный.Cells(LastRowКонечный​
​ To LastRowИсточник -​ имён файлов, из​

Функция FileAttr

​ Then 'заполняем значения​

​ так как есть​​ решение?​​в методичке поверьте​​ 32-разрядных системах значение​​Dir​количество папок постоянно​ Range(«A1»).SpecialCells(xlLastCell)).Rows.countПоможет только если​ в папке? И​Комментарий модератора​​Дж. Уокенбаха. «Профессиональное​

​ j, 23).Value =​

​ vbCr & _​ ‘Выбор папки, содержащей​ + j, 24).Value​ 31 Step 2​​ которых данные уже​​ и зтаблицы sh.Cells(Row,​ либо не пользуетесь​

​Hugo121​ мне есть почти​

​ 2 аргумента ReturnType​
​возвращает пустую строку(«​ увеличивается. Каждй месяц​ после таблицы ни​ нужны ли связи​Именуйте темы осмысленно.​ программирование на VBA​ ЛистИсточник.Cells(31 + i,​ «Повторите выбор ячейки.»,​ файлы-источники. With Application.FileDialog(msoFileDialogFolderPicker)​ = 0 End​ If IsEmpty(ЛистИсточник.Cells(31 +​ взяты.» & vbCr​ 19) = Cells(j,​ ими вовсе.​: а как поиск​ все что нужно,​ не поддерживается и​ «)​ по 10-20 папок.​ каких данных не​ между конечным файлом​ Название темы должно​​ в Excel 2002​

​ 8).Value Else ЛистСводный.Cells(LastRowСводный​ vbCritical GoTo metka_1​ If .Show =​ If If IsEmpty(ЛистИсточник.Cells(31​ i, 1).Value) =​ & _ "Или​ 14) sh.Cells(Row, 20)​Можно попробовать свернуть​ частичного совпадения, реализуете​ и не говорите​ приводит к ошибке​Примечание: Если после​Busine2009​ будет​ и файлом-источником -​

​ максимально полно отражать​
​ (2003)», «Подробное руководство​ + j, 23).Value​

Функция FileLen

​ End If LastRowИсточник​

​ 0 Then Exit​​ + i, 6).Value)​​ False Then j​ лист имеет неправильное​ = Cells(j, 13)​ открытое окно, но​ в c/c++ ?​ что это вам​Пример​ возврата функцией пустой​: у вас же​После циклом перебираем​ ='[1.xls]Лист1′!R20C4?​ ее содержание.​ по созданию формул​ = 0 End​

​ = АктивнаяЯчейка.Row ‘Заполним​

​ Sub ИмяПапки =​ = False Then​ = j +​

​ имя.», vbCritical Exit​

​ ‘ и т.д.​ ​ при этом возможны​vbanub​ по работе нужно​’ В данном примере​ строки, снова вызвать​ 200 файлов, вы​ все строчки начиная​lalike​dzug: Той которую напишите..​ в Excel»​ If If IsEmpty(ЛистИсточник.Cells(31​ сначала столбец 17​

​ .SelectedItems(1) End With​

​ ЛистКонечный.Cells(LastRowКонечный + j,​ 1 ЛистКонечный.Cells(LastRowКонечный +​​ Sub End If​​ 'если не заполненна​

​ проблемы в работе.​
​: dim массив() массив=диапазон.value​Добавлено через 3 часа​

Работа с файлом в Excel

​ функция FileAttr ‘​​ функцию без аргументов,​ собираетесь открыть каждый​ с 32 и​:​lalike​Busine2009​

​ + i, 7).Value)​​ в конечном файле,​

​ ‘Проверка, что выбрана​​ 25).Value = ЛистИсточник.Cells(31​ j, 17).Value =​ ‘Проверка, что с​
​ первая ячейка смотрим​pashulka​

​ ‘и перебираем как​​ 12 минут​ используется для определения​ то возникает ошибка​
​ файл и удалить​ по qRow, при​Busine2009​

​: хм, я здесь​​, я пока знакомлюсь​​ = False Then​​ чтобы знать, сколько​

​ нужная папка. Response​​ + i, 6).Value​ ЛистИсточник.Cells(31 + i,​ данного листа данные​ заполненна ли 11​

​: Здесь ключевое слово​​ угодно​vbanub​
​ режима файла Dim​ времени исполнения Invalid​ то, что находится​ этом ставим условие​,​ недавно, может подскажете:​
​ в целом.​ ЛистСводный.Cells(LastRowСводный + j,​
​ объединять ячеек в​ = MsgBox(«Выбрана папка​ Else ЛистКонечный.Cells(LastRowКонечный +​ 1).Value End If​ ещё не брались.​ ячейка Else If​
​ — текстовый, ибо​с помощью ассоциативных​
​, судя по заданию​​ FileNum, Mode FileNum​ procedure call or​ ниже?​
​ если Len(Cells(i,1).Text) <>​Нет, связи не​есть иного .xls​а у меня​
​ 24).Value = ЛистИсточник.Cells(31​ дальнейшем. For i​ » & ИмяПапки,​

​ j, 25).Value =​​ Next i j​ With Workbooks(«Конечный.xls»).Worksheets(«Имена файлов»)​ Len(Cells(j, 11).Text) <>​ в VB(A) это​ массивов, подключаем STL​ это не первый​
​ = 1 ‘​ argument​Я предлагаю для​ 0(проверяет что данная​ нужны. Нужны только​ файлов,​ еще такой вопрос,​ + i, 7).Value​ = 1 To​ vbOKCancel) If Response​ 0 End If​ = 0 СколькоОбъединять​ For Each oCell​ 0 Then ‘заполняем​ также осуществимо а​ шаблон map, а​ курс, первый семестр!​ Присваивает номер файла​Параметры​ идентификации окончания таблицы​ ячейка имеет какое​ цифры, данные.​собираю все в​в файле источнике​ Else ЛистСводный.Cells(LastRowСводный +​ LastRowИсточник — 31​ = vbCancel Then​ Next i With​ = ЛистКонечный.Cells.SpecialCells(xlCellTypeLastCell).Row -​ In .Range(«A» &​ итоговые данные sh.Cells(Row,​ если Вы не​ дальше путем обмена​наверно учитесь в​ Open «TESTFILE» For​PathNameНеобязательный аргумент. Строковое​ использовать R40C11.​ то значение), если​В папке определенное​ один,​ в столбе X​ j, 24).Value =​ Step 2 If​ Exit Sub ‘Активизация​ ЛистКонечный .Cells(LastRowКонечный +​
​ LastRowКонечный ‘Будем отдельно​ .Cells.SpecialCells(xlCellTypeLastCell).Row) If oCell.Value​ 22) = Cells(j,​ хотите видеть процесс​ значениями между отображениями​ Российской Академии Социнжиниринга​ Append As FileNum​ выражение, указывающее имя​R30C11 постоянно. R40C11​ данное условие выполнится​ количество файлов, новые​

​беру определенные ячейки,​​ строке Y брались​ 0 End If​ IsEmpty(ЛистИсточник.Cells(31 + i,​ объектов, связанных с​ 1, 4).Value =​ заносить данные в​ = ActiveWorkbook.Name Then​ 11) sh.Cells(Row, 26)​
​ открытия/закрытия книг(и), то​ проверяем на схожесть​ или Международном Университете​ ‘ Открывает файл​ файла. Также может​ — жирным оформлено.​ то копируйте данные​ не появляются.​
​расположение ячеек в​ данные,​ If IsEmpty(ЛистИсточник.Cells(31 +​ 1).Value) = False​

​ работой с файлами.​​ ЛистИсточник.Cells(8, 4).Value .Range(.Cells(LastRowКонечный​ отношении ячеек конечного​ MsgBox «Из данного​ = Cells(j, 17)​ можете просто :​

​ частичных дублей​​ чОткого менеджмента?​ Mode = FileAttr(FileNum,​ содержать имя каталога​

​ Если между R30C11​​ из нужных ячеек​этими связями я​ некоторых местах меняется.​

​потом в другом​ i, 6).Value) =​ Then j =​ Set oFileSystemObject =​ + 1, 4),​ файла, имеющих и​ файла-источника данные уже​

CyberForum.ru

​ ‘после заполнения итоговых​

Данные функции предназначены для работы с текстовыми файлами из VBA Excel.

Используя эти функции, вы при помощи одной строки кода сможете записать текст из переменной в файл, или наоборот, загрузить содержимое текстового файла в переменную.
Подразумевается, что текстовые файлы имеют формат ANSI (он же ASCII, он же windows-1251)

Чтение текстового файла в переменную:

Function ReadTXTfile(ByVal filename As String) As String
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.OpenTextFile(filename, 1, True): ReadTXTfile = ts.ReadAll: ts.Close
    Set ts = Nothing: Set fso = Nothing
End Function

Запись в текстовый файл из переменной:

Function SaveTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
    On Error Resume Next: Err.Clear
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.CreateTextFile(filename, True)
    ts.Write txt: ts.Close
    SaveTXTfile = Err = 0
    Set ts = Nothing: Set fso = Nothing
End Function

Добавление в текстовый файл из переменной:

Function AddIntoTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
    On Error Resume Next: Err.Clear
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.OpenTextFile(filename, 8, True): ts.Write txt: ts.Close
    Set ts = Nothing: Set fso = Nothing
    AddIntoTXTfile = Err = 0
End Function
  • 107130 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

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

Задача по объединению данных из нескольких Excel-файлов, или подгрузка доп.данных из внешнего файла решается достаточно просто: создается объект Excel, который можно скрыть визуально, затем открывается необходимый файл и выполняются нужные действия. Просто приведу несколько примеров.

Открытие файла Excel

Set objExcel = New Excel.Application
objExcel.Visible = False
Set wb = objExcel.Workbooks.Open(fname)
Set ws = wb.Sheets(1)

В первой строке запускаем новый Excel, затем делаем его невидимым, в 3-й строке открываем файл fname. В последней строке получаем первый лист открытого excel-кого файла.

Альтернативный вариант открытия файла

Set objExcel = New Excel.Application
Set wb = objExcel.Workbooks
wb.Open fname, local:=True
Set ws = wb.Item(1).ActiveSheet

При открытии файла можно использовать доп.параметры (приведу некоторые):

UpdateLinks — обновлять или нет внешние ссылки при открытии файла;
ReadOnly — открытие в режиме только для чтения;
Format — используемый при открытии разделитель (1 — символ tab, 2 — запятые, 3 — пробелы, 4 — точка с запятой, 5 — без разделителя, 6 — пользовательский разделитель, заданный в Delimiter);
Delimiter — пользовательский разделитель (в случае, если Format = 6);
Origin — тип операционной системы (xlMacintosh, xlWindows или xlMSDOS);
Local — использование в Excel языка такого же, как в открываемом файле.

Теперь можно выполнять какие-то действия с открытым файлом, просто обращаясь через wb и ws.

ws.Cells(1, 1).Value = "Test"
ws.Cells(1, 1).Font.Size = 18 ' Поменять размер шрифта
ws.Cells(1, 1).HorizontalAlignment = xlCenter ' 

Записать книгу и закрыть

wb.Save ' Записать с тем же именем
wb.SaveAs Filename:="имя_нового_файла", FileFormat:=xlOpenXMLWorkbookMacroEnabled ' Записать в новый файл
wb.Close ' Закрыть книгу

Для записи текущей книги (где находится макрос), можно использовать:

ActiveWorkbook.SaveAs 

Чтобы сохранить или перезаписать книгу Excel без вопросов, можно применить такой вариант:

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="c:Temp001.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = True

У метода SaveAs есть несколько параметров сохранения, с ними можно ознакомиться на сайте Microsoft.

Если нужно, можно закрыть книгу Excel без сохранения изменений таким образом:

wb.Close False

Чтение и запись в файл, открытый с помощью оператора Open. Операторы Input, Line Input, Write и функция EOF. Примеры использования в VBA Excel.

Операторы чтения и записи в файл

Оператор Input #

Оператор Input # считывает данные из открытого файла с последовательным доступом и присваивает эти данные переменным.

Оператор Input # используется только с файлами, открытыми в режиме Input или Binary. При прочтении стандартные строковые или числовые значения присваиваются переменным без изменения.

Синтаксис оператора Input #:

Input #Номер_файла, Переменные

Компоненты оператора Input #:

  • Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
  • Переменные – обязательный параметр, представляющий из себя список переменных, разделенных запятой, которым присваиваются значения, считанные из файла.

Особенности применения оператора Input #:

  • Элементы данных в файле должны быть указаны в том же порядке, что и переменные в списке Переменные, и соответствовать им по типу данных. Если переменная числовая, а данные текстовые, этой переменной будет присвоено нулевое значение.
  • Если при чтении данных достигнут конец файла, чтение прерывается и возникает ошибка. Для ее предупреждения в коде VBA Excel используется функция EOF.
  • Чтобы данные из файла могли быть правильно прочитаны и записаны в переменные с помощью оператора Input #, они должны быть записаны в файл с помощью оператора Write #. Он обеспечивает правильное разделение каждого из полей (элементов) данных.

Оператор Line Input #

Оператор Line Input # считывает одну строку из открытого файла с последовательным доступом и присваивает ее значение строковой переменной.

Оператор Line Input # считывает из файла по одному символу до тех пор, пока не встретится символ возврата каретки (Chr(13)) или последовательность символа возврата каретки и перевода строки (Chr (13) + Chr(10)).

Синтаксис оператора Line Input #:

Line Input #Номер_файла, Переменная

Компоненты оператора Line Input #:

  • Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
  • Переменная – обязательный параметр, представляющий из себя имя переменной, объявленной как String или Variant, которой присваивается строка, считанная из файла.

Оператор Write #

Оператор Write # записывает данные в файл с последовательным доступом.

Синтаксис оператора Write #:

Write #Номер_файла, [Данные]

Компоненты оператора Write #:

  • Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
  • Данные – необязательный параметр, представляющий из себя одно или несколько числовых или строковых выражений, разделенных запятой, которые нужно записать в файл.

Особенности применения оператора Write #:

  • Данные, записанные с помощью оператора Write #, считываются из файла с помощью оператора Input #.
  • Если опустить параметр Данные и добавить запятую после Номер_файла, в файл будет добавлена пустая строка.
  • Несколько выражений в списке Данные могут быть разделены точкой с запятой или запятой.
  • Числовые данные всегда записываются с точкой в качестве разделителя целой и дробной части.
  • Оператор Write # вставляет запятые между элементами и прямые парные кавычки вокруг строк при их записи в файл.
  • После записи в файл последнего символа из параметра Данные оператор Write # вставляет символы возврата каретки и перевода строки (Chr (13) + Chr(10)).

Функция EOF

Функция EOF возвращает логическое значение True, когда достигнут конец файла, открытого для последовательного (Input) или произвольного (Random) доступа.

Синтаксис функции EOF:

Номер_файла – это номер, присвоенный файлу при открытии с помощью оператора Open.

Функция EOF используется для предупреждения ошибок, вызываемых попытками выполнить чтение после конца файла. Она возвращает значение False, пока не будет достигнут конец файла.

Примеры чтения и записи в файл

Пример 1
Открытие (или создание, если он не существует) текстового файла для чтения и записи и запись в него одной строки, состоящей из двух текстовых и одного числового значений. Файл с именем myFile1.txt будет создан в той же папке, где расположен файл Excel с кодом VBA.

Sub Test1()

Dim ff As Integer

‘Получаем свободный номер для открываемого файла

ff = FreeFile

‘Открываем (или создаем) файл для чтения и записи

Open ThisWorkbook.Path & «myFile1.txt» For Output As ff

‘Записываем в файл одну строку

Write #ff, «Дает корова молоко!», _

«Куда идет король?», 25.35847

‘Закрываем файл

Close ff

‘Открываем файл для просмотра

ThisWorkbook.FollowHyperlink (ThisWorkbook.Path & «myFile1.txt»)

End Sub

Строки и число можно предварительно присвоить переменным, объявленным с соответствующими типами данных, и использовать их для записи данных в файл (в строках кода с оператором Write #, как в этом и следующем примерах).

Пример 2
Открытие (или создание, если он не существует) файла без расширения для чтения и записи и запись в него трех строк: двух текстовых и одной в числовом формате. Файл с именем myFile2 будет создан в той же папке, где расположен файл Excel с кодом VBA.

Так как у файла нет расширения, Windows выведет диалоговое окно для выбора открывающей его программы. Выберите любой текстовый редактор или интернет-браузер.

Sub Test2()

Dim ff As Integer

‘Получаем свободный номер для открываемого файла

ff = FreeFile

‘Открываем (или создаем) файл для чтения и записи

Open ThisWorkbook.Path & «myFile2» For Output As ff

‘Записываем в файл три строки

Write #ff, «Дает корова молоко!»

Write #ff, «Куда идет король?»

Write #ff, 25.35847

‘Закрываем файл

Close ff

‘Открываем файл для просмотра

ThisWorkbook.FollowHyperlink (ThisWorkbook.Path & «myFile2»)

End Sub

Пример 3
Считываем строку, разделенную на отдельные элементы, из файла myFile1.txt и записываем в три переменные, по типу данных соответствующие элементам.

Sub Test3()

Dim ff As Integer, str1 As String, _

str2 As String, num1 As Single

‘Получаем свободный номер для открываемого файла

ff = FreeFile

‘Открываем файл myFile1.txt для чтения

Open ThisWorkbook.Path & «myFile1.txt» For Input As ff

‘Считываем строку из файла и записываем в переменные

Input #ff, str1, str2, num1

Close ff

‘Смотрим, что записалось в переменные

MsgBox «str1 = « & str1 & vbNewLine _

& «str2 = « & str2 & vbNewLine _

& «num1 = « & num1

End Sub

Попробуйте заменить в этом примере строку Input #ff, str1, str2, num1 сначала на строку Input #ff, str1, затем на строку Line Input #ff, str1, чтобы наглядно увидеть разницу между операторами Input # и Line Input #.

В следующих примерах (4 и 5) замена оператора Input # на Line Input # не приведет ни к каким изменениям, так как данные в строках файла myFile2 не разделены на элементы (поля).

Пример 4
Считываем поочередно три строки из файла myFile2 и записываем в три элемента массива, объявленного как Variant, так как в этот файл ранее были записаны две строки с текстом и одна с числом.

Sub Test4()

Dim ff As Integer, a(2) As Variant, i As Byte

‘Получаем свободный номер для открываемого файла

ff = FreeFile

‘Открываем файл myFile2 для чтения

Open ThisWorkbook.Path & «myFile2» For Input As ff

‘Считываем строки из файла и записываем в элементы массива

   For i = 0 To 2

      Input #ff, a(i)

   Next

Close ff

‘Смотрим, что записалось в элементы массива

MsgBox «a(0) = « & a(0) & vbNewLine _

& «a(1) = « & a(1) & vbNewLine _

& «a(2) = « & a(2)

End Sub

Пример 5
Считываем с помощью цикла Do While… Loop все строки из файла myFile2 и записываем построчно в переменную, объявленную как String (число из третьей строки запишется как текст). Для остановки цикла при достижении конца файла используем функцию EOF.

Sub Test5()

Dim ff As Integer, a As Variant, b As String

‘Получаем свободный номер для открываемого файла

ff = FreeFile

‘Открываем файл myFile2 для чтения

Open ThisWorkbook.Path & «myFile2» For Input As ff

‘Считываем строки из файла и записываем в элементы массива

   Do While Not EOF(ff)

      Input #ff, a

      b = b & a & vbNewLine

   Loop

Close ff

‘Смотрим, что записалось в переменную

MsgBox b

End Sub


Предыдущая часть темы об открытии файла для ввода и вывода информации опубликована в статье: Оператор Open (синтаксис, параметры). Смотрите также связанную статью: Функция FreeFile.

Смотрите, как создавать и открывать текстовые файлы с помощью методов CreateTextFile и OpenTextFile. Чтение файла, запись и добавление информации с помощью объекта TextStream.


You can VBA Read file binary or text data using a couple of different approaches in Excel. VBA provides you a set of native statements like Open to open and ready files. However in this article aside from showing you these native approaches to reading files using Excel Macros you can read CSV files and other structured data schemas using Jet.OLEDB driver, Microsoft Queries or also the FileSystemObject.

Text/binary files are common ways of storing data as opposed to databases or regular Excel files. Looking at various resources I missed a single resource which would demonstrate the various methods for PROPERLY reading files in VBA.

It is important to remember that you shouldn’t read all files using the same approach. Be aware of the structure of the file. If it is a structured CSV use the ADODB connection, if you need to read only a couple of rows read the file row by row or by chunks, else read the whole file. If you want performance – always select the right approach.

Reading text files in VBA

VBA Read text files (line by line)

To read an entire text file line by line use the code below.

Dim fileName As String, textData As String, textRow As String, fileNo As Integer
fileName = "C:text.txt"
fileNo = FreeFile 'Get first free file number  
    
Open fileName For Input As #fileNo
Do While Not EOF(fileNo)
   Line Input #fileNo, textRow
   textData = textData & textRow
Loop
Close #fileNo

VBA Read text files (read whole file)

To read an entire text file in one go (not line by line) use the code below.a

Dim fileName As String, textData As String, fileNo As Integer
fileName = "C:text.txt"
fileNo = FreeFile 'Get first free file number   
 
Open fileName For Input As #fileNo
textData = Input$(LOF(fileNo), fileNo)
Close #fileNo

VBA Read specific number of lines from a text file

In cases when you want to read specific lines from a text file you can adapt the line by line read code as below. It allows you to read a certain number of lines (noLines) from a text file from a specific start line number (sLine). If you set noLines to 0 it will read all lines till end of the file.

Dim fileName As String, textData As String, textRow As String, fileNo As Integer
Dim lineCounter as Long, sLine as Long, noLines as Long

fileName = "C:text.txt"

sLine = 20 'number of the first line you want to read
noLines = 100 'number of lines you want to read

fileNo = FreeFile 
Open fileName For Input As #fileNo
Do While Not EOF(fileNo)
  Line Input #fileNo, textRow
  If lineCount >= sLine and ((noLines > 0 and lineCount < noLines + sLine) or noLines = 0) then
    textData = textData &amp; textRow
  End If
  lineCount = lineCount + 1   
Loop
Close #fileNo

Reading CSV files in VBA

Reading CSV files (read whole file and process each row)

Reading a text file line by line into a string:

'Assuming file looks like this. File path: C:test.csv
'"Col1", "Col2", "Col3"
'1     , 2     , 3

directory = "C:"
fileName = "test.csv" 'Assuming test.csv is in C: directory
Set rs = CreateObject("ADODB.Recordset")
strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & directory & ";" _
& "Extended Properties=""text;HDR=Yes;FMT=Delimited"";"
strSQL = "SELECT * FROM " & fileName 
rs.Open strSQL, strcon, 3, 3
rs.MoveFirst
Do
   col1 = rs("Col1")
   col2 = rs("Col2")
   col3 = rs("Col3")
   rs.MoveNext
Loop Until rs.EOF

Reading CSV files (whole file to Worksheet)

Read whole file to an Excel Worksheet:

Dim ws as Worksheet, destRng as Range, fileName as String
fileName = "C:text.txt"
Set destRng = Range("A1")
Set ws = ActiveSheet
With ws.QueryTables.Add(Connection:= "TEXT;" & fileName & "", Destination:=destRng)
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 852
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    'Select your delimiter - selected below for Comma
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileTrailingMinusNumbers = True
    'This will refresh the query
End With

To refresh the CSV upload (in case the CSV was updated) simply run:

  
ws.QueryTables.Refresh BackgroundQuery:=False

Reading binary files in VBA

Dim fileName As String, fileNo As Integer, intVar As Integer
fileName = "C:text.bin"
fileNo = FreeFile

Open fileName For Binary Lock Read As #fileNo
Get #fileNo, , intVar
Close #fileNo

With Binary files often you will be using objects which are not of fixed byte length like Integers. For example you would want to read Strings from binary files together with other data types. In such cases use the Type object data type when writing to a file. Learn more here.
Below a simple example of reading a file to which a Type data type was saved to, including an Integer and String.

Type TestType
    intVar As Integer
    strVar As String
End Type

Sub ReadBinary()
    Dim fileName As String, fileNo As Integer, testVar As TestType
    fileName = "C:test.bin"

    fileNo = FreeFile
    Open fileName For Binary Lock Read As #fileNo
    Get #fileNo, , testVar
    Debug.Print testVar.intVar 'Print the Integer
    Debug.Print testVar.strVar 'Print the String
    Close #fileNo
End Sub

Reading XML files in VBA

XML files are basically text files which follow the XML taxonomy. You can try to read and process XML files similarly as text files shown above. However, given you will probably want to extract specific XML tag or attribute information I suggest reading my dedicated article below.

Functions needed to read files in VBA

Function Description
Open [path_to_file] For [Mode] [Access] [Lock] As [long_variable] Opens the file for read/write and returns the # file number (needs to be type of long) into long_variable
More info here. Parameters below:

  • Mode – Append, Binary, Input, Output, or Random
  • Access optional. Read, Write, or Read Write
  • Lock optional. Shared, Lock Read, Lock Write, and Lock Read Write.
Close Closes the file using the # file number.
More info here.
FreeFile Get next free file number available for the Open statement / FileOpen function. Using this function is important especially when operating on multiple files simultaneously.
More info here.
BOF(fileNumber) Returns true if you are at the beginning of the file described by the file number.
More info here.
EOF(fileNumber) Returns true if you have reached the end of the file described by the file number. More info here.
Loc(fileNumber) Returns the current read/write position within an open file. More info here.
LOF(fileNumber) Returns the size in bytes of the file represented by the file number. More info here.

Above functions allow native upload of file data. However for more complicated scenario you will probably go for the FileSystemObject.

VBA Read File Summary

Reading files in VBA is not hard and requires just a few lines of code usually. It is, however, important to use the appropriate approach to read a file in VBA. Not all files need to be read line-by-line which is usually inefficient. Equally so you need not always read the entire file if you just need the first few / last rows. Working with XML files is also not a challenge if you read through my post on how to work with XML files.

Want to Write to files instead?

If you are looking to write to files instead using VBA, read my article on how to write to files using VBA.

Понравилась статья? Поделить с друзьями:
  • Vba обновление полей word
  • Vba нумерованный список в word
  • Vba нечеткий поиск excel
  • Vba несколько книг excel в одну
  • Vba не работает excel только