amd481

amd481

пикабушник
поставил 78 плюсов и 104 минуса
отредактировал 0 постов
проголосовал за 0 редактирований
5781 рейтинг 8 подписчиков 1201 комментарий 7 постов 2 в "горячем"
5161

Раздельная сортировка мусора мешает его закапыванию в землю

Раздельная сортировка мусора мешает его закапыванию в землю Мусор, Длиннопост, Переработка мусора, Мусорная реформа, Волжский, Волгоградская область, Негатив

В г. Волжском Волгоградской области уже несколько лет назад местные предприниматели наладили сбор мусора отсортированного самими горожанами. Где-то по кварталам расставлены контейнеры для сбора макулатуры. Где-то - сетки для сбора пластика. Местами стоят объединённые контейнеры 3 в 1. Не очень организованно, но свою функцию выполняло. Причём горожане действовали только из соображений здравого смысла, никак не принуждаясь к этому и не платя за вывоз. Утилизирующим организациям профит от халявного источника сырья.

Но началась реформа и началось...


Регоператор ООО «Управление отходами - Волгоград» (во главе генерального директора Сергея Галкина) обратилось в природоохранную прокуратуру с просьбой проверить работу фирмы, владеющей контейнерами для сортировки мусора на территории Волжского.


Об этом Волжский.ру сообщила руководитель компании «Дубль ПЭТ» Оксана Бабижаева. Меньше месяца назад регоператор пообещал сотрудничать с предпринимателями и подумать над планами по работе в данном направлении.

15 марта стороны обсудили судьбу раздельного сбора мусора в Волжском. Ранее «мусорный» регоператор потребовал демонтировать все контейнеры для сортировки мусора.

По закону, с 1 января 2019 года регоператор отвечает за весь цикл обращения с ТБО, и несмотря на это, организация убеждала всех в готовности взаимодействовать с эко-энтузиастами. Между тем, одним из доводов жалобы в прокуратуру стало именно отсутствие у компании договора с «мусорным» монополистом. Видимо, за месяц регоператор не нашел компромиссных вариантов совместной работы и решил просто избавиться от навязчивых бизнесменов.


- Это делается с одной целью – задушить частный бизнес, - отмечает Оксана Бабижаева.


Добавим, в настоящее время региональный оператор с трудом справляется с работой по вывозу бытовых отходов и уже имеет многомиллионные долги перед подрядными организациями. О раздельном сборе мусора руководители пока даже не думают, зато легко разрушают и уничтожают то, что создавалось несколько лет.

Подробнее: https://www.volzsky.ru/index.php?wx=16&wx2=46041


9 апреля ООО «Управление отходами — Волгоград» подало жалобу в природоохранную прокуратуру — от надзорного органа просили проверить деятельность «Дубль ПЭТ», не нарушают ли они законодательства, и не вредят ли окружающей среде, а также имеется ли у них лицензия, при этом странно, что регоператор не владеет информацией о том, что сбор отходов 5-го класса опасности — нелицензируется. Суть претензии проста — есть один регоператор, и в его отношения с мусором лучше никому не вклиниваться. Тем не менее, так просто сдаваться неравнодушные предприниматели не планируют. По этому обращению прокуратура затребовала с предпринимателя обширный список документов: лицензию на обращение с опасными отходами, лимиты по их размещению, а также прочую документацию.

— Так глупо получается, даже нет слов. У нас есть доказательства, что мы неоднократно пытались наладить договорные отношения с регоператором. Даже у них на сайте задекларировано, что они заинтересованы в таких структурах, как «дубль ПЭТ», но на деле оказывается, что это все неправда. И сейчас прокуратура вменяет, что у нас нет договоренности с «Управлением отходами». Так она от меня не зависит — у меня есть масса доказательств, есть письма, есть свидетели, что мы обращались к ним — ребята, мы готовы работать с вами, работать на вас, работать вместо вас, работать как-нибудь, потому что раздельный сбор считаем максимально полезным делом. Мы на этом даже не зарабатываем, — рассказывает Оксана Бабижаева.

По словам предпринимательницы, на всех баках имеются информационные таблички, которые информируют, что можно сдавать на переработку, а что нет. С общим мусором ТКО они никак не взаимодействуют. Поэтому деятельность «Дубль ПЭТ не подвергается лицензированию: они работают с пятым классом отходов, и выбирают только полезную фракцию, подлежащую вторичной переработке, как например, пластиковые бутылки из под напитков. Получить лицензию на этот вид деятельности невозможно — такой вариант просто не предусмотрен ни одним из профильных ведомств:

— Мы ходили по всем инстанциям и просили — дайте нам лицензию! А нас спрашивают — „Что вам лицензировать? Вы же не ртутные градусники собираете. Мы не знаем, как это оформить“. Опять же, письма тех времен у нас остались, что лицензировать нас законодательно не могут. А от меня требуют документы, которые мне по факту получать не нужно. Мы перерабатываем пластиковые бутылки во вторсырье — ПЭТ-флекс и отправляем их на заводы, которые работают с вторичными полимерами — их этого полуфабриката делают геотекстиль, нетканый материал, он используется в обустройстве дорожных покрытий. Это сырье возвращается в оборот, оно не выбрасывается, а служит дальше… — сообщила Оксана Бабижаева

По мнению предпринимателя, регоператор изначально не пытался идти на компромисс — будь у него желание договориться — стороны бы пришли к решению еще на прошлой встрече. С жалобой в прокуратуру стало ясно, что такой цели просто не стояло.

— Нас попросили просто не поднимать шумиху. Ощущение, что частников просто хотят выдавить с рынка. Никакой заинтересованности ни в раздельном сборе, ни в переработке я не вижу. Ничего не делается в сторону грамотного возвращения отходов в повторный оборот, — жалуется предприниматель. Об этом сообщает Рамблер.

Далее: https://news.rambler.ru/other/42014674/?utm_content=rnews&am...



По факту будет:

- Мусор будет сваливаться в общий контейнер. Сортировать его никто не будет. Да и при всём желании это уже сложнее. Он будет просто грязный от соседства с пищевыми отходами, становясь непригодным для переработки. Сваливаться он будет на самую обычную свалку и закапываться.

- Перерабатывающие фирмы закроются.

- Регоператору нужен только тоннаж мусора, за который ему платят. Конкурент, который "ворует" у него этот тоннаж и получающий свою выгоду по совершенно другой схеме, будет уничтожен при содействии государства.

- Один из самых экологически-убитых городов РФ станет ещё грязнее.

Показать полностью
235

Не прокатило

Приходит такая смс-ка:

Не прокатило Билайн, Тарифы, Интернет, Длиннопост

А я такой пользователь, что не очень-то и помню, какой у меня тариф, скорость и сколько за это плачу. Полез в личный кабинет, а там тариф 50мб/с за 350 рублей. И зачем мне переплачивать 50 рублей за 20 мб/с, если даже на 100 мб/с я не замечу отличие от 50 мб/с?

Открываю список тарифов, а там за те же 50 мб/с просят только 250 рублей. Ну я на него и "перешёл"

Не прокатило Билайн, Тарифы, Интернет, Длиннопост

Не было бы этой смс-ки, я ещё месяца три платил бы по 350 и не чесался.

Хотел билайн заработать 50 рублей, а потерял 100. Маркетинг.

Показать полностью 2
-4

Неотключаемое "всегда в плюсе"

На одном моём пока ещё билайновском номере просматривал включенные услуги на lk.beeline.ru и в очередной раз обнаружил включенную "всегда в плюсе". Не помню, сколько уже раз отключал её. Хотя её нельзя включить после отключения. Ну и она не выключается. Заявка на отключение отклоняется "т.к. услуга уже отключена".

Неотключаемое "всегда в плюсе" Билайн, Сотовые операторы, Услуги
Неотключаемое "всегда в плюсе" Билайн, Сотовые операторы, Услуги

Хоть на сайте во всех местах, где есть кнопка отключения, хоть через короткий номер. В программе под андроид "мой билайн" её нет совсем.

В чате мне сказали, что услуга отключена. Я пока ещё своим глазам верю больше, чем билайну. Требую её выключить и на сайте. На что оператор спрашивает у меня версию браузера. Про вивальди мало, кто знает. Пишу "хром". Просит версию в настройках браузера. Ну ок. Открываю IE. А там, что бы вы думали? Услуга есть. А почему бы ей не быть? Трудно с помощью кукисов или css словить такой глюк. Называю оператору версию IE 11.0.9600.17843.

Неотключаемое "всегда в плюсе" Билайн, Сотовые операторы, Услуги

Ведь это так важно!

Зарегистрирована заявка в технический отдел.

Но спустя сутки с небольшим наблюдаю такое.

Неотключаемое "всегда в плюсе" Билайн, Сотовые операторы, Услуги

Что это значит?

Показать полностью 1
-1

Инструментарий VBA

В данной статье я попробую объяснить, какими удобными фичами обладает редактор VBA для лёгкого и непринуждённого написания кода теми, кто никогда никакое программирование не изучал. Это будет не сложнее рисования совы.

Напомню, что в любой программе из пакета Microsoft Office редактор VBA можно открыть хоткеем Alt+F11.


Выпадающие списки

В каждой из программ Word, Excel, Access и далее есть свои огромные наборы объектов, с которыми приходится иметь дело не зависимо от наших познаний в обычном VB. С опытом их названия запоминаются, но не всегда очевидно их существование или название. Постоянно гуглить быстро надоедает. А можно воспользоваться встроенной в VBA возможностью. Нет, не справкой. Списком свойств и объектов.

Открывается он автоматически, после ввода названия объекта и добавления точки после него.

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Но его можно открыть в любое время клавишами Ctrl+J. Так зачем он нужен? В нём перечислено всё, что доступно в работе с объектом, стоящим перед точкой. Среда VBA контролирует синтаксис и всегда выводит только то, что реально можно использовать в данном участке кода. Только в особых избранных случаях можно использовать и то, чего в списке нет. Но эти случаи настолько редкие и экзотические... Так мы всегда можем найти нужную нам функцию или свойство, о которых мы что-то отдалённо помнили или догадывались об их существовании, но вот убей - не вспомнишь, как оно точно звалось. Я постоянно действую именно так - набираю первое слово до точки или даже только первые буквы, а остальное нахожу в списке, ставлю точку, и начинаю листать список. Много случаев было, когда я нашёл интересные особенности объекта именно этим пролистыванием, не читая документации, не копаясь в справке и не обращаясь к гуглам и форумам. Так же полный список самих объектов и их возможностей всегда можно открыть клавишей F2

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Здесь можно по части названия самого объекта, функции, свойства, константы найти любой элемент языка. Так мной было обнаружено множество возможностей VBA просто на заданную тему. Очень напоминает википедию, которую открываешь вопросом, какого цвета киви, а через два часа отлипаешь от статьи о пунической войне.


Всплывающая подсказка о синтаксисе

Набираем название объекта или функции, вставляем пробел или точку и видим всплывающую подсказку:

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Она кратко описывает синтаксис написания кода для этого объекта. Жирным отмечается параметр, который мы должны описать прямо сейчас, согласно его порядковому положению. В данном случае на картинке это Prompt - текст сообщения. В квадратных скобках перечислены параметры, не обязательные для заполнения. Для некоторых из них даже указаны значения по-умолчанию. Например, стандартная кнопка у любого меседжбокса, даже, если не указать, какие кнопки должны быть - ОК. Такая константа там и указана - vbOKOnly. Что, если мы хотим выбрать другие кнопки? Если мы после текста сообщения поставим запятую, то выпадет список доступных констант для настройки кнопок. Мы их можем перечислить через знак плюса. Например сочетание констант

MsgBox "текст сообщения", vbAbortRetryIgnore + vbDefaultButton2 + vbExclamation, "заголовок"

даст нам такой вид (Title (заголовок сообщения) мы можем пропустить. Тогда будет подставлено название программы):

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Имеем: три кнопки - прервать, повтор, пропустить. Кнопка "повтор" выбрана заранее и если пользователь сразу нажмёт клавишу Пробел или Enter, то сработает эта кнопка. Ну и константа vbExclamation вывела нам иконку восклицания.

К чему я это всё описываю вроде бы к самому банальному коду из разряда "хэлоу, ворлд"? А к тому, что если мы захотим изменить этот кусок кода, то могли бы заменить одну из констант, нажав те самые Ctrl+J. Но есть подвох - откроется список всех возможных констант и объектов языка, а не только те константы, которые можно употреблять в этом параметре меседжбокса. Как же быть? Просто. Удаляем запятую перед перечислением этих констант. Или ставим ещё один знак плюса после одной из имеющихся констант.

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

И список выпадает опять. И он опять показывает только те константы, которые мы можем подставить, чтоб они работали. Таким образом, мы, очень слабо зная бэйсик и английский со словарём, можем писать целые программы, ни разу не заглянув в справку. Код сам подсказывает нам, что мы должны писать.


Окно немедленного выполнения команд Immediate.

Часто нам бывает нужно узнать результат вычисления какого-нибудь выражения или выполнить какую-то команду, не создавая специально для этого модуль. В экселе, например, это может быть команда, снимающая защиту листа:

ActiveSheet.Unprotect Password:="пароль"

Куда писать эту команду? Открываем редактор VBA и нажимаем клавишу Ctrl+G. Откроется окошко Immediate. Если оно уже было открыто, курсор встанет в него и мы можем сразу набирать, что захотим. Если надо, к примеру, узнать ответ на извечный вопрос, то так и пишем:

? 2+2

Нажимаем Enter и получаем ответ. Вопросительный знак перед командой требует вывести ответ в это же окошко. Если мы напишем:

? MsgBox ("текст сообщения", vbAbortRetryIgnore + vbDefaultButton2 + vbExclamation, "заголовок")

то увидим описанный нами меседжбокс. Но когда мы нажмём одну из его кнопок, то в окошке Immediate появится код этой кнопки. Т.е. результат работы этой "программы". Кстати, здесь перечислять параметры меседжбокса надо в скобках, т.к. этот синтаксис используется в норме в таком виде:

If MsgBox("текст сообщения", vbAbortRetryIgnore + vbDefaultButton2 + vbExclamation, "заголовок") = vbIgnore Then
MsgBox "меня все игнорируют"
End If

А ещё мы можем сделать наоборот. Писать программу в модуле, а результаты работы получать во временное место, невидимое пользователю - в это же окошко Immediate. Например в процедуре у нас есть цикл. Он что-то там делает и мы хотим узнать, что насчиталось в переменной a и какое значение имеет счётчик цикла после выхода из него:

Sub НашаПроцедура()
For i = 0 To 3
a = a + i
Debug.Print "итерация", i, a
Next
Debug.Print "итог", i, a
End Sub
результат:
итерация  0  0
итерация  1  1
итерация  2  3
итерация  3  6
итог  4  6

Результат вывелся с помощью Debug.Print. Через запятые можно перечислять все переменные, которые нас интересуют - они выведутся с отступом через табулятор. Теперь мы знаем, что в VBA счётчик цикла после выхода из цикла имеет значение на единицу больше, чем последняя итерация и он не обнуляется. Иногда бывают ошибки, когда переменная i в программе используется дальше и забыли её обнулить.

Итак, мы можем проверять значения различных переменных после отработки процедуры.


Режим отладки

Кстати, в общих модулях запустить любую процедуру можно прямо из кода. Т.е. для этого не надо писать где-то ещё "НашаПроцедура". Мы просто ставим курсор в любом месте кода процедуры и нажимаем клавишу F5.

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Запустим вот такой глупый код:

Sub НашаПроцедура()
For i = 3 To 0 Step -1
a = a + i
a = a / i
Debug.Print a
Next
End Sub

Наша программа немного поработала, а потом выдала сообщение об ошибке.

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Не будем его сразу закрывать и бежать на форумы с воплем "ваш пример не работает выдаёт какую-то ашипку". Посмотрим, что нам предлагает сделать сам VBA. Run-time error - это код ошибки. Его можно использовать в таком обработчике ошибок:

Sub НашаПроцедура()
On Error GoTo ErrorHandler
For i = 3 To 0 Step -1
a = a + i
a = a / i
Debug.Print a
Next

Exit Sub
ErrorHandler:
Select Case Err.Number
Case 11: MsgBox "На ноль делить нельзя", vbCritical
Case Else: MsgBox Err.Description, vbCritical, "Код ошибки: " & Err.Number
End Select
End Sub

On Error GoTo ErrorHandler - инструкция о том, что в случае ошибки программа должна перейти к метке ErrorHandler. Сама метка в коде обозначается её названием и двоеточием. Стоит она после строки Exit Sub - это ещё не конец процедуры, но без меток программа туда не попадёт. Затем начинается перебор всех кодов ошибок, которые в ходе работы процедуры могут возникнуть - Select Case Err.Number. Пока нам известен только код 11 - мы его увидели в сообщении. Для него мы и сделали своё грозное предупреждение, что так делать нельзя.

Если вы точно уверены, что программа даже с ошибкой будет работать правильно и ошибочное выражение можно смело пропустить, то вместо "On Error GoTo ErrorHandler" можно написать "On Error Resume Next". А если во время отладки хотите проверить конкретный участок кода, то прямо перед ним добавить "On Error GoTo 0". Тогда в случае ошибки появится обычное отладочное сообщение, как на картинке выше, а не переход к обработчику ошибок. Оно проигнорирует все предыдущие инструкции на счёт реакции на ошибку. Это бывает удобно, если отладчик уже написан, но закралась ещё одна ошибка, о которой мы ещё ничего не знаем.

Sub НашаПроцедура()

On Error GoTo ErrorHandler

For i = 3 To 0 Step -1

a = a + i

On Error GoTo 0

a = a / i

If i = 0 Then

a = 0

Else

a = a / i

End If

Debug.Print a

Next


Exit Sub

ErrorHandler:

Select Case Err.Number

Case 11: MsgBox "На ноль делить нельзя", vbCritical

Case Else: MsgBox Err.Description, vbCritical, "Код ошибки: " & Err.Number

End Select

End Sub

Продолжим изучать отладочное сообщение об ошибке. Возьмём для этого другой пример:

Sub Бесконечность()
Dim i As Integer
While i = 0
Debug.Print i
Wend
End Sub

После запуска этой процедуры никакую ошибку мы не получим. Только эксель у нас немного зависнет. Потому, что переменная i у нас с самого начала была равна нулю и в ходе выполнения цикла с ней ничего не происходит, только выводится её значение. Но цикл никак не может завершиться. Что же делать, если мы запустили такую программу? Перезагружать компьютер, открывать диспетчер задач? Не обязательно. В любой момент нажимаем клавиши Ctrl+Break. И вот в этом случае у нас и выходит отладочное сообщение, на котором кнопка Continue в этот раз доступна.

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

И нажав её, мы можем опять созерцать работу бесконечности. Ещё мы можем совсем остановить работу процедуры кнопкой End. Или кнопкой Debug поставить программу на паузу - редактор VBA покажет строчку, в которой программа остановилась. Подробности этого режима я опишу ниже.

Но остановить бесконечность нам удалось только потому, что компьютер у нас никогда из неё по своей воле не выйдет. А если программа будет чуть покороче бесконечности или компьютер достаточно быстрый, то мы не успеем уловить этот момент и прервать выполнение программы. А ведь иногда надо это сделать. Для этого у нас есть парочка способов.


Команда Stop

Эту команду мы можем вставить в промежуток между любыми строчками нашего кода. Когда программа в ходе своей работы наткнётся на неё, сообщение мы не увидим, но программа остановится. Немного модифицируем и запустим нашу бесконечность:

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Когда переменная a достигает значения 100, программа останавливается на команде Stop. Сама она выделяется жёлтым маркером, а в левом поле редактора напротив неё стоит жёлтая стрелка - маркер перехода. Это та самая стрелка, которую мы можем увидеть после нажатия кнопки Debug в сообщении об ошибке. Мы можем схватить стрелку мышкой и переставить в любую другую строчку кода, затем опять нажать клавишу F5 и программа продолжит свою работу с этого места. Как это можно использовать? Можно нажать другую клавишу - F8. Она продолжает только одну команду в коде. Так мы можем вести программу по шагам. Выполнять очередной шаг и смотреть на результаты. Пока выполнение процедуры стоит на паузе, мы можем посмотреть значение переменной a, наведя на неё мышку. Можно сразу всю программу запустить в пошаговом режиме. Вместо F5 с самого начала нажать F8 и следить за каждым её шагом.

Точка останова

У команды Stop есть одновременно и достоинство и недостаток. Достоинство в том, что с её помощью мы можем оставить этакую закладку. Мы можем сохранить программу в таком виде, запустить её через некоторое время, и программа опять остановится в этом же месте, как бы напоминая нам, что в этом месте надо было сделать ещё что-то важное. Главное, не забыть о ней, отдавая программу пользователю. В этом и кроется её недостаток - о ней надо помнить, чтоб потом убрать из кода. А чтоб отладить программу и не оставлять следов этого, можно использовать точки останова. Они не сохраняются, если программу закрыть, что тоже удобно. Поставить её можно, щёлкнув в левое поле редактора напротив нужной строчки или нажать клавишу F9

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Окно Watches

Останавливать программу мы научились. Пропустить команды можем. Можем посмотреть значения некоторых переменных. Но делается это как-то сложно. Надо много писать, смотреть в какие-то окна, не всегда понимая, значения каких именно переменных нам туда написало. А ведь у нас в распоряжении есть ещё одно удобное окошко - Watches. Никаких специальных клавиш для него не заведено. Потому, что его обычно размещают в удобном месте экрана и больше не трогают. Открыть его можно через меню View - Watch Window:

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Изначально это окошко всегда пустое, а через него мы можем отслеживать состояние любого объекта среды программирования. Есть несколько способов, как это сделать. Если у нас в коде программы уже написаны какие-то объекты, то мы их можем:

1. перетащить мышкой в окно Watches

2. выделив название и нажав правой кнопкой мыши, выбрать в меню команду "Add Watch"

3. в самом окне открыть такое же меню и в диалоге задать параметры слежки

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Этим же способом можно настроить слежку за теми объектами, которые мы добавляли из кода.

Мы можем этим способом остановить нашу бесконечность, когда переменная a будет равна сотне. Для этого добавляем в Watches не саму переменную, а выражение "a = 100", а в настройках слежки выбираем пункт "Break When Value Is True". Т.е. остановить программу, когда выражение "a = 100" станет истиной. Когда программа стоит на паузе, мы можем руками исправлять значение переменных в окне Locals (или Watches, если вынесем в него саму переменную, а не только выражение). Щёлкаем по имеющемуся значению в столбце Value и пишем туда нужное нам значение. Например, сделаем a равной 99.

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Мы так же можем во время паузы выполнения программы размещать в Watches другие переменные и даже, листы экселя и формы со всеми их кнопками и полями.

Допустим, у нас есть такая таблица и мы хотим во втором столбце вывести порядковые номера напротив месяцев. Не знаю, зачем нам это и почему я решил это сделать не формулой экселя, а в VBA, но пусть будет

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Когда мы запустим такой код, она остановится на обработке ячейки с Маем:

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

А в Watches мы можем посмотреть на свойства переменной r (её тип Range - ссылка на ячейку экселя). Плюсик напротив "r.Cells(i, 1)" развернёт нам всссеееее свойства ячейки с адресом A5. Просто полистав его, мы можем обнаружить много интересных свойств. И то, что свойство Formula имеет реальное значение 43221, соответствующее привычной нам дате 1.05.2018. И что формат ячейки в свойстве NumperFormat имеет значение "[$-419]ММММ;@", т.е. выводит только название месяца, что мы и видим в свойстве Text. Многие из этих параметров мы можем так же изменять в нашей процедуре, но теперь-то мы понимаем, какие из свойств нам надо использовать, чтоб, например, изменить в этой ячейке месяц. Подсказка: заменить май на июнь мы можем так:

r.Cells(i, 1) = DateValue("1.06.2018")

Формула у ячейки станет равной 43252. Если мы сделаем так:

r.Cells(i, 1) ="1.06.2018"

то формат "Месяц" в этой ячейке мы потеряем, а увидим мы сам текст "1.06.2018" вместо "Июнь". Вот такие нюансы бывают. Теперь-то можно понять, почему так происходит.

Если в процедуре мы используем много своих переменных, то, чтоб каждую из них не вытаскивать в Watches, мы можем увидеть их в окне Locals.

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Но его список ограничен переменными текущей работающей процедуры. Какие-нибудь произвольные выражения или глобальные переменные мы туда вынести не можем.

Шаги обхода

Клавиши F5 и F8 я уже описал. Но у нас есть ещё несколько клавиш.

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

В таком примере запустим процедуру "Месяц":

Инструментарий VBA VBA, Excel, Microsoft Word, Длиннопост

Она заполнит первый столбец всеми календарными днями декабря, а во втором столбце с помощью функции "Выходной" укажет: рабочий это день или выходной. Допустим, в работе функции "Выходной" мы уверены и при проходе процедуры "Месяц" мы не хотим каждый раз перебирать все строчки функции. Для этого при пошаговом запуске, дойдя до

If Выходной(dt) = True Then

мы можем нажимать не F8, а Shift+F8 - перешагнуть. Т.е. просим VBA выполнить функцию, но не показывать, как она это делает. Но, если мы, всё таки, зашли в функцию и хотим из неё быстро выйти потому, что она нам не интересна, то мы нажимаем Ctrl+Shift+F8 - выйти.

Хоткей Ctrl+F8 - запустить до курсора. Мы можем поставить курсор в коде на несколько строчек позже текущего шага и перешагнуть через все строки, которые окажутся между ними. Это всё равно, что поставить на месте курсора точку останова и нажать F5.

Показать полностью 17
-6

Макрос для проверки наличия ошибок на листе Excel

Сегодня мы попробуем создать полезный макрос для Excel'я. Для первого раза распишу максимально подробно процесс создания макроса для тех, кто на просторах интернета нашёл полезный макрос, а как использовать его в экселе, не знает.

В качестве примера предлагаю макрос, которым сам часто пользуюсь.

Откроем ленту инструментов "Разработчик", нажимаем на ней кнопку "Visual Basic" или просто нажимаем комбинацию клавиш Alt+F11

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

Откроется редактор VBA, в котором должна быть видна панель "Project". В ней перечисляются все открытые в данный момент книги экселя и их объекты. Нас интересует скрытая книга Personal.xlsb - это личная книга настроек пользователя, в которой мы создадим наш макрос. Это позволит пользоваться макросом во всех книгах на данном компьютере.

Этот файл можно найти через Параметры Excel -> Центр управления безопасностью -> Параметры центра управления безопасностью... -> Надёжные расположения

Расположение автозагрузки пользователя. Обычно это

C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Excel\XLSTART

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

Этот файл можно будет скопировать на другой компьютер по такому же пути и тогда на нём наш макрос тоже будет доступен.

Но вернёмся к созданию макроса.

В нашем проекте должен быть хотя бы один модуль. Создадим его. Щёлкаем правой кнопкой мышки по проекту Personal.xlsb и выбираем команду Insert -> Module

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

Автоматически создалась папка Modules, а в ней наш модуль.

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

Если мы дважды кликнем по модулю, справа откроется его содержимое. Сейчас это белый лист. Вставим в него такой код:


Sub FindError() 'поиск ошибок в выделенной области экселевского листа

Dim rf As Long, rl As Long

Dim cf As Long, cl As Long

rf = Selection.Cells(1).Row

rl = Selection.Cells(Selection.Cells.Count).Row

cf = Selection.Cells(1).Column

cl = Selection.Cells(Selection.Cells.Count).Column

If cf = cl And rf = rl Then

MsgBox "Выделите область листа, в которой будем искать ошибки" & vbCrLf & _

"Искать по всему листу долго и опасно", _

vbCritical, "Поиск ошибок"

Exit Sub

End If

For r = rf To rl

For c = cf To cl

If TypeName(Cells(r, c).Value) = "Error" Then

Cells(r, c).Select

Select Case MsgBox("В ячейке " & vbTab & Cells(r, c).Address & ":" & vbCrLf & _

"формула " & vbTab & vbTab & Cells(r, c).Formula & vbCrLf & _

"ошибка " & vbTab & vbTab & Cells(r, c).Text & vbCrLf & vbCrLf & _

"Показать следующую ошибку?", vbYesNo, "Найдена ошибка")

Case vbYes 'прервёмся

Case vbNo: Exit Sub 'продолжим

End Select

End If

Next

Next

MsgBox "Ошибок не найдено", vbInformation, "Поиск ошибок"

End Sub


(как в пикабу отформатировать отступы не знаю. На работу макроса они не влияют. Просто с ним код выглядит более наглядно. Все программисты сделают это)

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

На всякий случай сразу сохраним макрос в меню File -> Save PERSONAL.XLSB

И закроем редактор VBA. Больше он нам не понадобится.


Теперь вынесем на панель инструментов наш макрос, чтоб им было удобно пользоваться.

Для этого или кликнем правой кнопкой мыши по любой кнопке в ленте инструментов и выберем команду "Настройка ленты..."

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

или щёлкнем по стрелке в панели быстрого доступа, а в вывалившемся меню выберем команду "Другие команды..."

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

Видим список всех доступных кнопок и команд слева, а справа - список кнопок в панели быстрого доступа.

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

Из левого списка выберем раздел "Макросы". Здесь мы видим только что созданный нами макрос. Кнопкой "Добавить >>" поместим его на панель. А кнопкой "Изменить" выберем ей более подходящую на наш вкус иконку и понятное название. Например "Найти ошибку".

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

Получаем такой результат:

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

Всё готово. Попробуем макрос в деле. Берём какой-нибудь лист с разными ошибками. Выделяем область ячеек, в которой наш макрос будет искать ошибки. Если ничего не выделять, то макрос работать не будет - это предусмотрено в его алгоритме. Потому, что в современных версиях экселя лист можно довести до таких размеров, что перебор всех его ячеек может занять вечность.

Итак, выбрали область, жмём нашу кнопку

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

Макрос пробегает по выделенным ячейкам и, как только натыкается на ошибку, выдаёт сообщение:

Макрос для проверки наличия ошибок на листе Excel Excel, VBA, Макрос, Длиннопост

Можем нажать кнопку "Нет", чтоб прервать работу макроса и исправить ошибку самостоятельно (в текущей версии макрос исправлять ошибки не умеет). Можем нажать кнопку "Да" и макрос продолжить искать ошибки и опять остановится на очередной. Ну а если не найдёт, сообщит и об этом.

Теперь у нас есть макрос, который в дебрях огромных листов с рассчётами поможет нам быстро найти досадные недоразумения.

Показать полностью 10

Мы ищем frontend-разработчика

Мы ищем frontend-разработчика

Привет!)


Мы открываем новую вакансию на позицию frontend-разработчика!

Как и в прошлые разы для backend-разработчиков (раз, два), мы предлагаем небольшую игру, где вам необходимо при помощи знаний JS, CSS и HTML пройти ряд испытаний!


Зачем всё это?

Каждый день на Пикабу заходит 2,5 млн человек, появляется около 2500 постов и 95 000 комментариев. Наша цель – делать самое уютное и удобное сообщество. Мы хотим регулярно радовать пользователей новыми функциями, не задерживать обещанные обновления и вовремя отлавливать баги.


Что надо делать?

Например, реализовывать новые фичи (как эти) и улучшать инструменты для работы внутри Пикабу. Не бояться рутины и командной работы (по чатам!).


Вам необходимо знать современные JS, CSS и HTML, уметь писать быстрый и безопасный код ;) Хотя бы немножко знать о Less, Sass, webpack, gulp, npm, Web APIs, jsDoc, git и др.


Какие у вас условия?

Рыночное вознаграждение по результатам тестового и собеседования, официальное оформление, полный рабочий день, но гибкий график. Если вас не пугает удаленная работа и ваш часовой пояс отличается от московского не больше, чем на 3 часа, тогда вы тоже можете присоединиться к нам!


Ну как, интересно? Тогда пробуйте ваши силы по ссылке :)

Если вы успешно пройдете испытание и оставите достаточно информации о себе (ссылку на резюме, примеры кода, описание ваших знаний), и если наша вакансия ещё не будет закрыта, то мы с вами обязательно свяжемся по email.

Удачи вам! ;)

Показать полностью
Отличная работа, все прочитано!