Ошибка переполнения Vba Excel
Обновлено: 21.11.2024
Здравствуйте, у меня возникла ошибка переполнения, но я не знаю почему. Код, который я использую:
Я получаю сообщение об ошибке переполнения для переменной держателя, но не знаю почему. Я пытался затемнить его как одиночный, двойной и вариантный, но ничего не работает.
Уважаемый участник форума Дата регистрации 24 марта 2014 г. Местоположение Англия MS-Off Ver Excel 2003–2016 Сообщений 560
Попробуйте долго. Целые числа имеют ограничение 32767
О, и вам нужно будет поместить свой код между тегами [ code ] при публикации на форуме, иначе модератор будет ругаться на вас.
Уважаемый участник форума Регистрация 10.07.2017 Местоположение Торонто, Онтарио MS-Off Ver Excel 2013 Сообщений 430
Все равно выдает ту же ошибку.
Спасибо, мне было интересно, как сделать так, чтобы это выглядело как код
Уважаемый участник форума Дата регистрации 24 марта 2014 г. Местоположение Англия MS-Off Ver Excel 2003–2016 Сообщений 560
Для ясности, ошибка в строке 'holder = (x / y)'?
Какие значения присваиваются x и y при возникновении ошибки?
Гуру форума Дата регистрации 27 июня 2016 г. Местоположение Лондон MS-Off Ver Windows: 2010; Mac: 16,13 (O365) сообщений 7085
Объявляйте x, y и все значения как Double или Long в зависимости от размера значений, с которыми вы имеете дело.
Уважаемый участник форума Дата регистрации 24 марта 2014 г. Местоположение Англия MS-Off Ver Excel 2003–2016 Сообщений 560
О, да! Извините, только что увидел проблему:
Вы не можете сделать это:
оператор AND работает только на этапе условия оператора IF.
Я только что проверил, что происходит, когда x = 1 И y = 2, и обеим переменным присваивается значение 0. 0 / 0 = переполнение.
Уважаемый участник форума Регистрация 10.07.2017 Местоположение Торонто, Онтарио MS-Off Ver Excel 2013 Сообщений 430
Уважаемый участник форума Регистрация 10.07.2017 Местоположение Торонто, Онтарио MS-Off Ver Excel 2013 Сообщений 430
Из-за чего x и y получили значения 0, я удалил строку держателя и заменил ее на range("B2").value = (x/y), что почему-то работает.
Гуру форума Дата регистрации 13 апреля 2005 г. Местоположение Северная Америка MS-Off Ver 2002/XP и 2007 Сообщений 14 047
Из-за чего x и y получили значения 0, я удалил строку держателя и заменил ее на range("B2").value = (x/y), что каким-то образом работает.
Это не имеет для меня смысла. Если y равно 0, то ни одно из утверждений не должно работать, поскольку 0/0 должно привести к ошибке независимо от того, где вы пытаетесь сохранить результат.
Я заметил, что держатель затенен как одиночный, тогда как ячейка Excel будет содержать двойной, хотя я не знаю, почему эта разница в типе данных должна иметь значение.
Вам придется решить, действительно ли ваш обходной путь работает, но что-то в нем по-прежнему кажется неправильным.
Первоначальное сообщение от shg
Уважаемый участник форума Регистрация 10.07.2017 Местоположение Торонто, Онтарио MS-Off Ver Excel 2013 Сообщений 430
Гуру форума Дата регистрации 14 апреля 2012 г. Расположение Пасадена, Калифорния MS-Off Ver Excel 2003,2010 Сообщений 12 379
Похоже, вы получаете только данные последней строки, поэтому цикл несерьезен
Всякий раз, когда вы должны разделить, вам нужен код, предотвращающий деление на ноль — это всегда приведет к переполнению.
Если я помог вам, рассмотрите возможность добавления моей репутации — просто нажмите на маленькую звездочку слева.
Вы не можете сделать одну вещь. XLАдепт
Гуру форума Дата регистрации 13 апреля 2005 г. Местоположение Северная Америка MS-Off Ver 2002/XP и 2007 Сообщений 14 047
Если это работает, значит, это работает. Однако я был бы обеспокоен тем, что он просто «замаскировал» ошибку и что какая-то ошибка все еще скрыта.
Я хотел бы отметить, что трудно выполнять отладку на этой стороне Интернета, не зная точно, что находится в ячейках (i, 5) и ячейках (i, 8), которые преобразуются во что-то, что равно 0, но не 0 при сохранении в x и y.
При работе с VBA мы сталкиваемся со многими типами ошибок. Ошибки называются ошибками времени выполнения, когда они столкнулись с ошибкой при выполнении кода. Кроме того, каждый код имеет определенный код, назначенный ему в программировании VBA. В Excel одной из таких ошибок является ошибка переполнения VBA. Код этой ошибки — ошибка времени выполнения 6, что означает переполнение при программировании VBA. Мы узнаем об этой ошибке в этой статье.
Теперь мы знаем, что такое ошибка переполнения, теперь давайте разберемся, что означает эта ошибка.Если мы объявляем какую-либо переменную как определенный тип данных, и значение переменной превышает предел типа данных переменной, мы получаем ошибку переполнения. Например, если мы определяем переменную как целое число и знаем, что целое число может содержать значения до 32767 для положительных чисел и -32768 для отрицательных чисел. Поэтому, если мы введем какие-либо данные за пределами этого диапазона, мы столкнемся с ошибкой переполнения в VBA.
Оценка, Hadoop, Excel, мобильные приложения, веб-разработка и многое другое.
Ошибка переполнения с точки зрения непрофессионала означает, что мы перегружаем тип данных значениями, которые он может содержать. Такие случаи столкнут нас с этой ошибкой. Поэтому, чтобы избежать этой ошибки, нам нужно знать, какой тип данных мы используем, чтобы предотвратить ее.
На различных примерах мы увидим, как в разных типах данных мы можем столкнуться с этой ошибкой.
Как использовать ошибку переполнения VBA в Excel?
Мы узнаем, как использовать функцию ошибки переполнения VBA, на нескольких примерах в Excel.
Для первого примера воспользуемся типом данных Integer. Давайте попробуем переполнить значения, чтобы переменные не могли их сохранить, и посмотрим, с какой ошибкой мы столкнемся.
Обучение VBA (3 курса, более 12 проектов) 3 онлайн-курса | 13 практических проектов | 45+ часов | Поддающийся проверке сертификат об окончании | Пожизненный доступ
4,7 (10 154 оценки)
Выполните следующие шаги, чтобы использовать функцию ошибки переполнения VBA в Excel:
Шаг 1. Чтобы начать работу с VBA, первое, что нам нужно сделать, это включить вкладку нашего разработчика, а затем щелкнуть ее, чтобы открыть редактор VB из опции Visual Basic, как показано на снимке экрана ниже,
Шаг 2: Нажмите на него и вставьте модуль следующим образом: После того, как мы нажмем на модуль. Дважды щелкните по нему, и он откроет нам другое окно, где мы напишем наш код.
Шаг 3: мы увидим пустое окно справа от нас, объявим подфункцию, и вот как мы запускаем макрос следующим образом,
Код:
Шаг 4. Объявите переменную как целое число, чтобы она могла содержать для нас целочисленное значение,
Код:
Шаг 5. Теперь в переменной A сохраните такое значение, которое переполнит тип данных следующим образом:
Код:
Шаг 6. Теперь отобразите значение A с помощью функции msgbox,
Код:
Шаг 7. Запустите приведенный выше код и посмотрите, какой результат мы получим,
Мы получили эту ошибку, потому что 4896*5000 превышает предел положительного числа для хранения целочисленного типа данных, а переменная A переполняется этим значением, поэтому мы сталкиваемся с этой ошибкой.
Теперь в этом примере допустим тип данных BYTE. Мы знаем, что тип данных byte может содержать значения от 0 до 255, но любые значения, отличные от этого диапазона, приведут к ошибке. Давайте узнаем.
Шаг 1. Наш модуль уже вставлен, мы можем работать с ним или создать новый. Но давайте поработаем над тем же модулем, который мы вставили. Дважды щелкните модуль, чтобы снова открыть окно кода,
Шаг 2. Объявите еще одну подфункцию следующим образом
Код:
Шаг 3. Объявите переменную с типом данных BYTE следующим образом:
Код:
Шаг 4. Теперь в переменной A сохраните значение выше 255 следующим образом:
Код:
Шаг 5. Используйте функцию msgbox для отображения значения A
Код:
Шаг 6. Давайте запустим приведенный выше код, нажав F5, и посмотрим на результат,
Шаг 7. Теперь давайте попробуем изменить значение A на 244 и повторно запустить код, чтобы увидеть результат,
Код:
Шаг 8. При повторном запуске кода мы видим следующий результат
При первом запуске переменная кода A имеет значения, превышающие диапазон, который может содержать тип данных BYTE, но во втором случае переменная A имеет данные в диапазоне своего типа данных, поэтому мы не столкнулись с ошибкой переполнения.
Теперь давайте в качестве примера возьмем тип данных LONG, так как это наиболее часто используемый программистами тип данных.
Шаг 1. Мы снова будем работать с тем же модулем, который вставили ранее. Нам просто нужно дважды щелкнуть модуль, и мы в нем.
Шаг 2. Объявите подфункцию, как показано на снимке экрана.
Код:
Шаг 3. Объявите переменную как тип данных LONG следующим образом.
Код:
Шаг 4. Теперь, аналогично приведенным выше примерам, давайте переполним эту переменную, заставив ее хранить значения выше диапазона, как показано ниже.
Код:
Шаг 5. Используйте функцию msgbox для отображения значения A следующим образом.
Код:
Шаг 6. Нажмите кнопку "Выполнить" выше и убедитесь, что мы столкнулись с ошибкой переполнения.
Шаг 7. Теперь есть способ обойти эту ошибку в длинном типе данных с помощью функции CLNG следующим образом.
Код:
Шаг 8. Теперь, если мы снова запустим код, мы увидим следующий результат.
Что же делает функция CLNG? Он преобразовал значение в длинное целое число, которое может содержать переменная.
Как преодолеть ошибку переполнения в VBA
Когда мы сталкиваемся с ошибкой переполнения в VBA, это означает, что любая из наших переменных, а не больше, имеет некоторые значения, которые она не может содержать. Нам нужно идентифицировать переменную и исправить ее. Кроме того, у нас есть функция CLNG для длинных типов данных, чтобы помочь нам. Но знание нашего типа данных действительно помогает.
Что нужно помнить
Есть некоторые вещи, которые нам нужно помнить об ошибке переполнения в VBA:
- Ошибка переполнения — это ошибка времени выполнения.
- Код ошибки переполнения — 6.
- Чтобы преодолеть ошибку переполнения, мы должны знать, какой тип данных может содержать сколько значений.
- Функция CLNG помогает при ошибке переполнения для длинных типов данных.
Рекомендуемые статьи
Это руководство по ошибке переполнения VBA. Здесь мы обсуждаем, как использовать функцию ошибки переполнения Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете ознакомиться с другими нашими рекомендуемыми статьями –
Я пишу макрос и постоянно получаю сообщение об ошибке переполнения. Сначала я подумал, что это из-за того, что я использовал Integer, а значение было слишком большим для этого типа данных. Но я пробовал Long и Double с той же ошибкой. Что я упускаю?
Используемые значения;
material = 35000
txtWT = 0,5
txtDia = 8,625
Это формула;
ответ = (материал/(txtWT * 2)) / txtDia
Я разделил его, чтобы посмотреть, не в этом ли проблема;
X = txtWT * 2
Y = материал / X
ответ = Y / txtDia
Спасибо за любую помощь.
Факты об Excel
рыба стив
Известный участник
джоу2004
Заблокированный пользователь
Вы не показываете объявления, если таковые имеются. Приведенный ниже макрос отлично работает для меня, с объявлениями и без них, а также с лишними круглыми скобками вокруг первого деления и без них.
Я предлагаю вам добавить Option Explicit вверху модуля. Это требует, чтобы вы объявляли каждую переменную, тем самым выделяя любые опечатки (например, txtTW и txDia) — хотя любые такие опечатки вызовут ошибку деления на ноль, а не переполнение.
Наконец, VBA часто сообщает о вводящих в заблуждение ошибках не в той строке, особенно в строке, следующей, где действительно есть ошибка. Интересно, действительно ли ошибка "переполнения" указывает на присвоение (сохранение) неправильной ссылки на диапазон.
Если ни одна из этих догадок не помогает, я предлагаю вам опубликовать полную процедуру VBA, в идеале урезанную до минимума, демонстрирующего ошибку.
Мой макрос, который работает.
джоу2004
Заблокированный пользователь
Я предлагаю вам опубликовать полную процедуру VBA, в идеале урезанную до минимума, демонстрирующего ошибку.
Когда вы перепечатываете код, как вы делали это в своем первоначальном сообщении, вы можете неосознанно исправить ту самую ошибку, которая ее вызвала.
эпактектор
Новый участник
Полагаю, вы правы в том, что ошибка не в этом расчете, а в том, что находится прямо перед ним. Я использую переменную «материал» для 35000, но обнаружил, что вместо этого макрос присваивает ей 0, что может привести к проблеме. Опять же, я немного запутался, так как раньше использовал такой код без каких-либо ошибок.
Это фрагмент кода. По какой-то причине он не заполняет переменный материал. Я использую пример Б.
Надеюсь, я делаю какую-то глупость, которую просто не вижу.
Вы не показываете объявления, если таковые имеются. Приведенный ниже макрос отлично работает для меня, с объявлениями и без них, а также с лишними круглыми скобками вокруг первого деления и без них.
Я предлагаю вам добавить Option Explicit вверху модуля. Это требует, чтобы вы объявляли каждую переменную, тем самым выделяя любые опечатки (например, txtTW и txDia) — хотя любые такие опечатки вызовут ошибку деления на ноль, а не переполнение.
Наконец, VBA часто сообщает о вводящих в заблуждение ошибках не в той строке, особенно в строке, следующей, где действительно есть ошибка. Интересно, действительно ли ошибка "переполнения" указывает на присвоение (сохранение) неправильной ссылки на диапазон.
Если ни одна из этих догадок не помогает, я предлагаю вам опубликовать полную процедуру VBA, в идеале урезанную до минимума, демонстрирующего ошибку.
Мой макрос, который работает.
эпактектор
Новый участник
На всякий случай, пока это полный код
джоу2004
Заблокированный пользователь
Очевидно, вы не следовали инструкциям и копировали и вставляли из VBA. Оператор Option Explicit неуместен. [1]
И при правильном размещении перед оператором Sub мы видим, что SMYS_full не объявлен (по умолчанию он имеет тип Variant). Более того, этот пример не имеет ничего общего с кодом, который вы разместили изначально.
Как бы то ни было, проблема здесь в том, что материал нулевой, как и txtWT. Ошибка возникает в выражении Y = material / X, что приводит к 0/0, что рассматривается как переполнение вместо деления на ноль.
В будущем вы можете изолировать неверный оператор, нажав ctrl-f8 для перехода к оператору X = txtWT*2, а затем нажав f8 для одношагового выполнения. Вы можете навести курсор на переменные, чтобы увидеть их значения.
-----
[1] Я не должен быть таким резким. Возможно, неправильное размещение оператора Option было вызвано ошибкой апплета форума или вставки браузера. Но дело в том, что код вообще не запустится с правильно размещенным оператором Option. Вот что вызвало подозрения в этом примере.
В этой статье описана ошибка с кодом 6, широко известная как Excel Vba. Код ошибки 6 Переполнение описано как Ошибка 6: Microsoft Excel обнаружил проблему и должен быть закрыт. Приносим извинения за неудобства.
Информация об ошибке
Этот инструмент восстановления может исправлять распространенные компьютерные ошибки, такие как BSOD, зависания и сбои системы. Он может заменять отсутствующие файлы операционной системы и библиотеки DLL, удалять вредоносное ПО и устранять вызванный им ущерб, а также оптимизировать работу ПК для достижения максимальной производительности.
О коде выполнения 6
Код выполнения 6 возникает, когда происходит сбой или сбой Microsoft Excel во время его работы, отсюда и его название. Это не обязательно означает, что код был каким-то образом поврежден, а просто означает, что он не работал во время выполнения. Такая ошибка будет отображаться как раздражающее уведомление на вашем экране, если ее не обработать и не исправить. Вот симптомы, причины и способы устранения проблемы.
Определения (бета)
Здесь мы перечисляем некоторые определения слов, содержащихся в вашей ошибке, чтобы помочь вам понять вашу проблему. Эта работа еще не завершена, поэтому иногда мы можем дать неверное определение слову, так что не стесняйтесь пропустить этот раздел!
- Код ошибки. Код ошибки – это значение, возвращаемое для объяснения причины возникновения ошибки.
- Excel — только для вопросов по программированию объектов или файлов Excel или по разработке сложных формул.
- Excel vba — Excel-VBA Visual Basic для приложений для Microsoft Excel — основной язык программирования для Microsoft Office Excel.
- Переполнение. Переполнение — это свойство CSS, которое определяет, что произойдет, если содержимое выйдет за пределы содержащего его поля.
- Vba — Visual Basic для приложений VBA — это объектно-ориентированный язык программирования, управляемый событиями, для написания макросов, используемый во всем пакете Office, а также в других приложениях.
Симптомы кода 6 — переполнение кода ошибки Excel Vba 6
Ошибки во время выполнения происходят без предупреждения. Сообщение об ошибке может появиться на экране в любое время при запуске Microsoft Excel. Фактически, сообщение об ошибке или какое-либо другое диалоговое окно может появляться снова и снова, если не принять меры на раннем этапе.
Могут быть случаи удаления файлов или появления новых файлов. Хотя этот симптом в значительной степени связан с заражением вирусом, его можно отнести к симптому ошибки времени выполнения, поскольку заражение вирусом является одной из причин ошибки времени выполнения. Пользователь также может столкнуться с внезапным падением скорости интернет-соединения, но опять же, это не всегда так.
(Только в иллюстративных целях)
Причины переполнения кода ошибки Excel Vba 6 — код 6
Во время разработки программного обеспечения программисты пишут код, предвидя возникновение ошибок. Однако идеальных дизайнов не бывает, так как даже при самом лучшем дизайне программы можно ожидать ошибок. Сбои могут возникать во время выполнения, если определенная ошибка не обнаружена и не устранена во время проектирования и тестирования.
Ошибки выполнения обычно возникают из-за одновременного запуска несовместимых программ. Это также может произойти из-за проблем с памятью, плохого графического драйвера или заражения вирусом. В любом случае, проблема должна быть решена немедленно, чтобы избежать дальнейших проблем. Вот способы исправить ошибку.
Методы ремонта
Ошибки во время выполнения могут быть раздражающими и постоянными, но это не совсем безнадежно, ремонт доступен. Вот как это сделать.
Если метод восстановления работает для вас, нажмите кнопку "Проголосовать" слева от ответа, это позволит другим пользователям узнать, какой метод восстановления в настоящее время работает лучше всего.
Читайте также: