|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.11.2009, 15:39 | #1 |
Пользователь
Регистрация: 14.08.2009
Сообщений: 66
|
Как заставить код работать во всех книгах указанной папки
Всем привет!
Подскажите, пожалуйста, что не так! Мне нужно, чтобы один и тот же макрос выполнялся во всех книгах в одной папке одновременно. Сам макрос расположен в файле МАКРОС. Макрос выполняет суммирование по облигациям рыночной стоимости и НКД. Код: Sub Auto_Whrite_In_Books() Dim sFolder As String, sFiles As String, li As Long With Application.FileDialog(msoFileDialo gFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With Application.ScreenUpdating = False sFiles = Dir(sFolder & Application.PathSeparator & "*.xlsx") Do While sFiles <> "" Workbooks.Open sFiles Dim i As Double, n As Double For i = ActiveWorkbook.Sheets(1).Cells.Find ("Облигации").Row + 1 To ActiveWorkbook.Sheets(1).Cells.Find ("Итого Облигации предприятий:").Row - 1 For n = ActiveWorkbook.Sheets(1).Cells.Find ("% по облигациям").Row + 1 To ActiveWorkbook.Sheets(1).Cells.Find ("Итого % по облигациям:").Row - 1 If Mid(Cells(n, 1), InStr(Cells(n, 1), "№")) & "; " = Mid(Cells(i, 1), InStr(Cells(i, 1), "№")) Then Cells(i, 29) = Cells(i, 29) + Cells(n, 29) Cells(i, 29).NoteText "= A" & i & "+ A" & n & "" Exit For End If: Next: Next: ActiveWorkbook.Close True sFiles = Dir Loop Application.ScreenUpdating = True End Sub ПОДСКАЖИТЕ, что не так? ОШИБОК НЕТ, НО И НЕ РАБОТАЕТ! Заранее большое спасибо |
06.11.2009, 15:53 | #2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Вот так будет работать:
Код:
sFiles = Dir(sFolder & Application.PathSeparator & "*.xlsx") |
06.11.2009, 16:02 | #3 |
Пользователь
Регистрация: 14.08.2009
Сообщений: 66
|
Спасибо большое!
Только теперь он ошибку пишет: Invalide procedure call or argument в строчке If Mid(Cells(n, 1), InStr(Cells(n, 1), "№")) & "; " = Mid(Cells(i, 1), InStr(Cells(i, 1), "№")) Then |
06.11.2009, 16:11 | #4 |
Пользователь
Регистрация: 14.08.2009
Сообщений: 66
|
Правда ошибка выдается только для одного файла ПИ_TIP
Если его удалить из папки, то макрос работает! В чем проблема с данным файлом? |
06.11.2009, 16:14 | #5 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Ошибку вызывает эта часть кода: Код:
Соответственно, InStr(Cells(i, 1), "№") возвращает 0 А функция Mid не может считать текст, начиная с нулевой позиции... |
|
06.11.2009, 17:48 | #6 |
Участник клуба
Регистрация: 10.08.2009
Сообщений: 1,796
|
Здравствуйте Наталья.
Код вполне работоспособный Код:
Вынос текста в константы не только уменьшает нагрузку кода избавляя от необходимости неоднократной интерпретации, но и делает код более удобочитаемым. Использование переменных для однократного присвоения значения объекта лучше чем многократное обращение к объекту - "For i = ActiveWorkbook.Sheets(1).Cells" в цикле. Евгений. P.S. код заключенный в тэги [соde] ... [/соde] будет тоже "более удобочитаемым". Последний раз редактировалось Teslenko_EA; 06.11.2009 в 18:01. |
06.11.2009, 23:13 | #7 |
Пользователь
Регистрация: 14.08.2009
Сообщений: 66
|
Огромное Вам всем спасибо за помощь, за разъяснения и подсказки!
Очень многому меня научили! С самыми наилучшими пожеланиями, Наталья |
07.07.2010, 14:17 | #8 |
Пользователь
Регистрация: 20.01.2010
Сообщений: 53
|
Классно, отличная тема!
Последний раз редактировалось 1134; 08.07.2010 в 13:21. Причина: Решил проблему сам :) |
24.12.2012, 17:36 | #9 | |
Новичок
Джуниор
Регистрация: 24.12.2012
Сообщений: 3
|
Цитата:
|
|
24.12.2012, 18:59 | #10 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
ertree, данный код должен работать в любой версии Windows.
Возможно, вы как-то не так его используете? В чем проявляется проблема? Выскакивает ошибка? Если да, то на какой строке? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как в указанной директории узнать названия всех папок | evgenrpo | Общие вопросы C/C++ | 5 | 08.06.2009 14:20 |
Как заставить работать CheckBox? | ridmal | Microsoft Office Word | 1 | 21.05.2009 09:47 |
Как вывести название папок из указанной папки? | zotox | Помощь студентам | 1 | 01.05.2009 14:37 |
Как заставить работать php? | yourself | Помощь студентам | 9 | 20.05.2008 08:08 |
Как заставить работать dll ? | Volkogriz | Общие вопросы Delphi | 10 | 13.12.2007 10:24 |