Переход по листам книги в Excel при помощи ComboBox

Программирование на Visual Basic for Applications
Яна
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 09.04.2006 (Вс) 17:25

Переход по листам книги в Excel при помощи ComboBox

Сообщение Яна » 09.04.2006 (Вс) 17:41

Всем привет! Проблема такая. Нужно создать макрос в Excel, при выполнении которого появлялся бы ComboBox со списком названий листов в книге. Соответственно, при выборе названия открывался бы нужный лист. ComboBox с названиями листов сотворила, а дальше никак. Плиз, подскажите, что не так делаю. Заранее благодарна

Sub cort()
With UserForm1
.ComboBox1.AddItem "Лист 1"
.ComboBox1.AddItem "Лист 2"
.ComboBox1.AddItem "Лист 3"
.ComboBox1.AddItem "Лист 4"
.ComboBox1.AddItem "Лист 5"
.ComboBox1.AddItem "Лист 6"
.ComboBox1.AddItem "Лист 7"
.ComboBox1.AddItem "Лист 8"
.ComboBox1.AddItem "Лист 9"
.ComboBox1.AddItem "Лист 10"
.Show
End With

If UserForm1.ComboBox1.Value = "Лист 1" Then
Sheets("Лист1").Select
ElseIf UserForm1.ComboBox1.Value = "Лист 2" Then
Sheets("Лист2").Select
End If

End Sub

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Re: Переход по листам книги в Excel при помощи ComboBox

Сообщение Avtopic » 09.04.2006 (Вс) 19:34

привет!
Яна писал(а):With UserForm1
.ComboBox1.AddItem "Лист 1"
.ComboBox1.AddItem "Лист 2"
.ComboBox1.AddItem "Лист 3"
.ComboBox1.AddItem "Лист 4"
.ComboBox1.AddItem "Лист 5"
.ComboBox1.AddItem "Лист 6"
.ComboBox1.AddItem "Лист 7"
.ComboBox1.AddItem "Лист 8"
.ComboBox1.AddItem "Лист 9"
.ComboBox1.AddItem "Лист 10"
.Show
End With
Эту част разместите в UserForm_Initialize


Яна писал(а):If UserForm1.ComboBox1.Value = "Лист 1" Then
Sheets("Лист1").Select
ElseIf UserForm1.ComboBox1.Value = "Лист 2" Then
Sheets("Лист2").Select
End If
End Sub
А эту част разместите в ComboBox1_Change
И вместо .Select исползуйте .Activate

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.04.2006 (Вс) 19:43

Только Sheets(Combo1.Value).Activate
Lasciate ogni speranza, voi ch'entrate.

Яна
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 09.04.2006 (Вс) 17:25

Сообщение Яна » 09.04.2006 (Вс) 22:18

Ура! Получилось! Большое спасибо!

elena
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 12.03.2006 (Вс) 15:34
Откуда: germany

Сообщение elena » 10.04.2006 (Пн) 12:26

Яна писал(а):Ура! Получилось! Большое спасибо!

а у меня невышло :( покажите Ваш код плиз. заранее спасибо.



делаю так:
(но переход осуществляется только по двум листам)


Private Sub UserForm_Click()
With UserForm1
.ComboBox1.AddItem "Tabelle 1"
.ComboBox1.AddItem "Tabelle 2"
.ComboBox1.AddItem "Tabelle 3"
.ComboBox1.AddItem "Tabelle 4"
.ComboBox1.AddItem "Tabelle 5"
.ComboBox1.AddItem "Tabelle 6"
.ComboBox1.AddItem "Tabelle 7"
.ComboBox1.AddItem "Tabelle 8"
.ComboBox1.AddItem "Tabelle 9"
.ComboBox1.AddItem "Tabelle 10"
.Show
End With

End Sub

Private Sub ComboBox1_Change()
If UserForm1.ComboBox1.Value = "Tabelle 1" Then
Sheets("Tabelle1").Activate
ElseIf UserForm1.ComboBox1.Value = "Tabelle 2" Then
Sheets("Tabelle2").Activate
End If
End Sub
lenuschechka

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 10.04.2006 (Пн) 12:50

-Алё-на, это Я-на.
-А я не Алёна...
-А я-на тоже не Яна, это я так разговариваю-на...


(извините, не удержался) :lol:

По теме - ессесно, если в ComboBox1_Change() прописать только два листа, то только по ним и будет переходить. Правильное решение написал alibek, но оно работает, только если в Combobox'е именно те имена листов, которые и в экселе.

На всякий случай, если непонятно, процедура должна выглядеть так:


Код: Выделить всё
Private Sub ComboBox1_Change()
   Sheets(Combo1.Value).Activate
End Sub


ЗЫ Если хочется поизвращаться, то можно просто дополнить If еще десятком ElseIf'ов...
Быть... или не быть. Вот. В чём вопрос?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 10.04.2006 (Пн) 13:09

Ага. А, userform_initialize - так:

Код: Выделить всё
private sub userform_initialize()
dim i as long
for i=1 to activeworkbook.worksheets.count
combobox1.additem activeworkbook.worksheets(i).name
next i
end sub

elena
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 12.03.2006 (Вс) 15:34
Откуда: germany

Сообщение elena » 10.04.2006 (Пн) 17:10

спасибо uhm и конечно RayShade :wink:
lenuschechka


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

    TopList