Как отключить флажок на основе выбора пользователя в Excel - PullRequest
0 голосов
/ 31 октября 2018

Мне нужно отключить флажки в зависимости от списка переменных. Например, если пользователь выбирает «Испания» в списке, разрешается использовать только несколько валют.

  1. У меня есть таблица валют со значением один или ноль в зависимости от выбора пользователя, и это обновление. Ноль означает, что валюта недоступна.
  2. У меня есть макрос, который читает список и отключает или включает отдельные списки. Однако это как «Worksheet_Change даже» и не вызывается из-за изменения выбора списка. Хотя мой диапазон обновляется после того, как пользователь сделал выбор. Поэтому я думаю, что мне нужен макрос на основе модуля, который будет вызываться, когда пользователь делает выбор из списка, но изо всех сил пытается изменить мой текущий макрос.

Мой текущий код:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim R As Range, c As Range, cb As OLEObject

' set a range where the cell will be either 1 or 0 depending on country selection

Set R = Me.Range("C115:C135")
If Not Intersect(Target, R) Is Nothing Then

' sets the checbox to zero if related cell value in range is zero

    For Each c In Intersect(Target, R)
        For Each cb In Me.OLEObjects
        ' Identifies the relevant Checkbox name based on related cell address
            If cb.Name Like "CheckBox" & Val(Split(c.Address, "$")(2)) - 14 Then
                cb.Enabled = c.Value > 0
            End If
        Next cb
    Next c
End If
End Sub

Ответы [ 2 ]

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

Я действительно смог изменить макрос так, чтобы его можно было использовать непосредственно в модуле и вызывать прямо из списка. Увидеть ниже. Спасибо всем за ваш совет. Извините, я изо всех сил пытаюсь сделать отступ в полном коде.

Public Sub Checkboxupdate()

Dim R As Range, c As Range, cb As OLEObject, hb As CheckBox

Set R = Range("C115:C135")
If Not R Is Nothing Then

    For Each c In R
    On Error Resume Next
        For Each cb In ActiveSheet.OLEObjects
            If cb.Name Like "CheckBox" & Val(Split(c.Address, "$")(2)) - 14 Then

                cb.Enabled = c.Value > 0

            End If
        Next cb
    Next c
    End If

    MsgBox "Currency availability updated.", vbOKOnly

End Sub
0 голосов
/ 31 октября 2018

Вы должны быть немного хитрым здесь.

Прежде всего, в нужном листе, где у вас есть код, который вы отправили , напишите новую подпрограмму, например:

Sub MyMacro()
Call Worksheet_Change(ActiveCell) 'change ActiveCell for the range you want to be the target
End Sub

Затем, из события Change списка, попробуйте:

Private Sub ComboBox1_Change()
Call Hoja1.MyMacro 'Replace Hoja1 with the name of your worksheet in VBA.
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...