Mini-ats102.ru

ООО “Мультилайн”
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Макросы excel if then

Exceltip

vba цикл excel for each for next

Цикл For Loop в VBA – один из самых популярных циклов в Excel. Данный цикл имеет две формы – For Next и For Each In Next. Данные операторы используются для последовательного перемещения по списку элементов или чисел. Для завершения цикла мы можем в любой момент использовать команду выхода. Давайте подробнее рассмотрим каждый из этих циклов.

Delete Sheet if it Exists

Example 2

This macro loops through each sheet in your active workbook. It checks to see if a sheet exists, and if it does, it deletes it. This particular example looks for a sheet named Sheet1 , but you can change the name in quotes to whatever sheet name you want. If the sheet doesn’t exist, the macro will exit cleanly without deleting anything and, more importantly, without giving you an error.

If you use either of the two previous macros to delete a worksheet that isn’t empty, you’ll probably get a warning prompt like this one:

Content exists on sheet prompt

This happens every time you try to delete a worksheet with content on it. It’s unbelievably annoying if you’re trying to delete multiple sheets in one macro. Scroll down to the next VBA example for a solution to this problem.

If-then in Excel: how does it work?

Like every function and formula in Excel, IF is based on a specific syntax:

=IF(condition, value_if_true, value_if_false)

As shown above, the function has three parameters, the first two of which are compulsory.

  • Condition: This position must contain a condition – a comparison between two values – where one or both values can be cell references. The possible conditions are:
    • Equal (=)
    • Unequal (<>)
    • Less than (<)
    • Greater than (>)
    • Less than or equal to (<=)
    • Greater than or equal to (>=)

    In practice, an Excel if-then statement can look like this:

    =IF(A1>=100,”target achieved”,”target not achieved”)

    In Excel, functions in the formula bar always start with an equals sign and the parameters are embedded in parentheses. You can also make absolute cell references by using a dollar sign. This means that functions will always refer to the specified cell, even when copied to other cells.

    IONOS Black Friday Sale

    Save up to 99% on our most popular products.

    Sale ends Cyber Monday!

    Hosting – $1/yr
    WordPress – $1/yr
    Domains – $1/yr

    You don’t have to enter the IF function into a cell or the formula bar manually. If you like, you can use the “Insert function” feature, which helps you fill out formulas correctly.

    Tip #3: R1C1 Style Formula Notation

    If you use the macro recorder for formulas, you will notices that it creates code with the FormulaR1C1 property.

    R1C1 style notation allows us to create both relative (A1), absolute ($A$1), and mixed ($A1, A$1) references in our macro code.

    R1C1 stands for Rows and Columns.

    Relative References

    For relative references we specify the number of rows and columns we want to offset from the cell that the formula is in. The number of rows and columns are referenced in square brackets.

    The following would create a reference to a cell that is 3 rows above and 2 rows to the right of the cell that contains the formula.

    Negative numbers go up rows and columns to the left.

    Positive numbers go down rows and columns to the right.

    Absolute References

    We can also use R1C1 notation for absolute references. This would typically look like $A$2.

    For absolute references we do NOT use the square brackets. The following would create a direct reference to cell $A$2, row 2 column 1

    Mixed References

    with mixed references we add the square brackets for either the row or column reference, and no brackets for the other reference. The following formula in cell B2 would create this reference to A$2, where the row is absolute and the column is relative.

    When creating mixed references, the relative row or column number will depend on what cell the formula is in.

    It’s easiest to just use the macro recorder to figure these out.

    FormulaR1C1 Property versus Formula Property

    The FormulaR1C1 property reads the R1C1 notation and creates the proper references in the cells. If you use the regular Formula property with R1C1 notation, then VBA will attempt to put those letters in the formula, and it will likely result in a formula error.

    Therefore, use the Formula property when your code contains cell references ($A$1), the FormulaR1C1 property when you need relative references that are applied to multiple cells or dependent on where the formula is entered.

    If your spreadsheet changes based on conditions outside your control, like new columns or rows of data are imported from the data source, then relative references and R1C1 style notation will probably be best.

    I hope those tips help. Please leave a comment below with questions or suggestions.

    You may also like

    Ссылка на процедуру VBA

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

    Для лучшего понимая рассмотрим пример (в примере используется псевдокод):

    Выносите дублирующие участки кода в отдельные процедуры и указывайте ссылки на них из главной процедуры:

    Для указания ссылки на процедуру используется оператор Call, который состоит из необязательного ключевого слова Call и имени вызываемой подпрограммы:

    Авторизация в Excel на VBA

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

    Авторизация в Excel: основной алгоритм работы

    Для начала, необходимо разработать алгоритм, по которому мы будем работать, и выглядеть он будет примерно так:

    Авторизация на VBA: алгоритм

    Итак, поехали!

    Авторизация в Excel: макет документа

    Наш рабочий документ будет состоять из четырех листов:

    1. Лист с приветствием — единственный лист, который будет отображаться всем пользователям до авторизации
    2. Лист с дашбордом (визуализированным отчетом) — графики, диаграммы/гистограммы — изначально со свойством VeryHidden*
    3. Лист с данными — источник расчетов для дашборда — изначально со свойством VeryHidden
    4. Служебный/технический лист — для хранения логинов, паролей и служебной и вспомогательной информации — также, со свойством VeryHidden

    *VeryHidden— свойство листа, при котором сам лист скрыт и включить его отображение можно только через использование режима разработчика. Для выбора данного свойства, необходимо в Excel зайти в меню «Разработчик» — «Visual Basic». Далее, необходимо выбрать нужный нам лист и в его свойствах («Properties») найти свойство Visible и установить в «2 — xlSheetVeryHidden».

    Авторизация на VBA: свойство VeryHidden

    После этого лист станет «очень скрытым». Отменить свойство VeryHidden можно точно так же через режим разработчика, либо используя необходимый нам макрос, о котором я напишу чуть дальше.

    Авторизация в Excel: группы доступа

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

    1. Администраторы (Admin): доступны все листы , в том числе служебный, а также отсутствуют какие-либо ограничения.
    2. Руководители и ответственные за данные (Head): доступны 2 рабочих листа + стоит пароль на изменение структуры книги.
    3. Рядовые сотрудники компании (Worker): доступен только 1 рабочий лист с дашбордом + стоит пароль на изменение структуры книги.
    Авторизация в Excel: разработка макета формы

    С этим пунктом не должно возникнуть никаких проблем. Элементов на форме авторизации должно быть не так уж и много:

    • Поле ввода для логина
    • Поле ввода для пароля
    • Кнопка «Авторизация» (проверка логина и пароля)
    • Различные подписи на форме
    • По желанию: кнопка закрытия формы, кнопка восстановления пароля, логотипы, справка и все, что душе угодно

    Для тех, кто не знает, как создавать формы в VBA: нужно зайти в меню «Разработчик» — «Visual Basic», нажать правой кнопкой по нашему проекту (VBAProject Название_Файла.xlsx), затем Insert — UserForm. Создается форма с названием UserForm1, на которой мы и будем размещать все наши объекты с помощью меню «ToolBox».

    Если быстро набросать элементы, которые мы перечислили, должно получиться что-то вроде этого:

    Авторизация на VBA: форма авторизации

    После добавления элементов, поменял их стандартные названия:

    «UserForm1» переименовал в «Authorization».
    «TextBox1» переименовал в «TextBox_Login».
    «TextBox2» переименовал в «TextBox_Pass».

    Также, в свойствах «TextBox_Pass», мы находим свойство «PasswordChar» и вводим любой символ, который мы хотим видеть вместо вводимых символов пароля — чаще всего используется символ «*».

    Ничего лишнего, пока что все просто. Переходим далее.

    Подготовка служебного листа

    В моем примере, служебный лист будет содержать список логинов, паролей, а также соответствующую логину группу доступа. Чтобы немного «усложнить» потенциальный взлом (хотя надо понимать, что взломать Excel продвинутому пользователю не составит никакого труда), пароли на листе мы будем хранить в захешированном виде. Подробнее о хешировании можно прочитать на Википедии, но в вкратце — это преобразование данных в строку фиксированной длины, состоящей из цифр и букв с помощью определенных математических алгоритмов. О том, как мы будем хешировать пароли в Excel, я расскажу далее.

    Итак, для начала, содержимое служебного листа будет выглядеть вот так:

    Авторизация на VBA: служебный лист

    Авторизация в Excel: особенности и написание программного кода на VBA

    Данные пункты тесно взаимосвязаны между собой, поэтому я их объединил в один большой. Здесь мы будем писать программный код для всего нашего файла: как для формы, так и для некоторых событий.

    Для начала, мы напишем код, который будет отображать различные листы в зависимости от роли пользователя после авторизации. Макрос user_group мы делаем приватным и вписывать его будем не в отдельный модуль, а в нашу готовую форму Authorization. Аргументом для макроса является переменная X, которая будет содержать название группы доступа в виде текстовой строки String:

    Хочу обратить внимание на то, что у нашего файла будет стоять «защита структуры книги» с паролем «112», т.е. пользователь не сможет создавать, удалять и переименовывать листы нашего документа. И, чтобы изменить видимость листов, необходимо сначала снять эту защиту программно, а затем, в зависимости от роли пользователя, поставить обратно, что мы и делаем в нашем коде.

    Далее, код для кнопки «Авторизация». При нажатии на данную кнопку, запускается несколько проверок:

Ссылка на основную публикацию
Adblock
detector