Автоматически создавать флажки

Я хотел бы автоматически создать флажок в столбце A, если в столбце B есть данные. (Причина в том, что у меня есть огромный список с более чем 300 строками, который со временем будет расти, и это решение должно быть постоянным)

    ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
    DisplayAsIcon:=False, Left:=24.75, Top:=75.75, Width:=12.75, Height:= _
    12.75).Select    

Это код, который у меня уже есть для создания флажка.

Я не очень хорошо знаком с VBA - только пару дней назад начал работать с макросами.

Как мне изменить его, чтобы флажки создавались автоматически, как только я ввожу текст в ячейку рядом с ним?

редактировать: флажки должны быть названы числами «Флажок x», начиная с 1. Также не нужны подписи..


person Vincenzo Köstler    schedule 23.07.2018    source источник
comment
Для чего вам нужны флажки? Нельзя ли реализовать раскрывающийся список проверки данных? Причина, по которой я спрашиваю, заключается в том, что добавление таких флажков может привести к беспорядку!   -  person jamheadart    schedule 23.07.2018
comment
Я бы держался подальше от флажков, если это возможно, до сих пор я заставил Excel создавать флажки по мере того, как вы вводите текст, но, похоже, есть еще одна проблема с формулой, которую вы включили, поэтому я изучаю этот банкомат.   -  person M.Douda    schedule 23.07.2018
comment
Вот что я думал. Итак, у меня есть этот лист со всеми этими данными, и я добавил кнопку, которая делает следующее: - создает новый лист - называет лист значением ячейки столбца b - копирует шаблон из листа шаблона в этот новый лист - копирует данные из строки с именем листа в новый лист, теперь у меня есть код, чтобы проверить, является ли флажок в столбце a билетом, и независимо от того, экспортируется он или нет. Но я не могу создать все эти флажки вручную...   -  person Vincenzo Köstler    schedule 23.07.2018
comment
что посоветуете в качестве альтернативы?   -  person Vincenzo Köstler    schedule 23.07.2018
comment
Вы можете использовать Data-Validation, чтобы получить входные данные в раскрывающемся списке флажков в ваших ячейках. Вы можете связать это с событиями worksheet_change, чтобы активировать любые специальные действия, которые вы можете сделать с помощью флажка.   -  person jamheadart    schedule 23.07.2018
comment
Я уже использую проверку данных с этими выпадающими списками. Но причина этого флажка заключается в том, чтобы выбрать, какие строки должны быть скопированы в шаблон для вывода на печать.   -  person Vincenzo Köstler    schedule 23.07.2018
comment
Честно говоря, я бы поставил флажок fake. Я имею в виду, что у меня есть несколько командных работников, которые любят нажимать на флажки, и для меня это головная боль позже работать с макросами. Так что теперь мои сотрудники просто вставляют заглавные буквы X в некоторые ячейки, и это их флажок. Это чисто, просто и эффективно. И, действительно, мне намного проще впоследствии использовать формулы или макросы в ячейках со знаком X внутри или без него. Вы можете комбинировать эту опцию с опцией проверки данных, чтобы в качестве значения в ячейке можно было ввести только X или ничего. Это просто совет. Делайте то, что вам нужно :)   -  person Foxfire And Burns And Burns    schedule 23.07.2018


Ответы (1)


Используя часть кода из этого вопроса - макрос vba для встраивания OLEobject на основе ячейки:

Sub InsertToB()

    Dim cell As Range
    For Each cell In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
         If Not IsEmpty(cell) Then

            Dim ol As OLEObject
            Set ol = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
                                                Link:=False, _
                                                DisplayAsIcon:=True, _
                                                Height:=10)
            With ol
                .Top = cell.Offset(0, 1).Top
                .Left = cell.Offset(0, 1).Left
                .Object.Caption = "Bob"
            End With
        End If
    Next
End Sub
  • Код зацикливается на активном листе и проверяет, пуста ли ячейка в A;
  • Затем добавляет флажок;
  • Точное положение флажка определяется с помощью .Top и .Left;

введите здесь описание изображения

person Vityata    schedule 23.07.2018
comment
Я думаю, вы поменяли местами столбцы A и B. - person M.Douda; 23.07.2018
comment
@ М.Дуда - правда, они поменялись местами. - person Vityata; 23.07.2018
comment
@Vityata, это круто. Благодарю вас! Но как скрыть подписи? - person Vincenzo Köstler; 23.07.2018
comment
Также есть одна проблема, это работает в первый раз, но если я добавляю строки позже и перезапускаю макрос, он переименовывает все чекбоксы, начиная с имени последнего чекбокса ранее (например, если я получил 300 чекбоксов до этого, новый первый чекбокс это 301) - person Vincenzo Köstler; 23.07.2018
comment
@VincenzoKöstler - действительно похоже на проблему, вам также нужно найти способ изменить заголовок. Я пробовал ol.Object.Caption = "Something", он принимает его как заголовок, но не меняет его. - person Vityata; 23.07.2018
comment
@VincenzoKöstler - на самом деле это работает, если файл сохранен и закрыт. Смотрите обновление. - person Vityata; 23.07.2018
comment
Спасибо! Тем не менее, как мне запретить макросу создавать флажки дважды? Я думаю, теоретический способ состоял бы в том, чтобы проверить, есть ли данные в столбце B, и если проверить, есть ли флажок в столбце A, а если нет, создать CB. Но я не знаю, как это сделать на практике - person Vincenzo Köstler; 23.07.2018
comment
@VincenzoKöstler - самый простой способ - написать где-нибудь (скажем, в столбце C) некоторую информацию при создании флажка. Затем установите флажок, только если значение столбца C отсутствует. Не совсем надежно, но было бы неплохо, если бы вы сделали это в другой скрытой книге. - person Vityata; 23.07.2018
comment
тоже не знаю почему но у меня не работает с надписями - person Vincenzo Köstler; 23.07.2018
comment
@VincenzoKöstler - сохраните файл и закройте его. Затем откройте его снова. - person Vityata; 23.07.2018
comment
@ VincenzoKöstler - так вы не получаете Боба после запуска моего кода, сохранения как xlsb и повторного открытия? - person Vityata; 23.07.2018
comment
@VincenzoKöstler - странно. Я понимаю. - person Vityata; 23.07.2018
comment
@Vityata есть ли другое решение для отключения подписи? Это не может быть так сложно, не так ли? Но ничего не могу найти по этому поводу... - person Vincenzo Köstler; 23.07.2018