Кнопка добавления / вычитания Excel VBA

Вот пример моего проекта на этом рисунке

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

Мне нравится собирать, поэтому я делаю инвентаризацию в Excel.

Я хочу сделать способ, которым я могу нажать кнопку, и это влияет на следующую или предыдущую ячейку

Например:

У Cell C3 была бы кнопка Add , у Cell D3 было бы количество копий, которые у меня есть, и у Cell E3 будет кнопка Subtract . Нажимая кнопку на C3, она добавит еще один номер в ячейку D3. Если вы нажмете кнопку в C1, она вычитает из ячейки D3. Кажется довольно прямолинейным.

Тем не менее, условия:

У меня есть 200 предметов на лист, например, 20 листов (не в примере). Мне хотелось бы, чтобы я мог добавить макросы ко всем кнопкам без необходимости создания нового макроса для каждой кнопки. Я также не хочу, чтобы он работал с выбранной ячейкой. Он должен воздействовать на ячейку справа для кнопки добавления и ячейки слева для кнопки вычитания.

Я везде искал ответ, и я приблизился к решению.

Самое близкое, что я мог найти, но это не то, что я не то, о чем я говорю:

Sub AddOne() ActiveCell.Value = ActiveCell.Value + 1 End Sub Sub SubtractOne() ActiveCell.Value = ActiveCell.Value - 1 End Sub 

Надеюсь, это имеет смысл и благодарит всех вас за ваше время.

  • Восстановить пароль защиты листа в Excel
  • Как избежать использования Select в Excel VBA
  • Как хранить макросы VBA для Office 2007, чтобы они всегда были доступны и делились ими с другими?
  • Excel VBA «Отменить выбор»
  • Как я могу создать функцию щелчка между подсказкой ввода-вывода A1-A10 для ввода пользователем чисел в vba
  • Excel VBA, чтобы превратить строку с переменным числом столбцов в строки фиксированной длины
  • Триггерный макрос с одним нажатием на конкретную ячейку
  • Выполнение SQL-запроса с помощью VBA и заполнение листом данных
  • One Solution collect form web for “Кнопка добавления / вычитания Excel VBA”

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

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

    Способ 1: Кнопки

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

    Предположим, вы назовете свои кнопки такими, как ADD_D3 и SUB_D3 , например, чтобы увеличить / уменьшить значение в D3.


    Сначала создайте подпрограмму для работы в VBA:

     Sub AdjustValue() Dim btnName As String Dim targetCell As String Dim addAmount As Integer btnName = Application.Caller targetCell = Mid(btnName, 5, Len(btnName)) addAmount = IIf(Left(btnName, 3) = "ADD", 1, -1) ActiveSheet.Range(targetCell).Value = _ ActiveSheet.Range(targetCell).Value + addAmount End Sub 

    Разрушение:

    1. Application.Caller дает вам имя вызывающего абонента, в этом случае имя кнопки
    2. Мы берем имя целевой ячейки с конца, пропуская первые четыре символа
    3. Мы выясняем, добавляем ли мы или вычитаем на основе первых трех символов
    4. Мы используем имя целевой ячейки для обновления ячейки листа

    Затем создайте свои кнопки; Добавьте кнопки управления формой в свою электронную таблицу для каждой из кнопок + и -, которые вам нужны.

    Для каждого присваивайте ему систематическое имя, основанное на ячейке, на которую оно должно быть нацелено, как описано выше. Например, на скриншоте выше вы можете назвать первые две кнопки ADD_D3 и SUB_D3 .
    Чтобы переименовать кнопку, щелкните ее правой кнопкой мыши, чтобы выбрать ее, а затем в поле адреса в верхнем левом углу рабочего листа перепишите имя (например, кнопку 1) с новым именем:
    Введите описание изображения здесь

    Наконец, вышеизложенное должно работать и для нескольких листов, так как sub использует ActiveSheet для доступа к ячейке.


    Способ 2: Изменение выбора

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

    Обратите внимание, что вам нужно использовать одиночную кавычку ('), чтобы поместить символ в ячейку в виде текста, например '- и '+ (это видно на панели формул в верхней части примера).

    Затем создайте единую подпрограмму для ответа на одну из выбранных ячеек:

     Sub Worksheet_SelectionChange(ByVal Target As Range) Dim numCell As Range If Target.Count <> 1 Then Exit Sub If Target.Value = "+" Then Set numCell = Target.Offset(0, -1) numCell.Select numCell.Value = numCell.Value + 1 ElseIf Target.Value = "-" Then Set numCell = Target.Offset(0, 1) numCell.Select numCell.Value = numCell.Value - 1 End If End Sub 

    Разрушение:

    1. Имя вспомогательного элемента важно – он сообщает Excel, чтобы он запускал ваш юзер всякий раз, когда пользователь нажимает на любую ячейку
    2. Параметр Target – это ячейка, на которую щелкнул пользователь, но это может быть выбор перетаскивания. Сначала мы проверяем, что размер точно равен 1, и выйдите, если это не так.
    3. Затем мы проверяем его значение для значения + или - . Обратите внимание, что нам не нужно проверять метку кавычки.
    4. Затем мы используем команду « Offset чтобы найти ячейку слева или справа, в зависимости от того, имеем ли мы дело с + или - начальной ячейкой
    5. Как только у нас будет ячейка числа, мы сначала ее выбираем, затем меняем ее значение вверх или вниз

    Причина, по которой мы выбираем числовую ячейку, заключается в том, что она перемещает выделение с ячейки + или - , так что вы можете снова щелкнуть ее. Если вы когда-нибудь захотите работать с этими ячейками, вам нужно временно отключить этот субподряд, например, введя строку « Exit Sub в верхней части.

    Небольшое примечание: Worksheet_SelectionChange – это то, что вы использовали бы, если бы вы работали в макросе листа: Введите описание изображения здесь

    Если вы работаете в модуле ThisWorkbook , вы захотите использовать глобальное подменю выбора:

     Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 'Code goes in here End Sub 

    Тот же код должен работать – и в этом случае будет работать на каждом листе в вашей книге.


    Пример таблицы, в которой показаны оба примера.

    Interesting Posts

    Смогу ли мой компьютер запустить Windows 8 без UEFI?

    Предоставить постоянное разрешение UAC для одной программы?

    Если маршрутизатор отключен на несколько дней, у вас есть IP-адрес в отношении провайдера?

    Как остановить процесс в Terminal

    Повреждение файлов после копирования файлов в Windows 7 64 бит с использованием двух методов

    Режим гостевого Wi-Fi на вторичном маршрутизаторе

    После перезагрузки LUKS зашифрованный объем

    Дублирование столбца таблицы с сохранением отдельной нумерации (в текстовом редакторе, например: MS Word, Libre Office Writer и т. Д.)

    YouTube нет звука, но VLC имеет звук

    Как узнать, является ли noatime или relatime параметром монтирования по умолчанию в ядре?

    Как отсортировать NSMutableArray с пользовательскими объектами в нем?

    Резервирование DHCP и статический IP-адрес

    Что делать с com.apple.quarantine?

    Как переместить сохраненную почту Mail.app с одной машины на другую?

    Можно ли изменить кодировку по умолчанию в блокноте?

    Давайте будем гением компьютера.