- Сообщения об ошибках в Visual Basic
- Ошибки во время выполнения
- Ошибки времени компиляции
- Office 2013 Visual Basic для приложений (VBA) ошибки
- Симптомы
- Microsoft Access
- Microsoft Word
- Microsoft Excel
- Причина
- Решение
- Устранение неполадок взаимодействия (Visual Basic)
- Маршалинг взаимодействия
- Экспорт строк Fixed-Length в неуправляемый код
- Экспорт иерархий наследования
- Перегруженные методы
- Использование COM-объектов с помощью сборок взаимодействия
- Классы, предоставляемые как интерфейсы и классы
- создание экземпляров класса платформа .NET Framework
- Типы данных для параметров и возвращаемых значений
- Методы COM уровня модуля
- Необработанные ошибки в обработчиках событий
- Общие сведения об ошибках COM-взаимодействия
- ActiveX Проблемы с контролем
- Передача свойств элементов управления только для чтения по ссылке ByRef
- Развертывание сборок, предоставляющих взаимодействие
Сообщения об ошибках в Visual Basic
при компиляции или запуске Visual Basicного приложения могут возникать следующие типы ошибок:
Ошибки времени компиляции, возникающие при компиляции приложения.
Ошибки времени выполнения, происходящие при запуске приложения.
Сведения о способах устранения некоторых ошибок можно найти в статье Additional Resources for Visual Basic Programmers (Дополнительные ресурсы для программирования на Visual Basic).
Ошибки во время выполнения
если Visual Basic приложение пытается выполнить действие, которое система не может выполнить, возникает ошибка времени выполнения, а Visual Basic создает Exception объект. Visual Basic могут формировать пользовательские ошибки любого типа данных, включая Exception объекты, с помощью Throw инструкции. Приложение может идентифицировать ошибки, отображая номер ошибки и сообщение перехваченного исключения. Если ошибка не будет перехвачена, приложение завершается.
Код может перехватывать и проверять ошибки времени выполнения. Если вы заключите код, создающий ошибку, в блок Try , вы сможете перехватить любую созданную ошибку в соответствующем блоке Catch . Сведения о том, как в коде отлавливать ошибки во время выполнения и реагировать на них, можно найти в статье Try. Catch. Finally Statement (Оператор Try. Catch. Finally).
Ошибки времени компиляции
Если компилятор Visual Basic обнаруживает проблему в коде, возникает ошибка времени компиляции. в редакторе кода Visual Studio можно легко найти строку кода, вызвавшую ошибку, так как в этой строке кода появляется волнистая линия. Если навести курсор на подчеркнутый фрагмент, появляется сообщение об ошибке. Также его можно увидеть вместе с другими сообщениями в списке ошибок.
Если идентификатор имеет волнистое подчеркивание, а под крайним правым символом появляется короткое подчеркивание, можно создать заглушку для класса, конструктора, метода, свойства, поля или перечисления. Дополнительные сведения см. в разделе Создание в результате использования (Visual Studio).
Если вы будете правильно учитывать предупреждения компилятора Visual Basic, ваш код будет работать быстрее и с меньшим количеством ошибок. Эти предупреждения сообщают о том, что в коде могут возникнуть ошибки при запуске приложения. Например, компилятор предупреждает о вызове члена неопределенной объектной переменной, о возврате из функции без задания возвращаемого значения, а также о выполнении блока Try с ошибками в логике перехвата исключений. Дополнительные сведения о предупреждениях, в том числе о возможности включать и отключать их, см. в статье Configuring Warnings in Visual Basic (Настройка предупреждений в Visual Basic).
Источник
Office 2013 Visual Basic для приложений (VBA) ошибки
Симптомы
При открытии файла или попробуйте использовать макросы в Microsoft Office 2013 2 нажмите кнопку Run (C2R) возможно возникновение следующих проблем.
Microsoft Access
Постоянно мигает, окно установщика Windows.
При использовании мастера Access появляется следующее сообщение об ошибке:
«Это средство не установлено или была отключена»
При открытии редактора Visual Basic (VBE) появляется следующее сообщение об ошибке:
«Microsoft Access не удалось загрузить Visual Basic для приложений библиотеки динамической компоновки (dll) Vbe7»
Microsoft Word
После нажатия кнопки макросы, , вы получаете следующее сообщение об ошибке:
«Функция, которую вы пытаетесь запустить, содержит макросы или содержимое требует поддержки языка создания макросов»
Microsoft Excel
При открытии существующих книг, можно получить следующее сообщение об ошибке:
«Visual Basic для приложений (VBA) макросов в данной книге повреждены и были удалены.» Открытие существующей книги
Параметры Visual Basic, макросыи Записи макросов отключены в группе разработчиков и просмотр ленты.
Параметры Visual Basic и макросы отключаются на ленте.
При открытии презентаций с VBA-кодом возникает следующая ошибка:
«Документ содержит макросы. Для этого приложения поддержка макроязыка отключена. Компоненты, которым требуется VBA не доступны. Вы хотите открыть этот документ только для чтения?»
Причина
Очистители реестра сторонних разработчиков и обслуживание приложений системы удалены несколько разделов реестра, используемых для выполнения функций VBA в приложениях Microsoft Office 2013.
Решение
Запустите интерактивный ремонт пакета Office. Вот как:
Нажмите кнопку Пуск> Панель управления> программы и компоненты.
Выберите приложение Microsoft Office и нажмите кнопку Изменить.
Выберите Восстановление по сети и затем нажмите кнопку Восстановить.
После завершения восстановления сети следует использовать приложения Office 2013.
На начальном экране введите в поле поиска Панели управления и затем коснитесь или щелкните приложения.
Нажмите кнопку или выберите Панель управления > программы > программы и компоненты.
Выберите программу Microsoft Office и нажмите кнопку Изменить.
Выберите Восстановление по сети и затем нажмите кнопку Восстановить.
После завершения восстановления сети следует использовать приложения Office 2013.
Во избежание повторения обратитесь к поставщик очистки реестра или обслуживания системы приложений.
Источник
Устранение неполадок взаимодействия (Visual Basic)
при взаимодействии между COM и управляемым кодом платформа .NET Framework может возникнуть одна или несколько из следующих распространенных проблем.
Маршалинг взаимодействия
иногда может потребоваться использовать типы данных, которые не являются частью платформа .NET Framework. Сборки взаимодействия обрабатывают большую часть работы для COM-объектов, но может потребоваться управлять типами данных, которые используются, когда управляемые объекты доступны для COM. например, структуры в библиотеках классов должны указывать BStr неуправляемый тип в строках, отправляемых в COM-объекты, созданные с помощью Visual Basic 6,0 и более ранних версий. В таких случаях можно использовать MarshalAsAttribute атрибут, чтобы сделать управляемые типы доступными как неуправляемые типы.
Экспорт строк Fixed-Length в неуправляемый код
в Visual Basic 6,0 и более ранних версиях строки экспортируются в COM-объекты в виде последовательности байтов без завершающего символа null. для совместимости с другими языками Visual Basic .net содержит символ завершения при экспорте строк. Лучшим способом устранения этой несовместимости является экспорт строк, в которых отсутствует завершающий символ, в виде массивов Byte или Char .
Экспорт иерархий наследования
Иерархии управляемых классов выравниваются при предоставлении в виде COM-объектов. Например, если определить базовый класс с элементом, а затем наследовать базовый класс в производном классе, предоставляемом в виде COM-объекта, клиенты, использующие производный класс в COM-объекте, не смогут использовать наследуемые члены. Доступ к членам базового класса возможен из COM-объектов только в качестве экземпляров базового класса, а затем только в том случае, если базовый класс также создается как COM-объект.
Перегруженные методы
хотя можно создавать перегруженные методы с Visual Basic, они не поддерживаются COM. Если класс, содержащий перегруженные методы, предоставляется в виде COM-объекта, для перегруженных методов создаются новые имена методов.
Например, рассмотрим класс с двумя перегрузками Synch метода. Если класс представлен в виде COM-объекта, новые имена создаваемых методов могут быть Synch и Synch_2 .
Переименование может привести к двум проблемам для потребителей COM-объекта.
Клиенты могут не ожидать имен создаваемых методов.
Созданные имена методов в классе, доступном в виде COM-объекта, могут изменяться при добавлении новых перегрузок в класс или его базовый класс. Это может вызвать проблемы с версиями.
Чтобы решить обе проблемы, присвойте каждому методу уникальное имя, а не использование перегрузки при разработке объектов, которые будут предоставлены в виде COM-объектов.
Использование COM-объектов с помощью сборок взаимодействия
Сборки взаимодействия используются почти так же, как если бы они находились под управляемым кодом для объектов COM, которые они представляют. Однако поскольку они являются оболочками и не являются реальными COM-объектами, между использованием сборок взаимодействия и стандартных сборок существуют некоторые различия. Эти области различий включают раскрытие классов и типы данных для параметров и возвращаемых значений.
Классы, предоставляемые как интерфейсы и классы
В отличие от классов в стандартных сборках, классы COM доступны в сборках взаимодействия как интерфейс и класс, представляющий COM-класс. Имя интерфейса идентично имени класса COM. Имя класса взаимодействия совпадает с именем исходного класса COM, но с добавленным словом «class». Например, предположим, что имеется проект со ссылкой на сборку взаимодействия для COM-объекта. Если класс COM называется MyComClass , IntelliSense и обозреватель объектов отображают интерфейс с именем MyComClass и класс с именем MyComClassClass .
создание экземпляров класса платформа .NET Framework
как правило, экземпляр класса платформа .NET Framework создается с помощью New инструкции с именем класса. Наличие класса COM, представленного сборкой взаимодействия, — это один из вариантов, в котором можно использовать New инструкцию с интерфейсом. Если класс COM не используется с Inherits оператором, интерфейс можно использовать так же, как и класс. в следующем коде показано, как создать Command объект в проекте, который содержит ссылку на COM-объект библиотеки Microsoft объекты данных ActiveX 2,8:
Однако при использовании класса COM в качестве основы для производного класса необходимо использовать класс взаимодействия, представляющий COM-класс, как показано в следующем коде:
Сборки взаимодействия неявно реализуют интерфейсы, представляющие COM-классы. Не пытайтесь использовать Implements оператор для реализации этих интерфейсов, иначе возникнет ошибка.
Типы данных для параметров и возвращаемых значений
В отличие от членов стандартных сборок, члены сборки взаимодействия могут иметь типы данных, отличные от тех, которые используются в объявлении исходного объекта. Несмотря на то, что сборки взаимодействия неявно преобразуют типы COM в совместимые типы среды CLR, следует обратить внимание на типы данных, используемые обеими сторонами для предотвращения ошибок во время выполнения. например, в COM-объектах, созданных в Visual Basic 6,0 и более ранних версиях, значения типа Integer предполагают платформа .NET Framework эквивалентный тип, Short . Рекомендуется использовать обозреватель объектов для проверки характеристик импортированных элементов перед их использованием.
Методы COM уровня модуля
Большинство COM-объектов используются путем создания экземпляра класса COM с помощью New ключевого слова и вызова методов объекта. Единственным исключением из этого правила являются COM-объекты, которые содержат AppObj GlobalMultiUse классы или COM. такие классы похожи на методы уровня модуля в Visual Basic классов .net. Visual Basic 6,0 и более ранних версий неявно создают экземпляры таких объектов при первом вызове одного из их методов. например, в Visual Basic 6,0 можно добавить ссылку на библиотеку объектов Microsoft DAO 3,6 и вызвать DBEngine метод без предварительного создания экземпляра:
Visual Basic .net требует, чтобы всегда были созданы экземпляры COM-объектов, прежде чем можно будет использовать их методы. чтобы использовать эти методы в Visual Basic, объявите переменную нужного класса и используйте ключевое слово new, чтобы присвоить объект переменной объекта. Shared Ключевое слово можно использовать, если необходимо убедиться, что создан только один экземпляр класса.
Необработанные ошибки в обработчиках событий
Одна из распространенных проблем взаимодействия включает в себя ошибки обработчиков событий, которые обрабатывали события, вызванные COM-объектами. Такие ошибки игнорируются, если только вы не проверите ошибки с помощью On Error Try. Catch. Finally инструкций или. например, следующий пример относится к Visual Basic проекту .net, имеющему ссылку на COM-объект библиотеки Microsoft объекты данных ActiveX 2,8.
В этом примере возникает ошибка, как ожидалось. Однако при попытке выполнить тот же пример без Try. Catch. Finally блока ошибка игнорируется, как если бы использовалась OnError Resume Next инструкция. Без обработки ошибок деление на ноль автоматически завершается сбоем. Так как такие ошибки никогда не вызывают ошибки необработанных исключений, важно использовать некоторую форму обработки исключений в обработчиках событий, обрабатывающих события из COM-объектов.
Общие сведения об ошибках COM-взаимодействия
Без обработки ошибок вызовы взаимодействия часто создают ошибки, которые предоставляют небольшую информацию. По возможности используйте структурированную обработку ошибок, чтобы предоставить дополнительные сведения о проблемах, возникающих при их возникновении. Это может быть особенно полезно при отладке приложений. Пример:
Вы можете найти такие сведения, как описание ошибки, HRESULT и источник ошибок COM, изучив содержимое объекта исключения.
ActiveX Проблемы с контролем
большинство элементов управления ActiveX, работающих с Visual Basic 6,0, работают с Visual Basic .net без проблем. Основные исключения — это контейнерные элементы управления или элементы управления, которые визуально содержат другие элементы управления. ниже приведены некоторые примеры старых элементов управления, которые неправильно работают с Visual Studio.
Элемент управления Frame в Microsoft Forms 2,0
Up-Down элемент управления, также известный как элемент управления «Счетчик»
Элемент управления вкладки Шеридан
существует несколько обходных путей для неподдерживаемых проблем с управлением ActiveX. можно перенести существующие элементы управления в Visual Studio, если вы владеете исходным исходным кодом. В противном случае можно проверить наличие обновленных поставщиков программного обеспечения. NET-совместимые версии элементов управления для замены неподдерживаемых ActiveX элементов управления.
Передача свойств элементов управления только для чтения по ссылке ByRef
Visual Basic .net иногда вызывает ошибки COM, такие как «Error 0x800A017F CTL_E_SETNOTSUPPORTED», при передаче ReadOnly свойств некоторых старых ActiveX элементов управления в качестве ByRef параметров в другие процедуры. аналогичные вызовы процедур из Visual Basic 6,0 не вызывают ошибку, и параметры обрабатываются так, как если бы они были переданы по значению. сообщение об ошибке Visual Basic .net указывает, что вы пытаетесь изменить свойство, не имеющее Set процедуры свойства.
Если у вас есть доступ к вызываемой процедуре, можно предотвратить эту ошибку с помощью ByVal ключевого слова, чтобы объявить параметры, принимающие ReadOnly Свойства. Пример:
Если у вас нет доступа к исходному коду для вызываемой процедуры, можно принудительно передать свойство по значению, добавив дополнительный набор квадратных скобок вокруг вызывающей процедуры. например, в проекте, который содержит ссылку на COM-объект библиотеки Microsoft объекты данных ActiveX 2,8, можно использовать:
Развертывание сборок, предоставляющих взаимодействие
Развертывание сборок, предоставляющих интерфейсы COM, представляет некоторые уникальные проблемы. Например, потенциальная проблема возникает, когда отдельные приложения ссылаются на одну и ту же сборку COM. Такая ситуация часто возникает при установке новой версии сборки, если другое приложение по-прежнему использует старую версию сборки. При удалении сборки, использующей общую библиотеку DLL, можно непреднамеренно сделать ее недоступной для других сборок.
Чтобы избежать этой проблемы, следует установить общие сборки в глобальный кэш сборок (GAC) и использовать установочного модуля для компонента. Если вы не можете установить приложение в глобальном кэше сборок, его следует установить на Коммонфилесфолдер в подкаталоге, относящемся к конкретной версии.
Сборки, которые не являются общими, должны располагаться рядом в каталоге с вызывающим приложением.
Источник