Runtime error 2147417848 80010108

Ошибка Run time error ‘-2147417848 (80010108)’ VBA Решение и ответ на вопрос 925410

0 / 0 / 0

Регистрация: 18.07.2013

Сообщений: 48

1

18.07.2013, 21:58. Показов 20280. Ответов 102


Добрый день.

Долгое время работал с макросом в Эксель 2010, ищущем дубли на листе:
1. в пустую ячейку столбца С, следующую за последней заполненной, вставляется слово, по которому идёт поиск дублей (или несколько слов вставляются последовательно в соответствующее кол-во ячеек столбца С, если нужно найти дубли сразу нескольких слов);
2. выделяется ячейка, содержащая это слово (или верхнее из слов, если их несколько), запускается макрос поиска дублей по всем ячейкам столбца С;
3. макрос пробегает все ячейки столбца С и находит дубли;
4. вырезает строку/строки с ячейками от A до Z, где в столбце С был найден дубль поискового слова/слов;
5. вставляет найденные строки в пустые строки в конце файла (т.е. в строки, следующие за строками, содержащими слова, по которым ведётся поиск дублей);

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
Sub FindDub()
Range("Y:Y").Clear
Application.ScreenUpdating = False
StartCell = ActiveCell.Row
lastcell = Cells(Rows.Count, 3).End(xlUp).Row
Delta = 1
ColDub = 25
For a = 1 To StartCell - 1
  If Cells(a, 3).Value <> "" And Cells(a, ColDub).Value <> 1 Then
    For b = StartCell To lastcell
      If b <> a Then
         If UCase(Cells(a, 3).Value) = UCase(Cells(b, 3).Value) Then
          Range("A" & a & ":" & "Z" & a).Select
          Selection.Cut
          Range("A" & (lastcell + Delta) & ":" & "Z" & (lastcell + Delta)).Select
          ActiveSheet.Paste
          Delta = Delta + 1
          Cells(b, ColDub).Value = 1
         End If
      End If
    Next
  End If
  Next
    LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    For r = LastRow To 1 Step -1
    If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
    Next r
Application.ScreenUpdating = True
End Sub

Неделю назад, когда число строк перевалило за 60000, стала вылетать ошибка:
Run time error ‘-2147417848 (80010108)’:
Method ‘Paste’ of object ‘_Worksheet’ failed

После нажатия Debug выделяется строка
ActiveSheet.Paste

При этом таки находится дубль 1-ой строки, но удалить никакую строку после этого невозможно — эксель просто не реагирует на попытку удаления строк и макрос поиска дублей больше не работает, а вот все остальные — работают. После перезагрузки экселя можно удалять строки, но при поиске дублей, ситуация повторяется.

Огромная просьба: помогите пожалуйста оптимизировать макрос, чтобы данная ошибка не возникала. Сколько сам не бился, не удалось исправить.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



 

vukula

Пользователь

Сообщений: 4
Регистрация: 23.11.2015

#1

23.11.2015 12:09:26

Excel 2010
Имеет место рандомная ошибка. Т.е. иногда возникает, иногда — нет.
«Run-time error ‘-2147417848 (80010108)’
Automation error. The object invoked has disconnected from its clients»

Если возникает, то дальнейший дебаг и запуск дает
«Run-time error ‘1004’: Метод Insert класса Range завершен неверно»

Помогите пжл. В каком направлении искать. Спасибо.

Код
Sub addOp()
    Dim Name As String
           
    Name = Cells(5, 2)
    Size = Cells(2, 2).Value
    Avr = Cells(6, 2).Value
    Eop = Cells(7, 2).Value
              
    Sheets("tmpl").Copy Before:=Sheets(13)
    Sheets("tmpl (2)").Name = Name
    
    Sheets(Name).Visible = True
    Sheets(Name).Select
    Cells(3, 2) = Name
    Cells(2, 1) = Size
    Cells(1, 2) = Avr
    Cells(2, 2) = Eop
       
'вставка в рублевый лист
    Sheets("tmplFrur").Visible = True
    Sheets("tmplFrur").Select
    Range("B1:B147").Select
    Selection.Copy
    Sheets("resumeRur").Select
    Range("C1").Select
    Selection.Insert Shift:=xlToRight    'вот на этой строке вылетает ошибка. А иногда не вылетает.
    Cells(1, 3) = Avr
    Cells(2, 3) = Eop
    Cells(3, 3) = Name
    Columns("c:m").ColumnWidth = 12.5
  
    
    Sheets("tmplFrur").Visible = False
    Sheets("tmplFcur").Visible = False
    Sheets(Name).Select
    Range("b4").Select
    Application.CutCopyMode = False
End Sub
 

CAHO

Пользователь

Сообщений: 2183
Регистрация: 25.02.2013

А она возникает скорее всего, потому что макрос у Вас из модуля выполняется и обращается к конкретным ячейкам листам и диапазонам через Select.
Уберите все селекты и лишние переменные, которые в начале даже не описаны. Пропишите нормальные пути к листам и ячейкам. У вас скорее всего не на те листы или имена попадает при выполнении макроса. А вообще пример бы.

Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.

 

vukula

Пользователь

Сообщений: 4
Регистрация: 23.11.2015

#3

23.11.2015 12:43:54

Цитата
CAHO написал: Пропишите нормальные пути к листам и ячейкам

Что Вы подразумеваете под «нормальными путями»?
Пример, в смысле «файл»?

 

justirus

Пользователь

Сообщений: 295
Регистрация: 03.06.2014

#4

23.11.2015 12:49:46

Цитата
vukula написал: нормальные пути к листам и ячейкам

Ну например:
Name = Cells(5, 2)
можно заменить на:
Name = ThisWorkbook.Worksheets(«Параметры»).Cells(5, 2)
разница в том, что в зависимости от того какой лист или книга буду активны в момент запуска макроса, переменная name будет иметь разные значения, в моем варианте всегда одно значение.

Изменено: justirus03.12.2015 01:06:25

 

CAHO

Пользователь

Сообщений: 2183
Регистрация: 25.02.2013

#5

23.11.2015 12:57:10

Например что-то вроде такого

Код
Sub addOp()
    Name = Cells(5, 2)
    Sheets("tmpl").Copy Before:=Sheets(13)
    Sheets("tmpl (2)").Name = Cells(5, 2)
    Sheets(Name).Cells(3, 2) = Name
    Sheets(Name).Cells(2, 1) = Cells(2, 2).Value
    Sheets(Name).Cells(1, 2) = Cells(6, 2).Value
    Sheets(Name).Cells(2, 2) = Cells(7, 2).Value
    Sheets("tmplFrur").Range("B1:B147").Copy
    Sheets("resumeRur").Range("C1").Insert Shift:=xlToRight
    Sheets("resumeRur").Cells(1, 3) = Cells(6, 2).Value
    Sheets("resumeRur").Cells(2, 3) = Cells(7, 2).Value
    Sheets("resumeRur").Cells(3, 3) = Name
    Sheets("resumeRur").Columns("c:m").ColumnWidth = 12.5
    Sheets(Name).Range("b4").Select
    Application.CutCopyMode = False
End Sub

Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.

 

vukula

Пользователь

Сообщений: 4
Регистрация: 23.11.2015

Спасибо за участие.
Минимизировал селекты, НО ошибка все равно вылетает.
Выявил следующую зависимость.
Файл сохраняется как шаблон эксель с поддержкой макросов.
Изначально Name забито как «2013» (т.е. год).
Если я открываю файл и запускаю макрос, не меняя Name, ошибка не вылетает.
Если открываю файл и ввожу первый отчетный период, отличный от сохраненного в шаблоне, например, 2014й, ошибка вылетает.
Файл вкладываю.

Изменено: vukula23.11.2015 17:20:59

 

vukula

Пользователь

Сообщений: 4
Регистрация: 23.11.2015

вот что говорит микрософт

правда мне это не помогло

Изменено: vukula24.11.2015 09:09:47

 

hyperion3330

Пользователь

Сообщений: 37
Регистрация: 22.10.2018

#8

13.07.2021 18:32:31

Недавно тоже столкнулся с такой проблемой..
Как оказалось — из-за того что пытался менять значения ячеек на скрытом листе..
Как только перенёс строку «Sheets(Name).Range(«b4″).Visible = True»
Перед изменением значений, сразу всё стало нормально работать :)
Вдруг кому-то пригодится…

Невозможно скопировать лист — Excel вылетает/закрывается

Sasa3171

Дата: Четверг, 04.11.2021, 01:38 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Уважаемые коллеги

В приложении лежит файл «run-time error ‘-2147417848 (80010108)’.xls», в нём одна пустая страничка «Сп1»: вот эту страничку невозможно никуда скопировать — ни в этот же файл таблицы, ни в другой. Эксель после этой попытки «вылетает/закрывается». Делаю это в Excel-2003.
В чём может быть проблема?

Изначально этот файл содержал несколько листов и содержал макросы. Так вот — макрос копирования этого листа (Sheets(page_name).Copy after:=Sheets(page_name)) стал давать ошибку: «run-time error ‘-2147417848 (80010108)’: Automation error. The object invoked has disconnected from clients.»

Я попробовал скопировать этот лист ручками — Эксель «вылетает/закрывается». На некоторых других листах этого файла ошибки копирования не было.
Я удалил из этого файла всё, кроме этого листа — макросы, другие листы, очистил этот лист. Получившийся файл находится в приложении. Проблема осталась: этот лист не копируется (но переместить или удалить его можно).

После чего появилась эта проблема? Этот файл таблицы служит шаблоном для наполнения её данными другой программой, причём данные заносятся не в этот лист «Сп1», хотя наполняющая программа просматривает все страницы, пытаясь найти ключевые поля для наполнения. Предыдущая версия этой программы работает нормально, наполняет долго и после наполнения макрос обработки данных работает нормально и ошибок копирования не возникает. Новая версия наполняет те же самые данные быстро, но появляется эффект невозможности копирования этого листа. Чем отличаются по сути процедуры наполнения в разных версиях наполняющей программы — это недоступно.
Получается, что процедура наполнения данными таблички в новой версии что-то рушит в файле таблицы — вот что там порушено?

Если этот файл отрыть в Либре, то там эта страничка копируется, но Либра рушит Экселевские макросы.

 

Ответить

DrMini

Дата: Четверг, 04.11.2021, 06:24 |
Сообщение № 2

Группа: Проверенные

Ранг: Ветеран

Сообщений: 922


Репутация:

82

±

Замечаний:
0% ±


Excel LTSC 2021 RUS

эту страничку невозможно никуда скопировать — ни в этот же файл таблицы, ни в другой.

Попробовал у себя на Excel от офиса 2019 профессиональный плюс. Всё копируется. Сейчас поищу на других компах в сети 2007 или 2010 офис и попробую на них.
У Вас скорее всего повредились системные файлы M$ Office.
Я бы проверил HDD(SSD) на котором установлен Ваш офис.
Если всё с HDD(SSD) нормально то удалил бы офис и переустановил его вновь.

 

Ответить

DrMini

Дата: Четверг, 04.11.2021, 06:44 |
Сообщение № 3

Группа: Проверенные

Ранг: Ветеран

Сообщений: 922


Репутация:

82

±

Замечаний:
0% ±


Excel LTSC 2021 RUS

После копирования в Excel 2007 и последующего сохранения файла вышло сообщение от excel.


А после сохранения файла стал доступен объект на листе который не копируется на другие листы.

Может это Вам как то поможет?
[p.s.]думаю офис пока трогать не надо[/p.s.]

Сообщение отредактировал DrMiniЧетверг, 04.11.2021, 06:50

 

Ответить

Sasa3171

Дата: Четверг, 04.11.2021, 11:50 |
Сообщение № 4

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


DrMini, благодарю

Да, мешает этот объект — он видится как линия в самом верху листа, если увеличить масштаб. Его я не заметил — он остался после очистки листа.

Этот объект — гостовский «штамп», который после очистки листа свернулся в линию. Его можно растащить за «кружочки» и тогда он станет виден полностью.
Штамп выполнен Линиями, которые сгруппированы вместе, а также Полями/TextBox и Надписями/Label, которые тоже сгруппированы вместе. Если этот объект разгруппировать и удалить хотя бы одну группу (Линии или Поля с Надписями), то лист становится копируемым — но: оставшаяся группа не копируется на новый лист. В исходной таблице и таблице, наполненной данными старой версией программы листы копируются с этим штампом.

Видимо, что-то портится в этом «штампе» — что?

Посмотреть свойства этих полей и надписей можно в режиме Конструктора (Вид/Панели_Инструментов/Элементы_управления).

Excel2007 у Вас ругается на большой размер таблицы, но у себя в 2003-ем и Либре я этого не вижу…

 

Ответить

_Igor_61

Дата: Четверг, 04.11.2021, 17:49 |
Сообщение № 5

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

Замечаний:
0% ±


Excel 2007

Видимо, что-то портится в этом «штампе» — что?

таблице, наполненной данными старой версией программы

Скорей всего это. Не факт, но…

 

Ответить

_Igor_61

Дата: Четверг, 04.11.2021, 17:52 |
Сообщение № 6

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

Замечаний:
0% ±


Excel 2007


Не увидел сходу…

После чего появилась эта проблема?

Думаю, как минимум с 2007 :)

 

Ответить

Sasa3171

Дата: Четверг, 04.11.2021, 23:28 |
Сообщение № 7

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Проблема появилась с выходом новой версии наполняющей программы — там, видимо, поменялась процедура наполнения данными моей таблицы-шаблона, поскольку делает это она значительно быстрее, чем предыдущая версия.
Что изменилось в процедуре наполнения — это недоступно, но портит она, видимо, «гостовский штамп» в моей таблице, состоящий из Линий, Полей и Надписей. Т.е., если удалить сгруппированные Линии или Поля+Надписи, то возможность копирования листа восстанавливается частично: лист копируется, но без оставшейся части штампа — в исходном файле и после работы предыдущей версии наполняющей программы страница копируется вместе со штампом полностью.

В приложении — табличка с развёрнутым этим штампом.

К сообщению приложен файл:

4529845.xls
(276.0 Kb)

Сообщение отредактировал Sasa3171Пятница, 05.11.2021, 10:40

 

Ответить

Sasa3171

Дата: Пятница, 05.11.2021, 13:11 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


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

Штамп состоит из Линий, которые сгруппированы вместе, и из Полей (TextBox) и Надписей (Lable), которые тоже сгруппированы вместе. Далее эти две группы были сгруппированы в одну.

Так вот, достаточно разгруппировать штамп только один раз — т.е., разгруппировать только верхнюю группу на две составляющие группы: группу Линий и группу Полей/Надписей, как всё начинает работать.

В приложении файл — со страничкой, где штамп не разгруппирован: что в нём не так (что мешает работать более свежим процедурам обработки таблиц)?
Двойная группировка? Но она раньше не мешала…

К сообщению приложен файл:

9200413.xls
(321.5 Kb)

 

Ответить

DrMini

Дата: Пятница, 05.11.2021, 13:26 |
Сообщение № 9

Группа: Проверенные

Ранг: Ветеран

Сообщений: 922


Репутация:

82

±

Замечаний:
0% ±


Excel LTSC 2021 RUS

А у меня в 2019 Excel всё копируется.

 

Ответить

Sasa3171

Дата: Пятница, 05.11.2021, 13:58 |
Сообщение № 10

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


В исходном файле с неразгруппированным штампом, страничка из которого лежит моим постом выше, всё копируется. Также, всё копируется и после наполнения данными этой таблички старой версией программы наполнения.
Перестают странички копироваться только после наполнения их данными новой версией наполняющей программы.
Но стоит только однократно разгруппировать штамп — странички начинают копироваться уже и после наполнения новой версией наполняющей программы, т.е. эффект исчезает.
Вот что не так в исходном файле?

В новой версии наполняющей программы поменялась процедура наполнения (что именно — неведомо).

Сообщение отредактировал Sasa3171Пятница, 05.11.2021, 17:04

 

Ответить

  • Remove From My Forums

 locked

Excel 2016 VBA Run-time error — Intermittent and Unpredictable

  • Question

  • I currently have a workbook that utilizes a visual basic macro. The workbook is set up with several sheets, used for various months, and within each sheet there is a table. Different users enter data into this
    table, and once they have the necessary information entered, the selection of a particular cells kicks off the macro that protects that row, and adds another row to the end of the table so that more information can be entered and previously entered data is
    protected from changes. This workbook worked very well in our previous version of Excel, which was Excel 2007. Since we upgraded to Excel 2016, sometimes the macro performs fine, but users have been encountering a «Run-time error ‘-2147417848 (80010108)’:
    Automation error The object invoked has disconnected from its clients», sometimes. The error doesn’t always happen on the same row or after the same number of entries. Sometimes users can enter 5 lines of data and then get the error, sometimes users can
    enter 300+ lines of data and then encounter the error. I’m trying to understand what is causing the issue, why it is only sometimes occurring, and how I can modify the macro so that the error is no longer an issue. Any help would be appreciated.

    Sub Prepared()

    ActiveSheet.Unprotect

    ActiveSheet.ListObjects(1).ListRows.Add AlwaysInsert:=True

    ‘Insert preparers Windows Username in active cell

    Selection = Application.UserName

    ‘Lock prepared row

    Range(«D» & ActiveCell.Row & «:M» & ActiveCell.Row).Select

    Selection.Locked = True

    ActiveSheet.Protect

    End Sub

    • Moved by

      Friday, February 24, 2017 2:10 AM

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Runtime error 2147024894
  • Runtime error 2147024809 80070057 excel
  • Runtime error 2147024773 8007007b
  • Runtime error 2147021892 80070bbc
  • Runtime error 2146233088

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии