2013-12-04 5 views
1

У меня есть рабочая книга с несколькими листами. У меня есть страница меню (Рабочий лист) с несколькими пользовательскими вариантами (введите новый заказ, обновите заказ и т. Д.). У каждого варианта есть флажок рядом с ним, и в зависимости от того, какой флажок установлен, ячейки F4:F21 изменяются от 0 до 1 и , ячейка B1 изменяет имя рабочего листа, куда я хочу пойти. У меня есть следующий VBA в листе главного меню, но когда я нажимаю флажок, ничего не происходит. Любые идеи почему?Измените рабочий лист, когда значение ячейки и флажок изменились

КОД

Private Sub Worksheet_Activate() 
ClearMenuForm 
End Sub 

Private Sub Worksheet_Change (ByVal Target As Range) 
Dim sh As String 
If Not Intersect(Target, Range("F4:F21")) Is Nothing Then 
sh = Cells(1, "B").Value 
Sheets(sh).Select 
End If 
End Sub 

ответ

0

Вы определили sh как String. Так как нет листа с именем «1», например, ваш код будет генерировать ошибку «Задержка вне диапазона». Попытайтесь изменить sh на Long.

Dim sh As Long 
+0

Спасибо. Пробовал это и еще ничего. Это похоже на то, что макрос даже не работает. – user3066209

1

Нажатие флажок не активирует событие Worksheet_Change (см this). Вот почему ничего не происходит.

Попробуйте изменить одну из ячеек вместо этого, чтобы увидеть эффект.

Я думаю, что вы хотите назначить действие своим флажкам. Вы можете сделать это двумя способами:

  1. Щелчок правой кнопкой мыши на флажке, и Назначить макрос ...

    enter image description here

    Вы должны создать соответствующий макрос, который, скорее всего, содержат части код, который вы уже написали, и/или звонки на сайты, которые у вас есть. Вы можете принести VBE (Alt + F11), вставьте модуль в проект VBA, и написать свой Sub, например,

    Sub CheckBox1_Click() 
        MsgBox "Checkbox 1a has changed" 
    End Sub 
    
  2. Via VBA (например, this). С приведенным ниже примером кода вы должны выполнить InitCBs и связать CheckBox1Change с этим флажком (он фактически назначает действия для обоих флажков на рисунке, действие для флажка 2 - CheckBox2Change). Вы также можете установить InitCBs для запуска при открытии файла.

    Sub CheckBox1Change() 
        MsgBox "Checkbox 1b has changed" 
    End Sub 
    
    Sub InitCBs() 
        Dim cb As CheckBox 
        For Each cb In ActiveSheet.CheckBoxes 
         With cb 
         Dim action As String 
         'action = "CheckboxChange" 
         action = Replace(cb.Name, " ", "") & "Change" 
         .OnAction = action 
         End With 
        Next cb 
    End Sub 
    
+0

Интересно. Я бы предположил, что если это флажок Forms с связанной ячейкой, событие Change произойдет, когда ячейка изменится с TRUE на FALSE, но нет. +1 –

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