Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как вытащить открытые файлы .xls в переменные - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как вытащить открытые файлы .xls в переменные (Макросы/Sub)
Как вытащить открытые файлы .xls в переменные
bankiroff Дата: Суббота, 07.11.2015, 12:07 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Всем добрый день!

"Ноги" возникшей проблемы растут из моей старой темы: Объединение файлов с похожими названиями (прошу прощения, что без ссылки, пишу с телефона, крайне не удобно). Решил создать новую тему, так как проблема не совсем имеет отношение к старой теме. Перехожу к сути вопроса. Имеется код:

[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. Иными словами, по результату выполнения открывается сразу несколько файлов, имеющих общее начало в названии.

Вопрос в том, как мне вычленить открывшиеся файлы в переменные? Дело в том, что мне необходимо дальше работать с этими файлами посредством макроса, а как к ним обратиться, я не могу понять.

Подскажите, пожалуйста!

Автор - bankiroff
Дата добавления - 07.11.2015 в 12:07
Manyasha Дата: Суббота, 07.11.2015, 14:22 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
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
[/vba]


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Суббота, 07.11.2015, 19:24
 
Ответить
Сообщение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
[/vba]

Автор - Manyasha
Дата добавления - 07.11.2015 в 14:22
bankiroff Дата: Суббота, 07.11.2015, 14:57 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
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, спасибо Вам большое за подсказку!

Только прошу Вас прокомментировать вот этот участок кода:

Цитата
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


Я предполагал, что можно реализовать через массив, но я очень трудно воспринимаю все, что связано с ними, а также с циклами :(

Прокомментируйте, пожалуйста, а дальше я уже сам разберусь.

Заранее спасибо!

Автор - bankiroff
Дата добавления - 07.11.2015 в 14:57
Manyasha Дата: Суббота, 07.11.2015, 19:26 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
bankiroff, прокомментировала все в предыдущем посте.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеbankiroff, прокомментировала все в предыдущем посте.

Автор - Manyasha
Дата добавления - 07.11.2015 в 19:26
bankiroff Дата: Воскресенье, 08.11.2015, 10:36 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Manyasha, спасибо Вам огромное! Вы мне очень помогли, спасибо! :)
 
Ответить
СообщениеManyasha, спасибо Вам огромное! Вы мне очень помогли, спасибо! :)

Автор - bankiroff
Дата добавления - 08.11.2015 в 10:36
bankiroff Дата: Понедельник, 09.11.2015, 06:16 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте, 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
Дата добавления - 09.11.2015 в 06:16
bankiroff Дата: Понедельник, 09.11.2015, 07:55 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Буду рад, если хоть кто-нибудь поможет :) я понимаю, что вопрос не по теме, просто он вытекает из предыдущего вопроса. На будущее обязательно учту, спасибо!
 
Ответить
СообщениеБуду рад, если хоть кто-нибудь поможет :) я понимаю, что вопрос не по теме, просто он вытекает из предыдущего вопроса. На будущее обязательно учту, спасибо!

Автор - bankiroff
Дата добавления - 09.11.2015 в 07:55
bankiroff Дата: Понедельник, 09.11.2015, 08:15 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Пишу с телефона, оформить тегами физически не могу:(
 
Ответить
СообщениеПишу с телефона, оформить тегами физически не могу:(

Автор - bankiroff
Дата добавления - 09.11.2015 в 08:15
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как вытащить открытые файлы .xls в переменные (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!