Список в Exel Продолжение

Программирование на Visual Basic for Applications
fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Список в Exel Продолжение

Сообщение fizik_leha » 09.09.2004 (Чт) 14:23

На листе есть список.
Как из VBA до него достучаться.

Например как при помощи макроса выбрать 5-й элемент этого списка.

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 09.09.2004 (Чт) 15:58

Если список в одной колонке, то его можно легко загрузить в массив и работать с ним.
"There's more than one way to do it!"

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 09.09.2004 (Чт) 16:08

основная проблема, то что в списке есть повторяющиеся значения.
Поэтому нельзя с помощью массива точно узнать положение элемента.

Ситуация вообще такая: в зависимости от положения выбранного элемента в списке, в другой ячейке нужно вставить значение зависящее от положения выбранного элемента в списке.

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 09.09.2004 (Чт) 17:01

Создал список per.
В тело листа вписал процедуру:

Private Sub per_click()
i = per.ListIndex
Sheets("ТТН-1 (1)").Range("P39").Value = i
End Sub

почему не работает?

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 10.09.2004 (Пт) 10:39

Private Sub Worksheet_change(ByVal target As Range)
If target.Address = "$C$39" Then
a = Range(c39).ListIndex - ОШИБКА
Sheets("ТТН-1 (1)").Range("P39").Value = Sheets("перечень").Cells(a + 3, 9)
End If
End Sub

Выдает ошибку 1004,
я так понял нельзя использовать метод Lastindex
но как иначе считать значение номера элемента списка.
range (c39) - список.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.09.2004 (Пт) 18:28

Я не понял...
У тебя на объекте Worksheet расположен объект ListBox, или же под "списком" ты понимаешь совокупность ячеек объекта Worksheet?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение alibek » 10.09.2004 (Пт) 18:36

Под ListBox он имеет ввиду тот ComboBox, который отображается на форме (который суть Shape).
Лучше всего, меняй значение ячейки, которая связана со списком.
Lasciate ogni speranza, voi ch'entrate.

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 13.09.2004 (Пн) 9:17

Под списком я подразумеваю стандартный Экселевский список, создаваемый с помощью:

Данные --> Проверка --> Тип Данных --> Список.

И он находится непосредственно на Листе, а не на форме.

Может кто подскажет как комбобокс на лист запихать, но чтоб он при печати не выводился и на листе не выделялся.
С ним бы проще было.

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

Сообщение alibek » 13.09.2004 (Пн) 11:03

Какой ужас...
Фактически это не список и напрямую до него ты не достучишься.
Можешь заполучить для требуемой ячейки источник этого списка, найти пятый элемент и внести его значение в ячейку.
Application.Range(Application.ConvertFormula(Mid$(Selection.Validation.Formula1,2),xlA1, xlA1)).Cells(5) или что-то похожее
Lasciate ogni speranza, voi ch'entrate.


Вернуться в VBA

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

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

    TopList  
cron