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

Вход

Регистрация

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

 

= Мир MS Excel/run time error 1004 - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » run time error 1004 (Макросы Sub)
run time error 1004
udarock Дата: Вторник, 07.01.2014, 22:07 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 10 ±
Замечаний: 20% ±

Excel 2013
Здравствуйте!
Столкнулся со следующей проблемой:
вот код после которой, выходит ошибка:
run time error '1004': Method 'Run' of object'_application' failed

[vba]
Код
Private Sub CommandButton1_Click()
Application.Run "Лист2.CommandButton1_Click"
End Sub
[/vba]

С чем это связано и как решить проблему?
[moder]Для оформления кода используйте кнопку с #[/moder]
К сообщению приложен файл: collector2.xlsm (29.7 Kb)


Сообщение отредактировал udarock - Вторник, 07.01.2014, 22:11
 
Ответить
СообщениеЗдравствуйте!
Столкнулся со следующей проблемой:
вот код после которой, выходит ошибка:
run time error '1004': Method 'Run' of object'_application' failed

[vba]
Код
Private Sub CommandButton1_Click()
Application.Run "Лист2.CommandButton1_Click"
End Sub
[/vba]

С чем это связано и как решить проблему?
[moder]Для оформления кода используйте кнопку с #[/moder]

Автор - udarock
Дата добавления - 07.01.2014 в 22:07
....... Дата: Вторник, 07.01.2014, 22:18 | Сообщение № 2
Группа: Гости
Удалить
Select
и
Selection
 
Ответить
СообщениеУдалить
Select
и
Selection

Автор - .......
Дата добавления - 07.01.2014 в 22:18
AndreTM Дата: Вторник, 07.01.2014, 23:18 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Не, там всё немного сложнее...

udarock, вообще-то, "хорошая практика" - в интерфейсных модулях (а обработчики событий в модулях листа и книги - это интерфейс) использовать вызовы только локальных (для данного модуля) переменных, процедур и т.п. И обработки, связанные только с данным объектом, к которому и относится модуль. Весь же "общий" функционал должен располагаться в модулях проекта.
Вот что вы подразумевали, вызывая "нажание" кнопки с другого листа (которая, в свою очередь у вас очищает диапазон именно на том листе, где расположена)? Что у вас "вызывающая" кнопка очистит диапазон уже на своём листе? Что очистится диапазон на том листе, где расположена "вызываемая" кнопка? И откуда вы взяли, что для вызова процедуры внутри одного проекта необходимо задействовать метод .Run всего приложения? Ну а также - вам ничего не говорит слово "Private" в декларации процедур?
"Правильно" было (если вам все же надо очищать диапазон именно на текущем листе) описАть процедуру, очищающую нужный диапазон активного (или переданного в параметрах) листа. Поместить эту процедуру в общий модуль. А в обработчиках событий кнопок - вызывать эту процедуру.
Ещё "правильнее" - не множить кнопки с одинаковым функционалом на каждом листе, а вынести кнопку с такой функцией куда-нибудь в общий интерфейс (в меню, на панель), или сделать собственное меню, или вообще создать собственный класс с такой кнопкой и её функционалом - а в интерфейс вставлять уже объекты этого класса... так, это меня уже заносит :)
Ещё правильнее - начать с чтения книг по VBA, изучения примеров и т.д. - а не ломиться с собственными "изобретениями" в области построения приложения.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеНе, там всё немного сложнее...

udarock, вообще-то, "хорошая практика" - в интерфейсных модулях (а обработчики событий в модулях листа и книги - это интерфейс) использовать вызовы только локальных (для данного модуля) переменных, процедур и т.п. И обработки, связанные только с данным объектом, к которому и относится модуль. Весь же "общий" функционал должен располагаться в модулях проекта.
Вот что вы подразумевали, вызывая "нажание" кнопки с другого листа (которая, в свою очередь у вас очищает диапазон именно на том листе, где расположена)? Что у вас "вызывающая" кнопка очистит диапазон уже на своём листе? Что очистится диапазон на том листе, где расположена "вызываемая" кнопка? И откуда вы взяли, что для вызова процедуры внутри одного проекта необходимо задействовать метод .Run всего приложения? Ну а также - вам ничего не говорит слово "Private" в декларации процедур?
"Правильно" было (если вам все же надо очищать диапазон именно на текущем листе) описАть процедуру, очищающую нужный диапазон активного (или переданного в параметрах) листа. Поместить эту процедуру в общий модуль. А в обработчиках событий кнопок - вызывать эту процедуру.
Ещё "правильнее" - не множить кнопки с одинаковым функционалом на каждом листе, а вынести кнопку с такой функцией куда-нибудь в общий интерфейс (в меню, на панель), или сделать собственное меню, или вообще создать собственный класс с такой кнопкой и её функционалом - а в интерфейс вставлять уже объекты этого класса... так, это меня уже заносит :)
Ещё правильнее - начать с чтения книг по VBA, изучения примеров и т.д. - а не ломиться с собственными "изобретениями" в области построения приложения.

Автор - AndreTM
Дата добавления - 07.01.2014 в 23:18
udarock Дата: Среда, 08.01.2014, 13:38 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 10 ±
Замечаний: 20% ±

Excel 2013
я в vba не очень силен. Дело в том что мне нужно очистить 10 листов с одного листа, пробывал разные варианты не один не получился. всё время какая- нибудь ошибка выходит. Причем в другом проекте всё работает нормально. Спасибо:) После удаления всё работает.
 
Ответить
Сообщениея в vba не очень силен. Дело в том что мне нужно очистить 10 листов с одного листа, пробывал разные варианты не один не получился. всё время какая- нибудь ошибка выходит. Причем в другом проекте всё работает нормально. Спасибо:) После удаления всё работает.

Автор - udarock
Дата добавления - 08.01.2014 в 13:38
SkyPro Дата: Среда, 08.01.2014, 14:43 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub cleaner()
Dim i&
On Error Resume Next ' на случай обьединенных ячеек.
For i = 1 To ThisWorkbook.Sheets.Count
      Sheets(i).[A1:D3].ClearContents
Next
End Sub
[/vba]
Очистит диапазон A1:D3 на всех листах.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 08.01.2014, 14:44
 
Ответить
Сообщение[vba]
Код
Sub cleaner()
Dim i&
On Error Resume Next ' на случай обьединенных ячеек.
For i = 1 To ThisWorkbook.Sheets.Count
      Sheets(i).[A1:D3].ClearContents
Next
End Sub
[/vba]
Очистит диапазон A1:D3 на всех листах.

Автор - SkyPro
Дата добавления - 08.01.2014 в 14:43
Матраскин Дата: Среда, 08.01.2014, 15:24 | Сообщение № 6
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
а можно я пять копеек... речь про модуль книги.
а ещё можно вот то что вот там сверху сделать функцией (как что то говорил AndreTM, ) и сделать для одного листа(убрать циклы) и вызвать где надо. вдруг чистить потребуется не все листы !?


в интернете опять кто-то не прав
 
Ответить
Сообщениеа можно я пять копеек... речь про модуль книги.
а ещё можно вот то что вот там сверху сделать функцией (как что то говорил AndreTM, ) и сделать для одного листа(убрать циклы) и вызвать где надо. вдруг чистить потребуется не все листы !?

Автор - Матраскин
Дата добавления - 08.01.2014 в 15:24
SkyPro Дата: Среда, 08.01.2014, 16:55 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Цитата Матраскин, 08.01.2014 в 15:24, в сообщении № 6
вдруг чистить потребуется не все листы !?


Тогда все еще проще :)
[vba]
Код
Sub cleaner()
[A1:D3].ClearContents
End Sub
[/vba]
И вызывать по кнопке на любом листе.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 08.01.2014, 16:55
 
Ответить
Сообщение
Цитата Матраскин, 08.01.2014 в 15:24, в сообщении № 6
вдруг чистить потребуется не все листы !?


Тогда все еще проще :)
[vba]
Код
Sub cleaner()
[A1:D3].ClearContents
End Sub
[/vba]
И вызывать по кнопке на любом листе.

Автор - SkyPro
Дата добавления - 08.01.2014 в 16:55
A_3485 Дата: Четверг, 08.05.2014, 13:42 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

2007
Здравствуйте!
Я тоже пока не могу найти решение почему при очистке страниц на одной из них выдает ошибку: run time error '1004': Method 'Run' of object'_application' failed

[vba]
Код
Public Function Очистка_страницы(Лист)
     'On Error Resume Next
     ActiveWorkbook.Sheets(Лист).UsedRange.Offset(1).ClearContents
End Function
[/vba]
 
Ответить
СообщениеЗдравствуйте!
Я тоже пока не могу найти решение почему при очистке страниц на одной из них выдает ошибку: run time error '1004': Method 'Run' of object'_application' failed

[vba]
Код
Public Function Очистка_страницы(Лист)
     'On Error Resume Next
     ActiveWorkbook.Sheets(Лист).UsedRange.Offset(1).ClearContents
End Function
[/vba]

Автор - A_3485
Дата добавления - 08.05.2014 в 13:42
RAN Дата: Четверг, 08.05.2014, 14:32 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Спросите здесь


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеСпросите здесь

Автор - RAN
Дата добавления - 08.05.2014 в 14:32
A_3485 Дата: Четверг, 08.05.2014, 15:18 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

2007
У меня в книге Excel есть 3 страницы. На каждой из них по 45542 записей. При запуске макроса первый и третий листы очищает, а на третьем выдает ошикбу.

Поможите разобраться, спасибо. Зачем прикалываться не понимаю.

Попробовал очистить буфер данных - не помогло


Сообщение отредактировал A_3485 - Четверг, 08.05.2014, 15:19
 
Ответить
СообщениеУ меня в книге Excel есть 3 страницы. На каждой из них по 45542 записей. При запуске макроса первый и третий листы очищает, а на третьем выдает ошикбу.

Поможите разобраться, спасибо. Зачем прикалываться не понимаю.

Попробовал очистить буфер данных - не помогло

Автор - A_3485
Дата добавления - 08.05.2014 в 15:18
RAN Дата: Четверг, 08.05.2014, 17:20 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Вот и я спрашиваю - зачем?
У меня тоже есть книга с 3 листами, и все очищает.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВот и я спрашиваю - зачем?
У меня тоже есть книга с 3 листами, и все очищает.

Автор - RAN
Дата добавления - 08.05.2014 в 17:20
_Boroda_ Дата: Четверг, 08.05.2014, 18:32 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Думаю, что там все просто. на втором листе UsedRange на все строки смотрит, а не только на те, где данные. Встаньте в А1 и нажмите Контрл+Енд. Какая ячейка выделится?.
Зачем Вам в коде Offset(1)? Убейте его.
А приложить файл 3 листа по 45000 записей полюбому не получится.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДумаю, что там все просто. на втором листе UsedRange на все строки смотрит, а не только на те, где данные. Встаньте в А1 и нажмите Контрл+Енд. Какая ячейка выделится?.
Зачем Вам в коде Offset(1)? Убейте его.
А приложить файл 3 листа по 45000 записей полюбому не получится.

Автор - _Boroda_
Дата добавления - 08.05.2014 в 18:32
RAN Дата: Четверг, 08.05.2014, 18:36 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Убейте его.

И шапку корова языком слизнет. :)


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Убейте его.

И шапку корова языком слизнет. :)

Автор - RAN
Дата добавления - 08.05.2014 в 18:36
_Boroda_ Дата: Четверг, 08.05.2014, 21:46 | Сообщение № 14
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
И шапку корова языком слизнет.

А про шапку речи не было. Была речь про очистку страниц
почему при очистке страниц


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
И шапку корова языком слизнет.

А про шапку речи не было. Была речь про очистку страниц
почему при очистке страниц

Автор - _Boroda_
Дата добавления - 08.05.2014 в 21:46
RAN Дата: Четверг, 08.05.2014, 22:49 | Сообщение № 15
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Мявкну на сон грядущий.
[vba]
Код
Sub Мяу()
     Dim arr
     arr = Sheets(1).Rows(1).Value
     Sheets(1).Cells.ClearContents
     Sheets(1).Rows(1).Value = arr
     Sheets(1).UsedRange
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМявкну на сон грядущий.
[vba]
Код
Sub Мяу()
     Dim arr
     arr = Sheets(1).Rows(1).Value
     Sheets(1).Cells.ClearContents
     Sheets(1).Rows(1).Value = arr
     Sheets(1).UsedRange
End Sub
[/vba]

Автор - RAN
Дата добавления - 08.05.2014 в 22:49
Alex_ST Дата: Четверг, 08.05.2014, 22:50 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну, чтобы шапку не сносило можно и ресайзнуть:
[vba]
Код
Public Function Очистка_страницы(Лист)
     'On Error Resume Next
     With ActiveWorkbook.Sheets(Лист).UsedRange
         .Offset(1).Resize(.Rows.Count - 1).ClearContents
     End With
End Function
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Четверг, 08.05.2014, 22:52
 
Ответить
СообщениеНу, чтобы шапку не сносило можно и ресайзнуть:
[vba]
Код
Public Function Очистка_страницы(Лист)
     'On Error Resume Next
     With ActiveWorkbook.Sheets(Лист).UsedRange
         .Offset(1).Resize(.Rows.Count - 1).ClearContents
     End With
End Function
[/vba]

Автор - Alex_ST
Дата добавления - 08.05.2014 в 22:50
Alex_ST Дата: Четверг, 08.05.2014, 22:59 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
А вообще-то лучше уж число строк в шапке задавать опционально:[vba]
Код
Public Function Очистка_страницы2(Лист$, Optional Строк_в_шапке% = 1)
      'On Error Resume Next
      With ActiveWorkbook.Sheets(Лист)
          .UsedRange.Offset(1).Resize(.Rows.Count - Строк_в_шапке).ClearContents
      End With
End Function
[/vba]
Правда, не понял, зачем Function, а не Sub, но это уж прихоть ТС



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Четверг, 08.05.2014, 23:01
 
Ответить
СообщениеА вообще-то лучше уж число строк в шапке задавать опционально:[vba]
Код
Public Function Очистка_страницы2(Лист$, Optional Строк_в_шапке% = 1)
      'On Error Resume Next
      With ActiveWorkbook.Sheets(Лист)
          .UsedRange.Offset(1).Resize(.Rows.Count - Строк_в_шапке).ClearContents
      End With
End Function
[/vba]
Правда, не понял, зачем Function, а не Sub, но это уж прихоть ТС

Автор - Alex_ST
Дата добавления - 08.05.2014 в 22:59
Hugo Дата: Четверг, 08.05.2014, 23:04 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Не нравится мне использование ActiveWorkbook...
Я бы вероятно передавал в параметре ссылку на объект - и тогда
[vba]
Код
Public Function Очистка_страницы(Лист)
     'On Error Resume Next
     With Лист.UsedRange
         .Offset(1).Resize(.Rows.Count - 1).ClearContents
     End With
End Function
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНе нравится мне использование ActiveWorkbook...
Я бы вероятно передавал в параметре ссылку на объект - и тогда
[vba]
Код
Public Function Очистка_страницы(Лист)
     'On Error Resume Next
     With Лист.UsedRange
         .Offset(1).Resize(.Rows.Count - 1).ClearContents
     End With
End Function
[/vba]

Автор - Hugo
Дата добавления - 08.05.2014 в 23:04
Alex_ST Дата: Пятница, 09.05.2014, 11:53 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Игорь, а чем тебе так уж ActiveWorkbook не нравится?
Я в макросах, хранящихся в в Personal.xls или в надстройках, часто такое обращение использую.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеИгорь, а чем тебе так уж ActiveWorkbook не нравится?
Я в макросах, хранящихся в в Personal.xls или в надстройках, часто такое обращение использую.

Автор - Alex_ST
Дата добавления - 09.05.2014 в 11:53
Hugo Дата: Пятница, 09.05.2014, 12:21 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну например открыты две книги и персонал с этим макросом. И выполняется код, которым задумано обработать конкретный лист - так зачем в этой функции оганичивать применение только в активной книге, тем самым заставлять себя думать о том, активна ли она в момент вызова функции? А может её сперва нужно специально активировать?
Проще прописать обрабатывать конкретный лист - а когда указываем лист, то можно указать из активной книги, а можно указать и любой другой, не думая кто там активен, кто пассивен :)


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу например открыты две книги и персонал с этим макросом. И выполняется код, которым задумано обработать конкретный лист - так зачем в этой функции оганичивать применение только в активной книге, тем самым заставлять себя думать о том, активна ли она в момент вызова функции? А может её сперва нужно специально активировать?
Проще прописать обрабатывать конкретный лист - а когда указываем лист, то можно указать из активной книги, а можно указать и любой другой, не думая кто там активен, кто пассивен :)

Автор - Hugo
Дата добавления - 09.05.2014 в 12:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » run time error 1004 (Макросы Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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