#excel #vba
#excel #vba
Вопрос:
Здесь возникли некоторые проблемы. На листе с именем «Пуск» у меня есть столбец «I» В этом столбце, все поля в строках имеют одинаковый выпадающий список:
- Лист 1
- Лист 2
- Лист 3
Я хотел бы открыть лист в рабочей книге, соответствующий значению из выпадающего списка. Так, например, если я выберу лист 1 из списка, откроется «Лист 1» в рабочей книге. Как упоминалось ранее, эти выпадающие списки охватывают весь столбец «I», поэтому независимо от того, какую строку я выбираю для использования выпадающего списка, я бы хотел, чтобы произошло то же самое. Я использовал активную ячейку.Строка, но ошибка несоответствия типа:
Private Sub Worksheet_Change(ByVal Target As Range)
If Rows(ActiveCell.Row).Value = "Sheet 1" Then
Worksheets("Sheet 1").Visible = True
Worksheets("Sheet 1").Activate
Else
If Rows(ActiveCell.Row).Value = "Sheet 2" Then
Worksheets("Sheet 2").Visible = True
Worksheets("Sheet 2").Activate
Else
If Rows(ActiveCell.Row).Value = "Sheet 3" Then
Worksheets("Sheet 3").Visible = True
Worksheets("Sheet 3").Activate
End If
End If
End If
End Sub
Есть идеи?
Комментарии:
1. Мое первое подозрение заключается в том, что
Rows
у меня нетValue
свойства2.
if target.value....
3. Чего вы ожидаете от
Rows(ActiveCell.Row).Value
строки кода?4. @FaneDuru .value должен прочитать выбранное значение из выпадающего списка. Мне удалось заставить это работать, добавив
If Range("A" amp; (ActiveCell.Row)).Value = "Sheet 1" Then
к каждому условию соответственно5. Затем вы можете адаптировать свое событие, чтобы использовать только строку кода :
Worksheets(Range("A" amp; Target.row).value).activate
. Лучшим способом было бы предварительно проверить, существуют ли листы…
Ответ №1:
Вы можете сделать:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 9 Then ThisWorkbook.Worksheets(Target.Value).Activate
End Sub
Обратите внимание, что это будет работать, только если Target.Value
точно соответствует имени листа
Ответ №2:
Вы должны использовать Target
, а не ActiveCell
:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim v1 As Long, v2 As String
v1 = Target.Column
v2 = Target.Value
If v1 <> 9 Then Exit Sub
If v2 = "Sheet 1" Or v2 = "Sheet 2" Or v2 = "Sheet 3" Then
Worksheets(v2).Visible = True
Worksheets(v2).Activate
End If
End Sub