Добрый день.
Долгое время работал с макросом в Эксель 2010, ищущем дубли на листе:
1. в пустую ячейку столбца С, следующую за последней заполненной, вставляется слово, по которому идёт поиск дублей (или несколько слов вставляются последовательно в соответствующее кол-во ячеек столбца С, если нужно найти дубли сразу нескольких слов);
2. выделяется ячейка, содержащая это слово (или верхнее из слов, если их несколько), запускается макрос поиска дублей по всем ячейкам столбца С;
3. макрос пробегает все ячейки столбца С и находит дубли;
4. вырезает строку/строки с ячейками от A до Z, где в столбце С был найден дубль поискового слова/слов;
5. вставляет найденные строки в пустые строки в конце файла (т.е. в строки, следующие за строками, содержащими слова, по которым ведётся поиск дублей);
Visual Basic | ||
|
Неделю назад, когда число строк перевалило за 60000, стала вылетать ошибка:
Run time error ‘-2147417848 (80010108)’:
Method ‘Paste’ of object ‘_Worksheet’ failed
После нажатия Debug выделяется строка
ActiveSheet.Paste
При этом таки находится дубль 1-ой строки, но удалить никакую строку после этого невозможно — эксель просто не реагирует на попытку удаления строк и макрос поиска дублей больше не работает, а вот все остальные — работают. После перезагрузки экселя можно удалять строки, но при поиске дублей, ситуация повторяется.
Огромная просьба: помогите пожалуйста оптимизировать макрос, чтобы данная ошибка не возникала. Сколько сам не бился, не удалось исправить.
I have a macro which runs fine on my machine but when I try to run it on another machine it gives the following error.
Microsoft Visual Basic
Run-time Error -2147417848 (80010108)
Automation Error
The Object invoked has disconnected from its clients.
Undo♦
25.4k37 gold badges110 silver badges129 bronze badges
asked Jun 23, 2010 at 10:53
I found that the error is caused by ‘Freeze Panes’. If you are in the sliding part of the panel you get the crash, if you are in the frozen bit everything works fine.
The solution is: first change the active cell to a cell in the frozen pane, e.g. Range(«A1»).Activate
answered Feb 7, 2014 at 17:59
1
Here is a possible solution. I haven’t encountered the error myself so I’m not sure so…
Also, more detail would be helpful, what is the code surround the line where it errors? What is the code doing? Are both machines running the same version of Windows and Excel?
answered Aug 17, 2010 at 17:48
Icode4foodIcode4food
8,46415 gold badges62 silver badges92 bronze badges
mazersw Пользователь Сообщений: 90 |
#1 11.01.2021 15:18:48 Добрый день! Записал макрос. На некоторых файлах все выполняется отлично а на некоторых выдает ошибку:
Т.е. после запуска, просто зависает программ, нажимаешь закрыть, и Windows дает — перезапуск Excel ну и после выводится ошибка VBA. Подскажите пожалуйста кто с этим сталкивался, как можно исправить?
Еще проблема в том, что ошибка рандомная — то есть, то нет! |
||||
Андрей_26 Пользователь Сообщений: 647 |
Добрый день! |
mazersw Пользователь Сообщений: 90 |
#3 11.01.2021 16:00:10
Прикрепленные файлы
|
||
Mershik Пользователь Сообщений: 8277 |
mazersw, мой вам совет описать задачу решаемую макросом, не всегда хочется людям изучать чужой макрос иногда проще и быстрее написать новый) Не бойтесь совершенства. Вам его не достичь. |
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#5 11.01.2021 16:22:53
так может и таблица с именем «Таблица5» то есть, то нет? Когда есть — ошибка(т.к. нельзя создать две таблицы с одинаковым именем), когда нет — и ошибки нет. Попробуйте добавлять с рандомным именем:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
mazersw Пользователь Сообщений: 90 |
#6 12.01.2021 10:32:17 Ок попробую.
Макрос — просто создает диаграмму (график) и применяет нужное форматирование, и все… |
||
RAN Пользователь Сообщений: 7091 |
#7 12.01.2021 11:01:38 А может есть смысл позволить Excel самому имя таблицы придумать?
|
||
I wrote a text file import routine that has worked fine until recently.
It was the first routine that I created for this spreadsheet.
It was fully tested and working properly and has had no modifications after it was completed.
The problem arose some time later while I was writing other routines to process the imported data.
All of the other routines work fine, but this one now produces the following error message when it runs:
Run-time error ‘-2147417848′(80010108)’:
Method ‘Delete’ of object ‘Range’ failed
The specific command that causes the error is:
Columns.Delete
When this error happens, whether it is Excel 2010 or 2013, Windows 7 or 8, it makes Excel unresponsive to input.
I have to use the Task Manager to kill it.
I found a similar problem here on the forums where he was trying to delete rows. He got the same results as me, but his solution does not work for me. I will appreciate whetever help I can get.
Here is the code:
Sub ImportInventoryFiles() ' ' ImportInventoryFile Macro ' Gets the context of the inventory text files and places them in their respective worksheets l (A1). ' ' Keyboard Shortcut: Ctrl+i ' Dim Path As String Dim FileName As String Dim Extension As String ' Delete extra sheets with the default Excel sheet name. sheetTot = Sheets.Count ' Eliminate any default sheets after the first sheet if they exist. For i = 2 To sheetTot If Left(Worksheets(i).Name, 5) = "Sheet" Then Application.DisplayAlerts = False Worksheets(i).Delete Application.DisplayAlerts = True End If Next i ' Now we can delete the first default sheet if there are more than one sheet left. ' Any sheets that are left after the first default sheet are probably records we need. ' If the only sheet left is a default sheet, it will be deleted after the user has ' selected files for processing. If Sheets.Count > 1 And Left(Worksheets(1).Name, 5) = "Sheet" Then Application.DisplayAlerts = False Worksheets(1).Delete Application.DisplayAlerts = True End If ' The user can select multiple .txt files. After the file(s) have been selected, the ' macro parses out the file path to extract the file name sans the extension. It then ' looks for a sheet name that matches the filename. If it finds one, then it updates ' that sheet. If not, then it creates a new sheet and names it with that filename. FileToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt", , "Select all of the files that you want to import:", , True) If IsArray(FileToOpen) Then For f = 1 To UBound(FileToOpen) SlashLoc = InStrRev(FileToOpen(f), "") If SlashLoc > 0 Then Path = Left(FileToOpen(f), SlashLoc) l = Len(FileToOpen(f)) FileName = Right(FileToOpen(f), l - SlashLoc) DotLoc = InStrRev(FileName, ".") If DotLoc > 0 Then l = Len(FileName) Extension = Right(FileName, l - DotLoc) FileName = Left(FileName, DotLoc - 1) End If End If ' Look for a sheet name that matches the filename and activate it if found. totSheets = Sheets.Count i = 1 sheetFound = False For i = 1 To totSheets If Worksheets(i).Name = FileName Then Worksheets(FileName).Activate sheetFound = True Exit For End If Next i Sheets.Add If Not sheetFound Then If Left(Worksheets(1).Name, 5) <> "Sheet" Then ' If this single sheet is not a default sheet, then we need to create ' a new one. Sheets.Add After:=Worksheets(Worksheets.Count) End If ' If that lone default sheet that we could not delete in the beginning ' is here, then it will be renamed and used for the current file. ActiveSheet.Name = FileName MsgBox FileName End If ' Clear the worksheet of any and all data. We need a clean slate. Columns.Delete ' <------- This kills Excel for some reason. ' Drop the data from the text file into the work sheet starting from cell ' A:2. With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileToOpen(f), Destination:=Range("$A$2")) .Name = FileToOpen(f) .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 437 .TextFileStartRow = 1 .TextFileParseType = xlFixedWidth .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(2) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With ' Put in column title. Range("A1").FormulaR1C1 = "Software Inventory" ' This data is for troubleshooting. We can delete it when no longer needed. Range("C1").FormulaR1C1 = "Filename Information" Range("C1").Font.Bold = True Range("C2").FormulaR1C1 = FileToOpen(f) Range("C3").FormulaR1C1 = Path Range("C4").FormulaR1C1 = FileName Range("C5").FormulaR1C1 = Extension Call FormatWorksheet(True) Next f End If Call Summerize Range("A1").Select End Sub
- Remove From My Forums
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
-
Moved by