"Ноги" возникшей проблемы растут из моей старой темы: Объединение файлов с похожими названиями (прошу прощения, что без ссылки, пишу с телефона, крайне не удобно). Решил создать новую тему, так как проблема не совсем имеет отношение к старой теме. Перехожу к сути вопроса. Имеется код:
[vba]
Код
Dim iPath$, iMaska$, iFile$ iPath = ThisWorkbook.Path & "\" iMaska = TextBox1 & "*.xls*" iFile = Dir(iPath & iMaska) Do While iFile <> "" Workbooks.Open Filename:=iPath & iFile
[/vba]
Данный код реализует поиск и открытие екселевских файлов по маске с использованием введенных данных в textbox. Иными словами, по результату выполнения открывается сразу несколько файлов, имеющих общее начало в названии.
Вопрос в том, как мне вычленить открывшиеся файлы в переменные? Дело в том, что мне необходимо дальше работать с этими файлами посредством макроса, а как к ним обратиться, я не могу понять.
Подскажите, пожалуйста!
Всем добрый день!
"Ноги" возникшей проблемы растут из моей старой темы: Объединение файлов с похожими названиями (прошу прощения, что без ссылки, пишу с телефона, крайне не удобно). Решил создать новую тему, так как проблема не совсем имеет отношение к старой теме. Перехожу к сути вопроса. Имеется код:
[vba]
Код
Dim iPath$, iMaska$, iFile$ iPath = ThisWorkbook.Path & "\" iMaska = TextBox1 & "*.xls*" iFile = Dir(iPath & iMaska) Do While iFile <> "" Workbooks.Open Filename:=iPath & iFile
[/vba]
Данный код реализует поиск и открытие екселевских файлов по маске с использованием введенных данных в textbox. Иными словами, по результату выполнения открывается сразу несколько файлов, имеющих общее начало в названии.
Вопрос в том, как мне вычленить открывшиеся файлы в переменные? Дело в том, что мне необходимо дальше работать с этими файлами посредством макроса, а как к ним обратиться, я не могу понять.
Dim iPath$, iMaska$, iFile$ iPath = ThisWorkbook.Path & "\" iMaska = "123" & "*.xls*"' 123 - это для примера, забыла поменять обратно на Ваш textbox1 Dim arrFiles() As Workbook' объявляем массив для книг Dim i&: i = 0 iFile = Dir(iPath & iMaska) Do While iFile <> "" ReDim Preserve arrFiles(0 To i)' меняем размерность массива от 0 до i Set arrFiles(i) = Workbooks.Open(iPath & iFile)' запоминаем открывшуюся книгу в i-ый эл-т массива arrFiles i = i + 1' увеличиваем i для перехода к следующему эл-ту массива iFile = Dir' запоминаем текущую директорию для перехода к следующей книге Loop
[/vba] а дальше работать с массивом книг arrFiles [vba]
Код
For i = 0 To UBound(arrFiles) Debug.Print arrFiles(i).Name arrFiles(i).Activate' arrFiles(i) - это наша i-я книга. Работаем с переменной, точно также, как и с workbooks("123.xlsx") например Next i
[/vba]
bankiroff, например так: [vba]
Код
Dim iPath$, iMaska$, iFile$ iPath = ThisWorkbook.Path & "\" iMaska = "123" & "*.xls*"' 123 - это для примера, забыла поменять обратно на Ваш textbox1 Dim arrFiles() As Workbook' объявляем массив для книг Dim i&: i = 0 iFile = Dir(iPath & iMaska) Do While iFile <> "" ReDim Preserve arrFiles(0 To i)' меняем размерность массива от 0 до i Set arrFiles(i) = Workbooks.Open(iPath & iFile)' запоминаем открывшуюся книгу в i-ый эл-т массива arrFiles i = i + 1' увеличиваем i для перехода к следующему эл-ту массива iFile = Dir' запоминаем текущую директорию для перехода к следующей книге Loop
[/vba] а дальше работать с массивом книг arrFiles [vba]
Код
For i = 0 To UBound(arrFiles) Debug.Print arrFiles(i).Name arrFiles(i).Activate' arrFiles(i) - это наша i-я книга. Работаем с переменной, точно также, как и с workbooks("123.xlsx") например Next i
Только прошу Вас прокомментировать вот этот участок кода:
Цитата
Dim arrFiles() As Workbook Dim i&: i = 0 iFile = Dir(iPath & iMaska) Do While iFile <> "" ReDim Preserve arrFiles(0 To i) Set arrFiles(i) = Workbooks.Open(iPath & iFile) i = i + 1 iFile = Dir Loop
For i = 0 To UBound(arrFiles) Debug.Print arrFiles(i).Name arrFiles(i).Activate Next i
Я предполагал, что можно реализовать через массив, но я очень трудно воспринимаю все, что связано с ними, а также с циклами :(
Прокомментируйте, пожалуйста, а дальше я уже сам разберусь.
Заранее спасибо!
Manyasha, спасибо Вам большое за подсказку!
Только прошу Вас прокомментировать вот этот участок кода:
Цитата
Dim arrFiles() As Workbook Dim i&: i = 0 iFile = Dir(iPath & iMaska) Do While iFile <> "" ReDim Preserve arrFiles(0 To i) Set arrFiles(i) = Workbooks.Open(iPath & iFile) i = i + 1 iFile = Dir Loop
For i = 0 To UBound(arrFiles) Debug.Print arrFiles(i).Name arrFiles(i).Activate Next i
Я предполагал, что можно реализовать через массив, но я очень трудно воспринимаю все, что связано с ними, а также с циклами :(
Прокомментируйте, пожалуйста, а дальше я уже сам разберусь.
Здравствуйте, Manyasha! Прошу прощения за новый вопрос, но мне очень нужна подсказка, так как вопрос связан с массивом.
For i=0 To Ubound(arrFiles) Debug.Print arrFiles(i).Name arrFiles(i).Activate Range("E3:E30").Select Selection.Copy ActiveWorkbook.Close Workbooks.Open Filename:=iPath & iNewCSV Range("A2:A30").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save Next i
Трудность заключается в том, что если в массиве несколько книг, то при копировании ячеек E3:E30 и последующей их вставки в файл iNewCSW, происходит постоянная перезапись ячеек в этой книге: A2:A30, а мне необходимо, чтобы они копировались друг за другом в столбец, не затирая предыдущие данные, скопированные с предыдущей книги массива.
Помогите, пожалуйста, в долгу не останусь! :) [moder]1. оформите код макроса тегами (кнопка #). 2. Это другой вопрос и, следовательно, другая тема. Посмотрите Правила форума. 3. Вам ответ только от Manyashи нужен? Другим не отвечать?
Здравствуйте, Manyasha! Прошу прощения за новый вопрос, но мне очень нужна подсказка, так как вопрос связан с массивом.
For i=0 To Ubound(arrFiles) Debug.Print arrFiles(i).Name arrFiles(i).Activate Range("E3:E30").Select Selection.Copy ActiveWorkbook.Close Workbooks.Open Filename:=iPath & iNewCSV Range("A2:A30").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save Next i
Трудность заключается в том, что если в массиве несколько книг, то при копировании ячеек E3:E30 и последующей их вставки в файл iNewCSW, происходит постоянная перезапись ячеек в этой книге: A2:A30, а мне необходимо, чтобы они копировались друг за другом в столбец, не затирая предыдущие данные, скопированные с предыдущей книги массива.
Помогите, пожалуйста, в долгу не останусь! :) [moder]1. оформите код макроса тегами (кнопка #). 2. Это другой вопрос и, следовательно, другая тема. Посмотрите Правила форума. 3. Вам ответ только от Manyashи нужен? Другим не отвечать?bankiroff
Буду рад, если хоть кто-нибудь поможет я понимаю, что вопрос не по теме, просто он вытекает из предыдущего вопроса. На будущее обязательно учту, спасибо!
Буду рад, если хоть кто-нибудь поможет я понимаю, что вопрос не по теме, просто он вытекает из предыдущего вопроса. На будущее обязательно учту, спасибо!bankiroff