Содержание
- Ошибка времени выполнения VBA Excel -2147319767 (80028029)
- Восстановление после повреждения Excel VBA и ошибок автоматизации
- Ошибка времени выполнения VBA Excel -2147319767 (80028029)
- You may receive the «Run-time error ‘-2147023174’ (800706ba)» error message or the «Run-time error ‘462’» when you run Visual Basic code that uses Automation to control Word
- Symptoms
- Cause
- Resolution
- Status
- More Information
- Steps to Reproduce Behavior
- References
Ошибка времени выполнения VBA Excel -2147319767 (80028029)
Привет всем, у меня есть довольно странная проблема с кодом VBA. Я использую макросы для добавления/удаления пользовательских элементов управления программным способом. Когда я просто добавляю элемент управления пользовательской формой и после этого пытаюсь его удалить, все работает нормально. Но как только я пытаюсь удалить элементы управления пользовательской формы, которые я только что создал и использовал (как и userform.Show), я получил названную ошибку. После попытки снова это работает… так что первый вопрос будет похожим, что, черт возьми, это? И второй вопрос заключается в том, как я могу решить эту проблему или мне даже нужно ее решить? Могу ли я просто запустить эту ошибку с помощью какой-либо обработки ошибок?
Я не уверен, какая часть моего кода помогает понять мою проблему, но я предполагаю, что код для удаления элементов управления пользовательской формой может помочь:
И, кроме того, если я не пользуюсь никакими пользовательскими функциями, я могу добавлять и удалять элементы управления столько, сколько хочу, никаких ошибок… спасибо!
Я подозреваю, что вы добавляете элементы управления во время разработки, но после загрузки пользовательской формы вы пытаетесь удалить элементы управления во время выполнения, что запрещено. Когда вы видите ошибку в первый раз и выбираете [End], вы сбрасываете среду VBA, которая выгружает UserForm. (Другие вещи также происходят: все глобальные переменные теряют свои значения.) В этот момент пользовательская форма больше не загружается, поэтому вы можете удалять элементы управления.
Если это ваша ситуация, вам нужно убедиться, что пользовательская форма загружена перед добавлением элементов управления. Когда вы делаете userform.Show в первый раз, происходят две вещи: форма загружается, а затем становится видимой. Вы можете загрузить его, не делая его видимым с помощью метода.Load. Затем вы можете добавить свои элементы управления. Пока вы не выгружаете форму с помощью метода.Unload (или сброса VBA), ваши элементы управления будут сохраняться. .Hide и.Show изменит видимость формы, но не приведет к тому, что элементы управления, добавленные во время выполнения, будут отброшены.
С другой стороны, если вы действительно хотите добавлять элементы управления во время разработки, чтобы они сохранялись (и сохраняются при сохранении книги), тогда вам нужно использовать.Unload, чтобы выгрузить форму перед удалением элементов управления.
Источник
Восстановление после повреждения Excel VBA и ошибок автоматизации
У меня есть книга Excel, в которой много чего происходит — макросы, внешние источники данных, источники данных в реальном времени и т. д. — которая ломалась примерно раз в неделю в течение последнего месяца.
Поломка обычно проявляется при запуске макроса и получении:
Точка отказа, определенная отладчиком, никогда не имеет смысла — один и тот же код работает неделями. И исправление, которое я использовал, заключалось в том, чтобы вернуться к сохраненной версии книги, в которой не было ошибок при запуске макросов, и она всегда содержит тот же самый код VBA, который нарушал работу. Итак, я пришел к выводу, что что-то за кулисами портится.
Что происходит? Есть ли способ этого избежать? Есть ли способ исправить это лучше, чем откат к более ранней сохраненной версии книги?
Действия, которые я предпринял, когда столкнулся с этим типом ошибки (1) Всегда работаю с копией на локальном диске (я никогда работаю над большим проектом, открытым из OneDrive / SharePoint — это, похоже, чаще всего заканчивается повреждением) 2) Сохраните книгу в формате xlsb, который (по моему опыту) менее подвержен повреждению.
Есть много вопросов относительно этой ошибки, и исправляющие их изменения кода также никогда не имеют смысла. Их всех объединяет то, что они вносят изменение в код VBA, которое, один вывод, заставляет Excel регенерировать свой псевдокод.
Дальнейшие исследования приводят к частым упоминаниям о повреждении книги Excel, а также к бесплатной утилите Очиститель кода Excel VBA. Авторы этой утилиты объясняют, что происходит:
During the process of creating VBA programs a lot of junk code builds up in your files. If you don’t clean your files periodically you will begin to experience strange problems caused by this extra baggage. Cleaning a project involves exporting the contents of all its VBComponents to text files, deleting the components and then importing the components back from the text files.
К сожалению, они не опубликовали версию своей утилиты, работающую в 64-битном Excel. Но можно сделать то же самое вручную — сохранить весь код VB, удалить все модули, затем воссоздать их и вставить код обратно.
Обновлено:Декомпилятор кода VBA — еще одна бесплатная утилита, которая, похоже, выполняет то же самое. Также имеется более подробное описание того, как Office компилирует и сохраняет код VBA в своих файлах.
Это звучит в соответствии с другим флагманским продуктом Microsoft Windows, который также известен накоплением мусора, который может его раздувать и повредить.
Источник
Ошибка времени выполнения VBA Excel -2147319767 (80028029)
Привет всем, у меня есть довольно странная проблема с кодом VBA. Я использую макросы для добавления/удаления пользовательских элементов управления программным способом. Когда я просто добавляю элемент управления пользовательской формой и после этого пытаюсь его удалить, все работает нормально. Но как только я пытаюсь удалить элементы управления пользовательской формы, которые я только что создал и использовал (как и userform.Show), я получил названную ошибку. После попытки снова это работает. так что первый вопрос будет похожим, что, черт возьми, это? И второй вопрос заключается в том, как я могу решить эту проблему или мне даже нужно ее решить? Могу ли я просто запустить эту ошибку с помощью какой-либо обработки ошибок?
Я не уверен, какая часть моего кода помогает понять мою проблему, но я предполагаю, что код для удаления элементов управления пользовательской формой может помочь:
И, кроме того, если я не пользуюсь никакими пользовательскими функциями, я могу добавлять и удалять элементы управления столько, сколько хочу, никаких ошибок. спасибо!
Я подозреваю, что вы добавляете элементы управления во время разработки, но после загрузки пользовательской формы вы пытаетесь удалить элементы управления во время выполнения, что запрещено. Когда вы видите ошибку в первый раз и выбираете [End], вы сбрасываете среду VBA, которая выгружает UserForm. (Другие вещи также происходят: все глобальные переменные теряют свои значения.) В этот момент пользовательская форма больше не загружается, поэтому вы можете удалять элементы управления.
Если это ваша ситуация, вам нужно убедиться, что пользовательская форма загружена перед добавлением элементов управления. Когда вы делаете userform.Show в первый раз, происходят две вещи: форма загружается, а затем становится видимой. Вы можете загрузить его, не делая его видимым с помощью метода.Load. Затем вы можете добавить свои элементы управления. Пока вы не выгружаете форму с помощью метода.Unload (или сброса VBA), ваши элементы управления будут сохраняться. .Hide и.Show изменит видимость формы, но не приведет к тому, что элементы управления, добавленные во время выполнения, будут отброшены.
С другой стороны, если вы действительно хотите добавлять элементы управления во время разработки, чтобы они сохранялись (и сохраняются при сохранении книги), тогда вам нужно использовать.Unload, чтобы выгрузить форму перед удалением элементов управления.
Источник
You may receive the «Run-time error ‘-2147023174’ (800706ba)» error message or the «Run-time error ‘462’» when you run Visual Basic code that uses Automation to control Word
Symptoms
When you run Microsoft Visual Basic code that uses Automation to control Microsoft Word, you may receive one of the following error messages:
Error message 1
Run-time error ‘-2147023174’ (800706ba)
Automation error
Error message 2
Run-time error ‘462’: The remote server machine does not exist or is unavailable
Cause
Visual Basic has established a reference to Word due to a line of code that calls a Word object, method, or property without qualifying it with a Word object variable. Visual Basic does not release this reference until you end the program. This errant reference interferes with automation code when the code is run more than once.
Resolution
Modify the code so that each call to a Word object, method, or property is qualified with the appropriate object variable.
Status
This behavior is by design.
More Information
To automate Word, you establish an object variable that usually refers to the Word Application or Document object. Other object variables can then be set to refer to a Selection, a Range, or other objects in the Word object model. When you write code to use a Word object, method, or property, you should always precede the call with the appropriate object variable. If you do not, Visual Basic uses a hidden global variable reference which it sets to the currently running instance. If Word is shutdown, or if the declared object variable is released, the hidden global variable will now reference an invalid (destroyed) object. When running the automation code again, calls to this hidden object variable will fail with the aforementioned error.
The following steps illustrate how to reproduce this problem, and how to correct it.
Steps to Reproduce Behavior
Start a new Standard EXE project in Visual Basic. Form1 is created by default.
Click References from the Project menu, and then click one of the following options:
For Office Word 2007, click Microsoft Word 12.0 Object Library
For Word 2003, click Microsoft Word 11.0 Object Library
For Word 2003, click Microsoft Word 10.0 Object Library
For Word 2000, click Microsoft Word 9.0 Object Library.
For Word 97, click Microsoft Word 8.0 Object Library.
Place a CommandButton on Form1.
Copy the following code to the Code Window of Form1:
On the Run menu, click Start or press the F5 key to start the program.
Click the CommandButton. No error occurs. However, a reference to Word has been created and has not been released.
Click the CommandButton again and note that you receive the error previously described.
Note The error occurs because the code refers to the InchesToPoints Method without preceding the call with the oWord object variable.
Stop the project and change the following line:
Run the program again. Then, click the CommandButton. No error occurs.
Click the CommandButton again and note that you receive the error.
Note The error occurs because the code refers to the ActiveDocument Section one’s Range object without preceding the call with the oWord object variable.
Stop the project and change the following line:
Run the program again. Note that you can run the code multiple times without error.
When building a Visual Basic project automating Word, if your project has a reference to the Microsoft Word Object Library, sample code for the objects, methods, and properties of the Word Object Model is available from the Word Help file. When the cursor is over a key word in your code, you will see any applicable Help text by pressing the F1 key.
The sample code in the Help topic will be the Microsoft Word Visual Basic for Applications code. It will not show the object references that your Visual Basic code requires. You will need to add the qualifiers as appropriate.
References
For additional information, please see the following articles in the Microsoft Knowledge Base:
178510 PRB: Excel Automation Method of Object ‘_Global’Failed
167223 Microsoft Office 97 Automation Help File Available
For additional information about the Automation of Office applications, click the article number below to view the article in the Microsoft Knowledge Base:
222101 HOWTO: Find and Use Office Object Model Documentation
Источник
Вопрос:
Привет всем, у меня есть довольно странная проблема с кодом VBA. Я использую макросы для добавления/удаления пользовательских элементов управления программным способом. Когда я просто добавляю элемент управления пользовательской формой и после этого пытаюсь его удалить, все работает нормально. Но как только я пытаюсь удалить элементы управления пользовательской формы, которые я только что создал и использовал (как и userform.Show), я получил названную ошибку. После попытки снова это работает… так что первый вопрос будет похожим, что, черт возьми, это? И второй вопрос заключается в том, как я могу решить эту проблему или мне даже нужно ее решить? Могу ли я просто запустить эту ошибку с помощью какой-либо обработки ошибок?
Я не уверен, какая часть моего кода помогает понять мою проблему, но я предполагаю, что код для удаления элементов управления пользовательской формой может помочь:
Public Function delete_userform_controls(strUserForm As String)
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim iCount As Integer
Dim cnt As Control
Dim iMaxColumns As Integer
Dim lCountOfLines As Long
Set VBProj = ActiveWorkbook.VBProject
Set VBComp = VBProj.VBComponents(strUserForm)
For Each cnt In VBComp.Designer.Controls
If TypeName(cnt) = "Label" Then iMaxColumns = iMaxColumns + 1
Next cnt
With VBComp.Designer
For iCount = 0 To iMaxColumns - 1
.Controls.Remove ("label_" & iCount & "")
.Controls.Remove ("textbox_" & iCount & "")
Next
.Controls.Remove ("ok_button")
.Controls.Remove ("cancel_button")
End With
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Function
И, кроме того, если я не пользуюсь никакими пользовательскими функциями, я могу добавлять и удалять элементы управления столько, сколько хочу, никаких ошибок… спасибо!
Лучший ответ:
Я подозреваю, что вы добавляете элементы управления во время разработки, но после загрузки пользовательской формы вы пытаетесь удалить элементы управления во время выполнения, что запрещено. Когда вы видите ошибку в первый раз и выбираете [End], вы сбрасываете среду VBA, которая выгружает UserForm. (Другие вещи также происходят: все глобальные переменные теряют свои значения.) В этот момент пользовательская форма больше не загружается, поэтому вы можете удалять элементы управления.
Если это ваша ситуация, вам нужно убедиться, что пользовательская форма загружена перед добавлением элементов управления. Когда вы делаете userform.Show в первый раз, происходят две вещи: форма загружается, а затем становится видимой. Вы можете загрузить его, не делая его видимым с помощью метода.Load. Затем вы можете добавить свои элементы управления. Пока вы не выгружаете форму с помощью метода.Unload (или сброса VBA), ваши элементы управления будут сохраняться. .Hide и.Show изменит видимость формы, но не приведет к тому, что элементы управления, добавленные во время выполнения, будут отброшены.
С другой стороны, если вы действительно хотите добавлять элементы управления во время разработки, чтобы они сохранялись (и сохраняются при сохранении книги), тогда вам нужно использовать.Unload, чтобы выгрузить форму перед удалением элементов управления.
berzau 0 / 0 / 0 Регистрация: 02.09.2015 Сообщений: 7 |
||||||
1 |
||||||
Excel Ошибка при выполнении кода17.06.2020, 09:58. Показов 8269. Ответов 9 Метки excel vba, макросы excel, ошибка (Все метки)
Добрый день! Внезапно стала возникать ошибка при выполнении нижеследующего кода.
Текст ошибки: До этого не один месяц всё отлично выполнялось, также код отлично исполняется в любом другом файле, но только не в этом. Подскажите, пожалуйста, в чем может быть проблема? Вложения
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
17.06.2020, 09:58 |
9 |
1785 / 1113 / 340 Регистрация: 11.07.2014 Сообщений: 3,927 |
|
17.06.2020, 11:28 |
2 |
в чем может быть проблема Да No Problem, запустил и всё как надо занеслось, без ошибок. А ваш комп я не вижу. Может ячейки защищены от изменения?
0 |
0 / 0 / 0 Регистрация: 02.09.2015 Сообщений: 7 |
|
17.06.2020, 12:03 [ТС] |
3 |
Да No Problem, запустил и всё как надо занеслось, без ошибок. А ваш комп я не вижу. Может ячейки защищены от изменения? Нет, защиту не ставил, если бы стояла защита, он бы и у вас не срабатывал без ее снятия, разве нет? В процессе выяснилось, что дело на самом деле в листе, так как если его снести и создать новый с тем же названием, то всё нормально работает.
0 |
1785 / 1113 / 340 Регистрация: 11.07.2014 Сообщений: 3,927 |
|
17.06.2020, 12:21 |
4 |
berzau, у меня нет уверенности, что ваша копия полностью совпадает с той, что у вас. Может вы создали копию, а потом каким-то образом выставили защиту листа. Удаление и замена листа на аналог по названию тоже на это намекают. Надо с этим разобраться. Но вы единственный на моей памяти человек с такими проблемами. Так что думаю, по большому счёту, это некритично. Возможно пользуетесь каким-то сочетанием клавиш, приводящим к блокировке. Для верности можно снять параметр Защищенная ячейка со всех ячеек листа
0 |
0 / 0 / 0 Регистрация: 02.09.2015 Сообщений: 7 |
|
17.06.2020, 12:32 [ТС] |
5 |
berzau, у меня нет уверенности, что ваша копия полностью совпадает с той, что у вас. Может вы создали копию, а потом каким-то образом выставили защиту листа. Удаление и замена листа на аналог по названию тоже на это намекают. Надо с этим разобраться. Но вы единственный на моей памяти человек с такими проблемами. Так что думаю, по большому счёту, это некритично. Возможно пользуетесь каким-то сочетанием клавиш, приводящим к блокировке. Для верности можно снять параметр Защищенная ячейка со всех ячеек листа Для пущей верности еще раз запустил прямо из выложенного архива.
0 |
1785 / 1113 / 340 Регистрация: 11.07.2014 Сообщений: 3,927 |
|
17.06.2020, 12:36 |
6 |
Сообщение было отмечено berzau как решение Решениеberzau, перегрузите офис, если у вас нелицензионный, то найдите другой нелицензионный и поставьте его. Как вы понимаете, у меня ваш файл работает беспроблемно. Поэтому приходится гадать. Поставьте после каждого оператора MsgBox или Debug.Print, чтобы знать на каком операторе рухнет.
1 |
0 / 0 / 0 Регистрация: 02.09.2015 Сообщений: 7 |
|
17.06.2020, 12:39 [ТС] |
7 |
Запустил на другом компе, всё работает. Стало еще непонятнее. У меня официальный офис, сейчас снесу и еще раз поставлю.
0 |
1785 / 1113 / 340 Регистрация: 11.07.2014 Сообщений: 3,927 |
|
17.06.2020, 12:44 |
8 |
berzau, сравните настройки экселя на своём компе и на том, где макрос работает. Может макросы отключены и т.д.
0 |
0 / 0 / 0 Регистрация: 02.09.2015 Сообщений: 7 |
|
17.06.2020, 13:18 [ТС] |
9 |
Вопрос решился переустановкой Office.
0 |
Hugo121 6874 / 2806 / 533 Регистрация: 19.10.2012 Сообщений: 8,553 |
||||
17.06.2020, 13:32 |
10 |
|||
Попробуйте не надеяться на умолчания, а указать явно:
и нужно не забыть что файл уже должен быть сохранён!
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
17.06.2020, 13:32 |
10 |