Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/43: Рейтинг темы: голосов - 43, средняя оценка - 4.91
25 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 10

Как лучше перебрать несколько файлов Excel для открытия в цикле

18.06.2012, 21:08. Показов 8087. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые программисты я только начинаю осваивать VBA, поэтому по возможности ответе подробно!

Ситуация следующая: я из файла excel открываю поочередно несколько файлов также excel, в которых у меня работает один и тот же цикл.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Workbooks.Open Filename:=putb & "\Б.Карабулак.xlsx"
       Range("B1:B30").Select
       For Each c In ActiveSheet.Range("b1:b30")
        If c.Value = "Итого" Then
           c.Offset(0, 4).Select
           Selection.Copy
           Windows("Доходы оперативно 2012.xls").Activate
           Selection.Cells(i, j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
           :=False, Transpose:=False
           k = ActiveCell.Value
           ActiveCell.Value = k / 1.18 / 1000
           Windows("Б.Карабулак.xlsx").Activate
           ActiveWindow.Close
           Exit For
        End If
    Next c
и так далее, пошел следующий файл.

1) Подскажите пожалуйста: можно как-то перебирать файлы в цикле?
2) По поводу кода может я что-то написал не корректно, не оптимально?

Заранее благодарен!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.06.2012, 21:08
Ответы с готовыми решениями:

Можно ли выбрать несколько файлов одновременно для открытия через CommonDialog
вот так выбираю файл для открытия. CD1.Filter = "TXT|*.txt|DOC|*.doc|" CD1.ShowOpen Text1.Text = CD1.FileName можно ли...

Перебрать контроллы в цикле для изменения их свойств
Суть: есть label1, label2, label3 Можно ли вместо label1.Text = "1"; label2.Text = "2"; label3.Text = "3"; сделать что-то...

Как перебрать объект в цикле?
Добрый вечер!Получаю ajax запросом объект,хочу его перебрать циклом и вывести все сообщения,но почему-то я не могу перебрать циклом...

3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,701
Записей в блоге: 14
18.06.2012, 21:30
Конечно!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub Fil()
 
Dim wb as WorkBook
Dim Sh As WorkSheet
 
     Fnames=Array("Б.Карабулак","Вольск","Балтай")
 
     For each fnam in fnames
 
          Set wb=Workbooks.Open Filename:=putb & "\" & fnam & ".xls"
          Set Sh=wb.Sheets(1) 
          Sh.Select
          Range("B1:B30").Select
          For Each c In ActiveSheet.Range("b1:b30")
               If c.Value = "Итого" Then
                  c.Offset(0, 4).Select
                  Selection.Copy
                  Windows("Доходы оперативно 2012.xls").Activate
                  Selection.Cells(i, j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                  :=False, Transpose:=False
                  k = ActiveCell.Value
                  ActiveCell.Value = k / 1.18 / 1000
                  Windows(fnam & ".xls").Activate
                  ActiveWindow.Close
                  Exit For
              End If
         Next 
 
         wb.Close
 
      Next
 
End Sub
Примерно так... Привет, земляк!
1
25 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 10
18.06.2012, 21:42  [ТС]
Привет, земляк)))

Большое спасибо! Буду завтра на работе экспериментировать.
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
19.06.2012, 00:44
Несколько советов.

1. Без необходимости не используйте методы Activate и Select, т.к. они сильно замедляют работу макроса. Если же без них почему-либо нельзя обойтись, то, хотя бы, отключайте на время преобразований перерисовку экрана:
Visual Basic
1
Application.ScreenUpdating = False
2. Без необходимости не используйте перебор всех ячеек некоего диапазона, т.к. это тоже медленная процедура. Для выборки нужных ячеек лучше применять методы Find/FindNext или SpecialCells (по ситуации).

3. В коллекцию Sheets кроме рабочих листов входят ещё и листы диаграмм, а они не имеют ячеек. Поэтому для гарантированного обращения к рабочим листам используйте коллекцию Worksheets.

4. Для закрытия открытых рабочей книги или окна совсем не обязательно их предварительно активировать.

5. Копирование значений из одной ячейки в другую (или из диапазона в диапазон) чаще всего уместнее выполнять напрямую, а не с помощью метода PasteSpecial.
Примеры:
Visual Basic
1
2
3
Cells(i, j).Value = Cells(n, m).Value
Worksheets(2).Range("a1:c1").Value = Worksheets(1).Range("a1:c1").Value
Worksheets(2).Range("a1:c1").Value = Application.Transpose(Worksheets(1).Range("a1:a3").Value)
6. В ряде случаев намного быстрее не открывать рабочие книги (например, если они имеют большие объёмы и/или при их открывании выполняются какие-то вычисления), а пользоваться методом ExecuteExcel4Macro.
Пример:
Visual Basic
1
2
3
4
5
6
7
8
9
For i = 1 To 4
    arg = "'e:\temp\[book2.xls]Лист1'!" & Range("a" & i).Address(, , xlR1C1)
    x = ExecuteExcel4Macro(arg)
    If x = "Итог" Then
        arg = "'e:\temp\[book2.xls]Лист1'!" & Range("a" & i).Offset(0, 2).Address(, , xlR1C1)
        y = ExecuteExcel4Macro(arg)
        Exit For
    End If
Next
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.06.2012, 00:44
Помогаю со студенческими работами здесь

Перебрать все PictureBox в цикле для изменения их свойств
К примеру если в Си шарп есть 100 PictureBox(ов). Возможно ли организовать цикл к примеру такой: for (int i = 1; i < 100; i++) ...

Как перебрать словари Dictionary в цикле?
Добрый день. В программе имеется несколько десятков словарей (с одинаковыми ключами) типа: Dictionary<string, int> и...

Как перебрать компоненты формы в цикле
Всем привет! Помогите написать цикл который бы проверял выведен ли хоть один из label в форме, если выведен то спуститься на 1единицу вниз

Как сделать приложение для открытия файлов?
К примеру, я хочу написать приложение для просмотра фото на sfml, ну и как реализовать открытие конкретного файла, чтобы путь к нему...

Как перебрать в цикле свойства определенного класса?
Подскажите какой-нибудь 'дешевый' способ как перебрать в цикле свойства определенного класса


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru