2016-05-03 3 views
0

У меня есть вопрос, я пытался найти в Интернете много, но havent нашел решение, которое поможет мне.dropdownmenu автоматически проверяет флажок

Heres my problem: У меня есть выпадающее меню в sheet3 (ws_step3 в vba) в ячейке J3. Выпадающее меню имеет 9 вариантов, где 2 из этих опций автоматически следует включить флажок (назовём флажок "CoffeeCup")

9-варианты A, B, C и т.д.

Im ищет VBA код, который автоматически проверяет, что флажок, если 2 из вариантов проверяются (позволяет сказать, что его C и F, который проверяет флажок)

Im использованием активных флажков X, и с помощью выпадающего меню

Надежда кто-нибудь может мне помочь ,

TY заранее от новичка в VBA :-)
/Klaus

Edit # 1 - Пытались это первый

Private Sub Worksheet_Calculate() 
    If ws_Step3.Range("J3").Value = "C" Then 
    ws_Step3.CheckBoxes("Coffeecup").Value = xlOn 
    Else 
    ws_Step3.CheckBoxes("Coffeecup").Value = xlOff 
    End If 
End Sub 

Edit # 2 - Кредит DDuffy за помощь на этом - у меня уже есть это в моем Private Sub Worksheet_Change (ByVal Target As Range) для J3

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Address = "$J$3" Then 
    'Hvis værdien hedder "fremført cykelsti": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(2, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(3, 2).Value 
End If 

    'Hvis værdien hedder "Afkortet cykelsti": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(13, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(14, 2).Value 
End If 

    'Hvis værdien hedder "Venstresving fra langsiden af T-kryds": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(17, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(18, 2).Value 
End If 

    'Hvis værdien hedder "Cykelbane": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(21, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(22, 2).Value 
End If 

    'Hvis værdien hedder "Ingen cykelfaciliteter": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(27, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(28, 2).Value 
End If 

    'Hvis værdien hedder "Højresvingsshunt": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(31, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(32, 2).Value 
End If 

    'Hvis værdien hedder "Hollænderboks": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(42, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(43, 2).Value 
End If 

    'Hvis værdien hedder "Cykelsti i eget trace": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(46, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(47, 2).Value 
End If 

    'Hvis værdien hedder "Tilladt højresving for rødt": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(57, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(58, 2).Value 
    End If 

End If 

End Sub 

И DDuffys внушения со тезы здесь (изменили его к реальной проблеме, не более обиняков)

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Cells.Count > 1 Then Exit Sub 
Application.EnableEvents = False 

On Error GoTo Errortrap 


'~~> Change it to the relevant string with which you want to compare 
StringToCheck1 = "Hoejresvingsshunt" 
StringToCheck2 = "Tilladt Hoejresving for roedt" 


If Not Intersect(Target, Range("J3")) Is Nothing Then 
    '~~> Check for the cell value 
    If Target.Value = StringToCheck1 Then 
    'change checkbox value to true if it matches 
    Worksheets("ws_Step3").HoejreD.Value = True 
    ElseIf Target.Value = StringToCheck2 Then 
    'change checkbox value to true if it matches 
    Worksheets("ws_Step3").HoejreD.Value = True 
    Else 
    'change checkbox value to false if it doesn't match 
    Worksheets("ws_Step3").HoejreD.Value = False 
    End If 
End If 

LetsContinue: 
    Application.EnableEvents = True 
    Exit Sub 
Errortrap: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 

Мой вопрос теперь, как я объединить их с рабочим листом изменения?

У меня есть образ моего листа здесь: http://imgur.com/D4NXDI8

+0

Что вы пробовали? Тренировка - забавная часть. Вы хотите думать о своем псевдокоде, а затем перевести столько, сколько сможете, в VBA. так что вам нужно что-то вроде: Если ws_steps.Text равно «C» и «F», тогда CheckBoxName.Value равно true. Попробуйте преобразовать это в VBA и покажите нам, что у вас есть. Люди здесь не склонны делать вашу работу за вас, но есть много, которые помогут, если вы застрянете. – DDuffy

+0

Забыл упомянуть, что если вы выбрали опцию C/F и хотите повторно выбрать из раскрывающегося меню для любой опции A или B, флажок должен быть снят снова, но только для опции A или B, остальные должны оставить его выбраным, если он уже был выбран из chossing C/F. – Klaus

+0

Пробовал это:.. Private Sub Worksheet_Calculate() Если ws_Step3.Range ("J3") Значение = "C" Тогда ws_Step3.CheckBoxes ("Coffeecup") Значение = xlOn Else ws_Step3.CheckBoxes ("Coffeecup") .Value = xlOff End If End Sub – Klaus

ответ

0

кредит на Marc L «s вопрос для предоставления строительных блоков для этого.

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

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Cells.Count > 1 Then Exit Sub 

Application.EnableEvents = False 

On Error GoTo Errortrap 


'~~> Change it to the relevant string with which you want to compare 
StringToCheck1 = "C" 
StringToCheck2 = "F" 


If Not Intersect(Target, Range("J3")) Is Nothing Then 
    '~~> Check for the cell value 
    If Target.Value = StringToCheck1 Then 
     'change checkbox value to rue if it matches 
     Worksheets("ws_Step3").Coffeecup.Value = True 
     ElseIf Target.Value = StringToCheck2 Then 
     'change checkbox value to true if it matches 
     Worksheets("ws_Step3").Coffeecup.Value = True 
     Else 
     'change checkbox value to false if it doesn't match 
     Worksheets("ws_Step3").Coffeecup.Value = False 
    End If 
End If 

LetsContinue: 
    Application.EnableEvents = True 
    Exit Sub 
Errortrap: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 

это изменит флажок на true (или отмечен), если в раскрывающемся списке выбран C или F.

EDIT

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

If Target.Cells.Count > 1 Then Exit Sub 
Application.EnableEvents = False 

On Error GoTo Errortrap 


'~~> Change it to the relevant string with which you want to compare 
StringToCheck1 = "Hoejresvingsshunt" 
StringToCheck2 = "Tilladt Hoejresving for roedt" 


If Not Intersect(Target, Range("J3")) Is Nothing Then 
    '~~> Check for the cell value 
    If Target.Value = StringToCheck1 Then 
    'change checkbox value to true if it matches 
    Worksheets("ws_Step3").HoejreD.Value = True 
    ElseIf Target.Value = StringToCheck2 Then 
    'change checkbox value to true if it matches 
    Worksheets("ws_Step3").HoejreD.Value = True 
    Else 
    'change checkbox value to false if it doesn't match 
    Worksheets("ws_Step3").HoejreD.Value = False 
    End If 

     'Hvis værdien hedder "fremført cykelsti": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(2, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(3, 2).Value 
    End If 

    'Hvis værdien hedder "Afkortet cykelsti": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(13, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(14, 2).Value 
    End If 

    'Hvis værdien hedder "Venstresving fra langsiden af T-kryds": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(17, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(18, 2).Value 
    End If 

    'Hvis værdien hedder "Cykelbane": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(21, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(22, 2).Value 
    End If 

    'Hvis værdien hedder "Ingen cykelfaciliteter": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(27, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(28, 2).Value 
    End If 

    'Hvis værdien hedder "Højresvingsshunt": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(31, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(32, 2).Value 
    End If 

    'Hvis værdien hedder "Hollænderboks": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(42, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(43, 2).Value 
    End If 

    'Hvis værdien hedder "Cykelsti i eget trace": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(46, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(47, 2).Value 
    End If 

    'Hvis værdien hedder "Tilladt højresving for rødt": 
    If ws_Step3.Cells(3, 10).Value = WS_DDL.Cells(57, 2).Value Then 
    'Default value sættes til det første i dropdown 
    ws_Step3.Cells(8, 12).Value = WS_DDL.Cells(58, 2).Value 
    End If 

End If 

LetsContinue: 
    Application.EnableEvents = True 
    Exit Sub 
Errortrap: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 

Add the code here.

+0

hmmm, он не будет работать, пытаясь отредактировать то, что я сделал в моем исходном вопросе – Klaus

+0

, когда вы открыли редактор VBA, дважды щелкните имя вашего листа (например, «Sheet1 (ws_Step3)») в окне проекта (вверху) слева) добавьте код. убедитесь, что выпадающий список находится в ячейке «J3» или измените ссылку в коде. убедитесь, что все имена верны, т. е. Coffeecup и т. д. Кроме того, был ли раскрывающийся список с помощью «Проверка данных»? – DDuffy

+0

Выпадающий список был добавлен с использованием проверки данных, да – Klaus

0

Я не думаю, что у вас есть «выпадающее меню в Лист3», но что у вас есть выпадающий, что падает вниз, и в котором вы можете выбрать что-то, и что вы используете, что в меню ,

С помощью combobox вы можете использовать событие «Изменить», чтобы обнаружить выбор. Затем вы получаете то, что было выбрано, и основываясь на том, что вы делаете свое действие.

Private Sub object_Change() 

где object - это имя вашего поля со списком.

+0

Вы правы, мои выпадающие варианты расположены на другом листе, называемом «WS_DDL» Я не использую выпадающую вырезку как я знаю, я использую проверку данных на ячейке J3 в sheet3. Выпадающее меню в J3 происходит от именованного диапазона i, указанного в моем раскрывающемся списке. Я не совсем уверен, что вы имеете в виду с вашим решением, так как им совершенно новый для VBA. Можете ли вы подробно остановиться на этом? – Klaus

Смежные вопросы