Здравствуйте! Столкнулся со следующей проблемой: вот код после которой, выходит ошибка: run time error '1004': Method 'Run' of object'_application' failed
Модератор: Для оформления кода используйте кнопку с #
Здравствуйте! Столкнулся со следующей проблемой: вот код после которой, выходит ошибка: run time error '1004': Method 'Run' of object'_application' failed
udarock, вообще-то, "хорошая практика" - в интерфейсных модулях (а обработчики событий в модулях листа и книги - это интерфейс) использовать вызовы только локальных (для данного модуля) переменных, процедур и т.п. И обработки, связанные только с данным объектом, к которому и относится модуль. Весь же "общий" функционал должен располагаться в модулях проекта. Вот что вы подразумевали, вызывая "нажание" кнопки с другого листа (которая, в свою очередь у вас очищает диапазон именно на том листе, где расположена)? Что у вас "вызывающая" кнопка очистит диапазон уже на своём листе? Что очистится диапазон на том листе, где расположена "вызываемая" кнопка? И откуда вы взяли, что для вызова процедуры внутри одного проекта необходимо задействовать метод .Run всего приложения? Ну а также - вам ничего не говорит слово "Private" в декларации процедур? "Правильно" было (если вам все же надо очищать диапазон именно на текущем листе) описАть процедуру, очищающую нужный диапазон активного (или переданного в параметрах) листа. Поместить эту процедуру в общий модуль. А в обработчиках событий кнопок - вызывать эту процедуру. Ещё "правильнее" - не множить кнопки с одинаковым функционалом на каждом листе, а вынести кнопку с такой функцией куда-нибудь в общий интерфейс (в меню, на панель), или сделать собственное меню, или вообще создать собственный класс с такой кнопкой и её функционалом - а в интерфейс вставлять уже объекты этого класса... так, это меня уже заносит :) Ещё правильнее - начать с чтения книг по VBA, изучения примеров и т.д. - а не ломиться с собственными "изобретениями" в области построения приложения.
Не, там всё немного сложнее...
udarock, вообще-то, "хорошая практика" - в интерфейсных модулях (а обработчики событий в модулях листа и книги - это интерфейс) использовать вызовы только локальных (для данного модуля) переменных, процедур и т.п. И обработки, связанные только с данным объектом, к которому и относится модуль. Весь же "общий" функционал должен располагаться в модулях проекта. Вот что вы подразумевали, вызывая "нажание" кнопки с другого листа (которая, в свою очередь у вас очищает диапазон именно на том листе, где расположена)? Что у вас "вызывающая" кнопка очистит диапазон уже на своём листе? Что очистится диапазон на том листе, где расположена "вызываемая" кнопка? И откуда вы взяли, что для вызова процедуры внутри одного проекта необходимо задействовать метод .Run всего приложения? Ну а также - вам ничего не говорит слово "Private" в декларации процедур? "Правильно" было (если вам все же надо очищать диапазон именно на текущем листе) описАть процедуру, очищающую нужный диапазон активного (или переданного в параметрах) листа. Поместить эту процедуру в общий модуль. А в обработчиках событий кнопок - вызывать эту процедуру. Ещё "правильнее" - не множить кнопки с одинаковым функционалом на каждом листе, а вынести кнопку с такой функцией куда-нибудь в общий интерфейс (в меню, на панель), или сделать собственное меню, или вообще создать собственный класс с такой кнопкой и её функционалом - а в интерфейс вставлять уже объекты этого класса... так, это меня уже заносит :) Ещё правильнее - начать с чтения книг по VBA, изучения примеров и т.д. - а не ломиться с собственными "изобретениями" в области построения приложения.AndreTM
я в vba не очень силен. Дело в том что мне нужно очистить 10 листов с одного листа, пробывал разные варианты не один не получился. всё время какая- нибудь ошибка выходит. Причем в другом проекте всё работает нормально. Спасибо:) После удаления всё работает.
я в vba не очень силен. Дело в том что мне нужно очистить 10 листов с одного листа, пробывал разные варианты не один не получился. всё время какая- нибудь ошибка выходит. Причем в другом проекте всё работает нормально. Спасибо:) После удаления всё работает.udarock
Sub cleaner() Dim i& OnErrorResumeNext' на случай обьединенных ячеек. For i = 1To ThisWorkbook.Sheets.Count
Sheets(i).[A1:D3].ClearContents Next EndSub
Очистит диапазон A1:D3 на всех листах.
Sub cleaner() Dim i& OnErrorResumeNext' на случай обьединенных ячеек. For i = 1To ThisWorkbook.Sheets.Count
Sheets(i).[A1:D3].ClearContents Next EndSub
а можно я пять копеек... речь про модуль книги. а ещё можно вот то что вот там сверху сделать функцией (как что то говорил AndreTM, ) и сделать для одного листа(убрать циклы) и вызвать где надо. вдруг чистить потребуется не все листы !?
а можно я пять копеек... речь про модуль книги. а ещё можно вот то что вот там сверху сделать функцией (как что то говорил AndreTM, ) и сделать для одного листа(убрать циклы) и вызвать где надо. вдруг чистить потребуется не все листы !?Матраскин
Здравствуйте! Я тоже пока не могу найти решение почему при очистке страниц на одной из них выдает ошибку: run time error '1004': Method 'Run' of object'_application' failed
PublicFunction Очистка_страницы(Лист) 'On Error Resume Next
ActiveWorkbook.Sheets(Лист).UsedRange.Offset(1).ClearContents EndFunction
Здравствуйте! Я тоже пока не могу найти решение почему при очистке страниц на одной из них выдает ошибку: run time error '1004': Method 'Run' of object'_application' failed
PublicFunction Очистка_страницы(Лист) 'On Error Resume Next
ActiveWorkbook.Sheets(Лист).UsedRange.Offset(1).ClearContents EndFunction
У меня в книге Excel есть 3 страницы. На каждой из них по 45542 записей. При запуске макроса первый и третий листы очищает, а на третьем выдает ошикбу.
Поможите разобраться, спасибо. Зачем прикалываться не понимаю.
Попробовал очистить буфер данных - не помогло
У меня в книге Excel есть 3 страницы. На каждой из них по 45542 записей. При запуске макроса первый и третий листы очищает, а на третьем выдает ошикбу.
Поможите разобраться, спасибо. Зачем прикалываться не понимаю.
Попробовал очистить буфер данных - не помоглоA_3485
Сообщение отредактировал A_3485 - Четверг, 08.05.2014, 15:19
Думаю, что там все просто. на втором листе UsedRange на все строки смотрит, а не только на те, где данные. Встаньте в А1 и нажмите Контрл+Енд. Какая ячейка выделится?. Зачем Вам в коде Offset(1)? Убейте его. А приложить файл 3 листа по 45000 записей полюбому не получится.
Думаю, что там все просто. на втором листе UsedRange на все строки смотрит, а не только на те, где данные. Встаньте в А1 и нажмите Контрл+Енд. Какая ячейка выделится?. Зачем Вам в коде Offset(1)? Убейте его. А приложить файл 3 листа по 45000 записей полюбому не получится._Boroda_
Игорь, а чем тебе так уж ActiveWorkbook не нравится? Я в макросах, хранящихся в в Personal.xls или в надстройках, часто такое обращение использую.
Игорь, а чем тебе так уж ActiveWorkbook не нравится? Я в макросах, хранящихся в в Personal.xls или в надстройках, часто такое обращение использую.Alex_ST
Ну например открыты две книги и персонал с этим макросом. И выполняется код, которым задумано обработать конкретный лист - так зачем в этой функции оганичивать применение только в активной книге, тем самым заставлять себя думать о том, активна ли она в момент вызова функции? А может её сперва нужно специально активировать? Проще прописать обрабатывать конкретный лист - а когда указываем лист, то можно указать из активной книги, а можно указать и любой другой, не думая кто там активен, кто пассивен
Ну например открыты две книги и персонал с этим макросом. И выполняется код, которым задумано обработать конкретный лист - так зачем в этой функции оганичивать применение только в активной книге, тем самым заставлять себя думать о том, активна ли она в момент вызова функции? А может её сперва нужно специально активировать? Проще прописать обрабатывать конкретный лист - а когда указываем лист, то можно указать из активной книги, а можно указать и любой другой, не думая кто там активен, кто пассивен Hugo