какие типы ошибок редактор vba автоматически указывает при наборе кода
Элементы обработки ошибок во время выполнения
Ошибки и обработка ошибок
При программировании приложения нужно учитывать, что происходит при возникновении ошибки. Ошибка в приложении может возникнуть по одной из двух причин. Во-первых, во время работы приложения могут возникать некоторые условия, приводящие к сбою кода, ранее работавшего исправно. Например, если код пытается открыть таблицу, удаленную пользователем, возникает ошибка. Во-вторых, код может содержать неправильную логику, препятствующую выполнению нужных действий. Например, ошибка возникает, если код пытается разделить значение на ноль.
Если вы реализовали обработку ошибок, Visual Basic приостанавливает выполнение и отображает сообщение об ошибке при возникновении ошибки в коде. Пользователи приложения, вероятнее всего, будут при этом озадачены и раздражены. Многие проблемы можно предотвратить, включив в свой код процессы тщательной обработки ошибок для обработки любых потенциальных ошибок.
При добавлении обработки ошибок в процедуру следует учитывать, как процедура направляет выполнение при возникновении ошибки. Первый этап направления в обработчик ошибок состоит во включении обработчика ошибок путем добавления одной из форм оператора On Error в процедуру. Оператор On Error направляет выполнение в событие ошибки. Если оператор On Error отсутствует, при возникновении ошибки Visual Basic просто приостанавливает выполнение и отображает сообщение об ошибке.
Если ошибка возникает в процедуре с включенным обработчиком ошибок, Visual Basic не отображает обычное сообщение об ошибке. Вместо этого он направляет выполнение в обработчик ошибок, при его наличии. Когда выполнение передается включенному обработчику ошибок, он становится активным. В активном обработчике ошибок можно определить тип возникшей ошибки и устранить ее выбранным способом. Приложение Access представляет три объекта, содержащих сведения о возникших ошибках: объект Error ADO, объект Err Visual Basic и объект Error DAO.
Направление выполнения при возникновении ошибки
Обработчик ошибок указывает, что происходит в процедуре при возникновении ошибки. Например, может потребоваться завершение процедуры, если возникает определенное событие, или может потребоваться исправление условия, вызвавшего ошибку, и возобновление выполнения. Операторы On Error и Resume определяют, как продолжается выполнение в случае ошибки.
Оператор On Error
Оператор On Error включает или отключает процесс обработки ошибки. Если процесс обработки ошибки включен, при возникновении ошибки выполнение передается в него.
Существует три формы оператора On Error: On Error GoTo label, On Error GoTo 0 и On Error Resume Next. Оператор On Error GoTo label позволяет выполнять процесс обработки ошибок, начиная со строки, в которой находится оператор. Нужно включить процесс обработки ошибок перед первой строкой, в которой произошла ошибка. Если обработчик ошибок активен и происходит ошибка, выполнение передается в строку, указанную аргументом label.
Строка, указанная аргументом label, должна быть началом процесса обработки ошибок. Например, приведенные ниже процедуры указывают, что при возникновении ошибки выполнение передается в помеченную строку:
Оператор On Error GoTo 0 отключает обработку ошибки в процедуре. Он не должен указывать строку 0 в качестве начала для кода обработки ошибок, даже если в процедуре есть строка с номером 0. Если оператор On Error GoTo 0 отсутствует в коде, обработчик ошибок автоматически отключается, когда процедура полностью завершена. Оператор On Error GoTo 0 сбрасывает свойства объекта Err, оказывая такое же действие, как метод Clear объекта Err.
Оператор On Error Resume Next игнорирует строку, которая вызывает ошибку, и направляет выполнение к следующей за ней строке. Выполнение не прерывается. Можно использовать оператор On Error Resume Next, если нужно проверить свойства объекта Err сразу после строки, в которой ожидается возникновение ошибки, и обработать ошибку в процедуре, а не обработчике ошибок.
Оператор Resume
Оператор Resume направляет выполнение обратно к телу процедуры из процесса обработки ошибок. Оператор Resume можно добавить в процесс обработки ошибок, если нужно продолжить выполнение в определенной точке процедуры. Однако оператор Resume не является обязательным; процедуру также можно завершить после процесса обработки ошибок.
Существует три формы оператора Resume. Оператор Resume или Resume 0 возвращает выполнение в строку, в которой произошла ошибка. Оператор Resume Next возвращает выполнение в строку, расположенную непосредственно после строки, в которой произошла ошибка. Оператор Resume label возвращает выполнение в строку, указанную аргументом label. Аргумент label должен указывать на метку строки или на номер строки.
Если пользователю нужно внести исправление, обычно используется оператор Resume или Resume 0. Например, если у пользователя запрашивается имя таблицы для открытия, и пользователь вводит несуществующее имя таблицы, можно отправить пользователю повторный запрос и продолжить выполнение с оператором, вызвавшим ошибку.
Используйте оператор Resume Next, если код исправляет ошибку в обработчике ошибок и вы хотите продолжить выполнение без повторного запуска строки, вызвавшей ошибку. Используйте оператор Resume label, если нужно продолжить выполнение в другой точке процедуры, указанной аргументом label. Например, можно продолжить выполнение с процесса выхода, как описано в разделе ниже.
Выход из процедуры
Если в процедуру добавляется процесс обработки ошибок, следует также добавить процесс выхода, чтобы процесс обработки ошибок запускался только при возникновении ошибки. Можно указать процесс выхода с помощью метки строки таким же образом, как указывается процесс обработки ошибок.
Например, можно добавить процесс выхода к примеру в предыдущем разделе. Если ошибка не возникает, процесс выхода запускается после тела процедуры. Если ошибка возникает, выполнение передается процессу выхода после завершения процесса обработки ошибок. Процесс выхода содержит оператор Exit.
Обработка ошибок во вложенных процедурах
Если ошибка возникает во вложенной процедуре без включенного обработчика ошибок, Visual Basic выполняет поиск по списку вызовов в обратном направлении, чтобы найти включенный обработчик ошибок в другой процедуре, а не просто приостанавливает выполнение. Благодаря этому у кода есть возможность исправить ошибку в другой процедуре. Для примера предположим, что Процедура A вызывает Процедуру B, а Процедура B вызывает Процедуру C. Если ошибка возникает в Процедуре C, в которой нет включенного обработчика ошибок, Visual Basic проверяет наличие включенного обработчика ошибок в Процедуре B, а затем в Процедуре A. Если он существует, выполнение передается этому обработчику ошибок. Если его нет, выполнение приостанавливается и отображается сообщение об ошибке.
Visual Basic также выполняет поиск включенного обработчика ошибок по списку вызовов в обратном направлении, если ошибка возникает в активном обработчике ошибок. Можно принудительно заставить Visual Basic выполнять поиск по списку вызовов в обратном направлении, запустив ошибку в активном обработчике ошибок с помощью метода Raise объекта Err. Это удобно для обработки ошибок, которые не ожидаются в обработчике ошибок. Если возникает неожиданная ошибка и она воспроизводится в обработчике ошибок, выполнение передается назад по списку вызовов для поиска другого обработчика, который может быть настроен для обработки такой ошибки.
Для примера предположим, что в Процедуре C есть включенный обработчик ошибок, но он не подходит для возникшей ошибки. После проверки обработчиком ошибок на все ожидаемые ошибки он может воспроизвести исходную ошибку. После этого выполнение передается назад по списку вызовов для обработчика ошибок в Процедуре B (если он существует), обеспечивая возможность исправления ошибки этим обработчиком ошибок. Если в процедуре B нет обработчика ошибок или он не может исправить ошибку и снова воспроизводит ее, выполнение передается в обработчик ошибок Процедуры А, предполагая его наличие.
Чтобы проиллюстрировать этот принцип, предположим, что у вас есть вложенная процедура, содержащая средство обработки ошибок несоответствия типов (ожидаемой ошибки). В какой-то момент в процедуре С возникает неожиданная ошибка деления на ноль. Если вы добавили оператор для воспроизведения исходной ошибки, выполнение передается назад по списку вызовов другому включенному обработчику ошибок, если он существует. Если вы исправляли ошибку деления на ноль в другой процедуре в списке вызовов, ошибка будет исправлена. Если код не воспроизводит ошибку, процедура продолжает выполнение без исправления ошибки деления на ноль. Это, в свою очередь, может вызывать другие ошибки в наборе вложенных процедур.
Таким образом, Visual Basic выполняет поиск включенного обработчика ошибок по списку вызовов в обратном направлении, если:
Ошибка возникает в процедуре, не содержащей включенного обработчика ошибок.
Ошибка возникает в активном обработчике ошибок. Если для запуска ошибки используется метод Raise объекта Err, можно принудительно заставить Visual Basic выполнять поиск включенного обработчика ошибок по списку вызовов в обратном направлении.
Получение сведений об ошибке
После передачи выполнения процессу обработки ошибок код должен определить, какая ошибка произошла, и устранить ее. Visual Basic и Access предоставляют несколько элементов языка, которые можно использовать для получения сведений о конкретной ошибке. Каждый предназначен для разного типа ошибок. Так как ошибки могут возникать в различных частях приложения, необходимо определить, какой из них использовать в коде на основе ожидаемых ошибок.
Элементы языка, доступные для обработки ошибок, включают:
Объект Err
Объект Error и коллекция Errors ADO
Объект Error и коллекция Errors DAO
Метод AccessError
Событие Error
Объект Err
Объект Err представлен в Visual Basic. При возникновении ошибки Visual Basic сведения об этой ошибке сохраняются в объекте Err. Объект Err хранит сведения только об одной ошибке одновременно. При возникновении новой ошибки объект Err изменяется для включения сведений об этой ошибке вместо старой.
Чтобы получить сведения об определенной ошибке, можно использовать свойства и методы объекта Err:
В приведенном ниже примере показано, как использовать объект Err в процедуре, которая может вызывать ошибку несоответствия типов:
Обратите внимание, что в приведенном выше примере метод Raise используется для воспроизведения исходной ошибки. Если возникает ошибка, отличная от ошибки несоответствия типов, выполнение передается назад по списку вызовов в другой включенный обработчик ошибок, если он существует.
Объект Err предоставляет все необходимые сведения об ошибках Visual Basic. Однако он не предоставляет полные сведения об ошибках Access или ошибках ядра СУБД Access. Access и объекты доступа к данным (DAO) предоставляют дополнительные элементы языка, помогающие устранять ошибки.
Объект Error и коллекция Errors
Объект Error и коллекция Errors предоставляются интерфейсами ADO и DAO. Объект Error представляет ошибку ADO или DAO. Отдельная операция ADO или DAO может вызвать несколько ошибок, особенно при выполнении операций ODBC DAO. У каждой ошибки, возникающей во время определенной операции доступа к данным, есть соответствующий объект Error. Все объекты Error, связанные с определенной операцией ADO или DAO, хранятся в коллекции Errors. Ошибки нижнего уровня являются первыми объектами в коллекции, а ошибки верхнего уровня являются последними объектами в коллекции.
При возникновении ошибки ADO или DAO объект Err Visual Basic сохраняет номер ошибки для первого объекта в коллекции Errors. Чтобы определить, происходили ли дополнительные ошибки ADO или DAO, проверьте коллекцию Errors. Значения свойств Number ADO или Number DAO и свойств Description ADO или Description DAO первого объекта Error в коллекции Errors должны совпадать со значениями свойств Number и Description объекта Err Visual Basic.
Метод AccessError
Можно использовать метод Raise объекта Err, чтобы создать ошибку Visual Basic, не происходившую на самом деле, и определить строку описания, связанную с этой ошибкой. Однако нельзя использовать метод Raise, чтобы создать ошибку Access, ошибку ADO или ошибку DAO. Чтобы определить строку описания, связанную с ошибкой Access, ошибкой ADO или ошибкой DAO, не происходившей на самом деле, используйте метод AccessError.
Событие Error
Событие Error можно использовать для перехвата ошибок в форме или отчете Access. Например, если пользователь пытается ввести текст в поле с типом данных «Дата и время», возникает событие Error. Если добавить процедуру обработки события Error в форму Employees, а затем попытаться ввести текстовое значение в поле HireDate, запустится процедура обработки события Error.
Процедура обработки события Error использует целочисленный аргумент DataErr. Когда запускается процедура обработки события Error, аргумент DataErr сохраняет номер возникшей ошибки Access. Проверка значения аргумента DataErr в процедуре обработки событий — это единственный способ определить номер возникшей ошибки. Объект Err не заполняется сведениями об ошибке после возникновения события Error. Можно использовать значение аргумента DataErr вместе с методом AccessError, чтобы определить номер ошибки и его строку описания.
Оператор Error и функция Error предоставляются только для обеспечения обратной совместимости. При создании нового кода используйте объекты Err и Error, функцию AccessError и событие Error для получения сведений об ошибке.
Об участниках
Ссылка предоставлена сообществом UtterAccess.
UtterAccess — это премиальный вики-портал и форум, посвященный Microsoft Access.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Типы ошибок в VBA
При выполнении макросов Excel могут возникнуть ошибки, которые в VBA делят на три категории:
Далее мы поговорим о каждом из трёх типов ошибок VBA подробно.
Ошибки компиляции
Компилятор VBA рассматривает ошибки компиляции как недопустимые и выделяет их в коде ещё до того, как дело дойдёт до запуска макроса.
Если при написании кода допущена синтаксическая ошибка, то редактор VBA сигнализирует об этом немедленно: либо при помощи окна с сообщением, либо выделяя ошибку красным цветом, в зависимости от статуса режима Auto Syntax Check.
Примечание: При включённом режиме Auto Syntax Check каждый раз, при появлении в редакторе Visual Basic во введённом коде синтаксической ошибки, будет показано соответствующее сообщение. Если же этот режим выключен, то редактор VBA продолжит сообщать о синтаксических ошибках, просто выделяя их красным цветом. Опцию Auto Syntax Check можно включить/выключить в меню Tools > Options редактора Visual Basic.
В некоторых случаях ошибка компиляции может быть обнаружена при выполнении компиляции кода, непосредственно перед тем, как макрос будет выполнен. Обычно ошибку компиляции несложно обнаружить и исправить, потому что компилятор VBA даёт информацию о характере и причине ошибки.
Например, сообщение “Compile error: Variable not defined” при попытке запустить выполнение кода VBA говорит о том, что происходит попытка использовать или обратиться к переменной, которая не была объявлена для текущей области (такая ошибка может возникнуть только если используется Option Explicit).
Ошибки выполнения
Ошибки выполнения возникают в процессе выполнения кода и приводят к остановке выполнения программы. Этот тип ошибок VBA, как правило, также не сложно обнаружить и исправить, так как сообщается информация о характере ошибки и место в коде, где произошла остановка.
Примером такой ошибки может служить попытка выполнить деление на ноль. В результате будет показано сообщение “Run-time error ’11’: Division by zero“.
В зависимости от структуры проекта VBA, может быть предложено выполнить отладку кода (как показано на рисунке ниже). В этом случае при нажатии на кнопку Debug (в окне сообщения о необходимости отладки) будет выделена цветом строка кода, которая стала причиной ошибки VBA.
Получив такое сообщение и видя выделенную строку кода, как в приведённом выше примере, обнаружить причину ошибки будет совсем не сложно.
В случае если код сложнее, чем в нашем примере, то, чтобы получить больше информации о причине возникновения ошибки VBA, можно проверить значения используемых переменных. В редакторе VBA для этого достаточно навести указатель мыши на имя переменной, или можно открыть окно отслеживания локальных переменных (в меню редактора View > Locals Window).
Коды различных ошибок выполнения расшифрованы на сайте Microsoft Support (на английском). Наиболее часто встречающиеся ошибки VBA перечислены в этой таблице:
5 | Недопустимый вызов процедуры (Invalid procedure call) |
7 | Недостаточно памяти (Out of memory) |
9 | Индекс вне заданного диапазона (Subscript out of range)
Эта ошибка возникает при попытке обратиться к элементу массива за пределами заданного размера массива – например, если объявлен массив с индексами от 1 до 10, а мы пытаемся обратиться к элементу этого же массива с индексом 11. |
11 | Деление на ноль (Division by zero) |
13 | Несоответствие типа (Type mismatch)
Эта ошибка возникает при попытке присвоить переменной значение не соответствующего типа – например, объявлена переменная i типа Integer, и происходит попытка присвоить ей значение строкового типа. |
53 | Файл не найден (File not found)
Иногда возникает при попытке открыть не существующий файл. |
Перехват ошибок выполнения
Не все ошибки выполнения бывают вызваны недочётами в коде. Например, ошибки VBA не удастся избежать, если для работы макроса необходимо открыть файл с данными, а этого файла не существует. В таких случаях признаком профессионализма будет перехват ошибок и написание кода VBA, который будет выполняться при их возникновении. Таким образом, вместо неприятных сбоев будет происходить изящное завершение работы макроса.
Для того, чтобы помочь справиться с возникающими ошибками, VBA предоставляет разработчику операторы On Error и Resume. Эти операторы отслеживают ошибки и направляют выполнение макроса в специальный раздел кода VBA, в котором происходит обработка ошибки. После выполнения кода обработки ошибки, работа программы может быть продолжена с того места, где возникла ошибка, или макрос может быть остановлен полностью. Далее это показано на примере.
В этом коде производится попытка открыть файл Excel с именем Data. Если файл не найден, то пользователю будет предложено поместить этот файл в нужную папку. После того, как пользователь сделает это и нажмёт ОК, выполнение кода продолжится, и попытка открыть этот файл повторится. При желании вместо попытки открыть нужный файл, выполнение процедуры Sub может быть прервано в этом месте при помощи команды Exit Sub.
Логические ошибки
Логические ошибки (или баги) возникают в процессе выполнения кода VBA, но позволяют ему выполняться до самого завершения. Правда в результате могут выполняться не те действия, которые ожидалось, и может быть получен неверный результат. Такие ошибки обнаружить и исправить труднее всего, так как компилятор VBA их не распознаёт и не может указать на них так, как это происходит с ошибками компиляции и выполнения.
Например, при создании макроса в процедуре случайно были просуммированы не те переменные, которые требовалось просуммировать. Результат будет ошибочным, но макрос будет продолжать выполняться до завершения.
Редактор Excel VBA предоставляет набор инструментов отладки, которые помогут найти и исправить логические ошибки в коде VBA. В данной статье мы не будем рассматривать подробно эти инструменты. Любознательный пользователь может найти обзор инструментов отладки VBA на сайте Microsoft Help & Support (на английском).
Обработка ошибок
Если вы когда-нибудь учились водить автомобиль, то наверняка вспомните, что при первой посадке на водительское сиденье все внимание было приковано к трем деталям: рулю, педалям и рычагу переключения передач. Происходящее вне автомобиля уходило на второй план, так как вначале нужно было стронуться с места. По мере практики навыки вождения улучшались и эти три детали постепенно уходили на задний план. Как ни странно, но руль и рычаг переключения передач всегда оказывались там, куда вы не смотря протягивали руки, а ноги сами находили педали. Теперь все внимание стало занимать происходящее на дороге. Иными словами, вы стали опытным водителем.
В программировании все абсолютно также. Начинающие программисты больше обращают внимание на первые попавшиеся на глаза операторы, функции и другие элементы языка, а сам алгоритм уходит на задний план. Если программа скомпилировалась без ошибок, то это уже большое счастье, хотя это еще не означает, что программа работает правильно. По мере практики мышление программиста меняется, он начинает обращать внимание на мелочи, на форматирование программы, использует более эффективные алгоритмы и в результате всего этого допускает меньше ошибок. Подводя итоги, можно сказать, что начинающий программист просто пишет программу, а опытный программист пытается найти оптимальный алгоритм и предусмотреть поведение программы в различных ситациях. Однако, от ошибок никто не застрахован, поэтому очень важно знать как быстро найти ошибку.
Типы ошибок
Существуют три типа ошибок в программе:
Инструкция On Error
Если внутри подпрограммы не предусмотрен перехват ошибки, то при возникновении ошибки работа программы прерывается и выводится стандартное окно с описанием и несколькими кнопками: Continue (продолжить), End (завершить выполнение программы), Debug (перейти в режим отладки) и Help (вывод справки).
Инструкция Resume
Инструкция Resume позволяет указать куда следует переходить после обработки ошибки. Инструкция имеет несколько форматов:
Если инструкция Resume не указана, то выполняется только код внутри обработчика ошибки и производится выход из подпрограммы.
Получение информации об ошибке и генерация ошибки
Объект Err содержит следующие методы:
Способы поиска ошибок в программе
В предыдущих разделах мы научились обрабатывать ошибки времени выполнения. Однако, наибольшее количество времени программист затрачивает на другой тип ошибок — логические ошибки. В этом случае программа компилируется без ошибок, но результат выполнения программы не соответствует ожидаемому результату. Ситуация еще более осложняется, когда неверный результат проявляется лишь периодически, а не постоянно. Инсценировать такую же ситуацию, чтобы получить этот же неверный результат, бывает крайне сложно и занимает очень много времени. В этом разделе мы рассмотрим лишь «дедовские» (но по прежнему актуальные) способы поиска ошибок, а современные способы отладки приложений, доступные в VBA, изучим в следующем разделе.
Первое, на что следует обратить внимание, — на объявления переменных. Например, рассмотрим простой пример:
При наличии инструкции компилятор производит проверку объявления всех переменных. Если переменная не была объявлена явным образом, то компилятор выведет сообщение об ошибке и выполнение программы будет остановлено. Таким образом, код должен выглядеть следующим образом:
Далее следует обратить внимание на форматирование кода. Начинающие программисты обычно не обращают на это никакого внимания, считая этот процесс лишним. А на самом деле зря! Компилятору абсолютно все равно, разместите вы все инструкции на одной строке или выполните форматирование кода. Однако, при поиске ошибок форматирование кода позволит найти ошибку гораздо быстрее.
Перед всеми инструкциями внутри блока должно быть расположено одинаковое количество пробелов. Обычно используют три или четыре пробела. От применения символов табуляции лучше отказаться. Если все же используете, то не следует в одном файле совмещать и пробелы и табуляцию. Для вложенных блоков количество пробелов умножают на уровень вложенности. Если для блока первого уровня вложенности использовалось три пробела, то для блока второго уровня вложенности должно использоваться шесть пробелов, для третьего уровня — девять пробелов и т. д. Пример форматирования вложенных блоков приведен в листинге 11.1.
Листинг 11.1. Пример форматирования вложенных блоков
Длина одной строки не должна содержать более 80 символов. Если количество символов больше, то следует выполнить переход на новую строку. При этом продолжение смещается относительно основной инструкции на величину отступа или выравнивается по какому-либо элементу. Иначе приходится пользоваться горизонтальной полосой прокрутки, а это очень неудобно при поиске ошибок.
Если программа слишком большая, то следует задуматься о разделении программы на отдельные подпрограммы или классы, которые выполняют логически законченные действия. Помните, что отлаживать отдельную подпрограмму гораздо легче, чем «спагетти»-код. Причем прежде чем вставить подпрограмму (или класс) в основную программу ее следует протестировать в отдельном проекте, передавая подпрограмме различные значения и проверяя результат ее выполнения.
Обратите внимание на то, что форматирование кода должно выполняться при написании кода, а не во время поиска ошибок. Этим вы сократите время поиска ошибки и скорее всего заметите ошибку еще на этапе написания. Если все же ошибка возникла, то вначале следует инсценировать ситуацию, при которой ошибка проявляется. После этого можно начать поиск ошибки.
Проверить значение константы позволяет следующая конструкция:
Отладка программы в VBA
Сделать поиск ошибок более эффективным позволяет отладчик, встроенный в редактор VBA. С его помощью можно выполнять программу по шагам, при этом контролируя значения переменных на каждом шагу. Отладчик позволяет также проверить, соответствует ли порядок выполнения инструкций разработанному ранее алгоритму.
Когда точки останова расставлены можно начать отладку. Для этого запускаем программу на выполнение обычным способом. При достижении точки останова выполнение программы прерывается и отладчик ожидает дальнейших действий программиста. Инструкция, которая будет выполняться на следующем шаге, помечается желтой стрелкой слева от строки.
В режиме прерывания можно посмотреть значения различных переменных в окне Locals. Если окно не отображается, то отобразить его можно выбрав в меню View пункт Locals Window. Посмотреть значение переменной можно также если навести указатель мыши на переменную. Значение переменной отобразится во всплывающей подсказке.
Для пошагового выполнения программы предназначены следующие пункты в меню Debug или соответствующие кнопки на панели инструментов Debug ( View | Toolbars | Debug):
Если необходимо посмотреть последовательность вызова подпрограмм, то следует открыть окно Call Stack, выбрав в меню View пункт Call Stack.
Подача звукового сигнала
Статьи по Visual Basic for Applications (VBA)
Помощь сайту
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов