Повторяющиеся кнопки кода VBA, каждая из которых имеет свой диапазон, но следует правилу - PullRequest
0 голосов
/ 27 ноября 2018

В настоящее время я использую 2 таблицы на 2 разных листах.

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

Есть ли способ использовать часть имени кнопки для составления диапазона, который я буду использовать в коде?

В качестве альтернативы, есть ли умный способ сделать это масштабируемым, возможно, сохраняя 1 копиюкод и как-то в зависимости от кнопки назначить диапазоны?

Sub Button2_Click()
    Dim cb As Shape
    Dim x As String
    Dim y As Variant
        On Error Resume Next
If IsEmpty(Range("A2").Value) Then
MsgBox "Barcode appears to be empty!"
Exit Sub
Else
        If IsError(Range("E2").Value) Then
            MsgBox "Barcode appears to have no match!"
            Exit Sub
        Else
            y = (Range("J2").Value)
            If IsNumeric(y) Then
                x = Range("J2").Value
            Else
                MsgBox "Ammount to add/subtract must be a number!"
                Exit Sub
            End If

            Set cb = ActiveSheet.Shapes("chkbx2")

            If cb.OLEFormat.Object.Value = 1 Then
                If (Range("E2").Value - Range("J2").Value) < 0 Then
                    MsgBox "quantity can't go below 0"
                Else
                    Range(Range("M2")).Value = Range("E2").Value - Range("J2").Value
                    MsgBox "Subtracted " + x + " part(s) to component: " + CStr(Range("A2").Value)
                End If
            Else
                Range(Range("M2")).Value = Range("E2").Value + Range("J2").Value
                MsgBox "Added " + x + " part(s) to component: " + CStr(Range("A2").Value)
            End If
         End If
End If
End Sub

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

Моя проблема заключается в следующем: у меня есть 25 таких кнопок в настоящее время на моем листе, и я не нашел способа «автоматизировать» изменение координат.
Например, Button2_Click () -> использует координаты в строке 2как "A2", "E2", "J2" ... таким же образом Button3_Click () "A3", "E3", "J3" ...

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

1 Ответ

0 голосов
/ 27 ноября 2018

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

Dim r As Variant
Dim v As Variant
v = Application.Caller
v = Replace(v, "Button ", "")

r = "A" & v

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

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

это предполагает, что вы вызываете эту функцию через объект с именем «Кнопка x»
, где x - это число

Sub Button_Click()

Dim r As Variant
Dim v As Variant

v = Application.Caller
v = Replace(v, "Button ", "")

r = "A" & v

If IsEmpty(Range(r).Value) Then
MsgBox "Cell appears to be empty!"
Exit Sub
Else
MsgBox "cell " + r + " contains " + Range(r).Value
End If

End Sub
  • Я использовал обозначение ячейки, сделанное с помощью буквы+ число ясно.
  • Я использовал 2 переменные, потому что мне нужно было составить несколько диапазонов, и это позволило более чистую реализацию
  • Я использовал переменные типа «вариант», полагая, что он должен быть совместим с различнымитипы данных в коде.

Примечание: это также работает для флажка, о котором я говорил в вопросе

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

Спасибо @ EvR за помощь в отслеживании функции, которая позволила мне продолжить работу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...