nick7inc
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору vasiliy74 Цитата: Не работает подстановка списка если вызываю форму на другом листе: | На то может быть 2 причины, причём сразу обе 1. В моём примере указан явно лист, с которым идёт связь. Сделай что-то вроде: Код: Dim ws as worksheet 'Проверяем, чтобы activesheet указывал на рабочий лист, а не на диаграмму или что-то другое. If TypeName(ActiveSheet) <> "Worksheet" Then msgbox "Не тот лист выбрали!" stop: end ' Или свой код на случай, если пользователь откроет, ' скажем, диаграмму вместо рабочего листа end if set ws=activesheet | А вместо UserForm1.ListBox1.RowSource = Лист1.Range("OO1").Address() пишем: Код: UserForm1.ListBox1.RowSource = ws.Range("OO1").Address() | 2. Нельзя присвоить одно и то же имя разным диапазонам на разных листах. Используй разные имена диапазонов и подставляй соотв. имя в код (... Range("OO1").Address() ). Или реализуй алгоритм по-другому. Добавлено: Цитата: вот мы выбрали значение из списка, А потом что лучше организовать в качестве хранилища (временную переменную используемую между формами), | Вариантов несколько. 1) Объявить глобальную переменную-массив (не очень мне это нравится) 2) Хранить выбранные величины в скрытом листе (прямо в файле или в AddIn'е) 3) Все параметры (список Combobox, текужее значение) остаётся после выполнения UserForm1.Hide и хранится, пока не завершится макрос по команде END, либо пользователь нажмёт крестик на самом окне формы, или как-то иначе вызовется функция Unload UserForm1, или какое-нибудь из событий самой формы, выполняющееся перед показом или после закрытия не изменит состояние Combobox. 4) Сделать скрытый лист Excell и хранить всё в нем. Указатель на этот временный лист-книгу запихиваем в глобальную переменную в рабочей книге. После использования не забываем его удалить: Код: Dim ExcelSheet As Object Set ExcelSheet = CreateObject("Excel.Sheet") 'Создаём ExcelSheet.Application.Visible = True 'Для отладки можем сделать его видимым ExcelSheet.Application.Cells(1, 1).Value = "This is column A, row 1" 'Что-нибудь туда сохнаряем ' [наш крутой код идёт здесь] Set ExcelSheet = Nothing 'Удаляем временную книгу без сохранения MsgBox "Done" | Хотя этот способ немного сложный для новичка. Добавлено: Чуток поправил. Добавлено: Проще всего использовать вариант №3. Если не устраивает, то другие. | Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 17:57 31-08-2007 | Исправлено: nick7inc, 18:50 31-08-2007 |
|