Форум: "Прочее";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
ВнизExcel Найти похожие ветки
← →
{RASkov} © (2008-09-09 17:20) [0]Можно тут вопросик по Excel"у задать?
Есть ли возможность в этой чудо(действительно так)-программе сделать "хитрый" список?
Поясняю:
Есть пару листов в книге. На одном в колонке список(не большой) Например:Val1
и этот список имеет имя(выделяется диапазон и задается ему имя) Spsk, например. Кол-во может менятся, но думаю в пределах от 5 до 50.
Val2
Val3
...
Val20
На втором листе есть табличка из 10 строк и несколько колонок, так вот в одной из колонок хотелось бы сделать данный хитрый список
Т.е. я выделяю 10 ячеек в нужной колонке и Данные>Проверка... Там список и источник делаю =Spsk
Теперь могу выбирать в каждой ячеки колонки из списка с другого листа. Это все не проблема, а собс-но вопрос:
Как сделать список без применения макросов так, чтоб выбранное значение пропадало из общего выпадающего списка...
т.е. в колонке может быть только одна ячейка с определенным значением.... Другими словами в колонке таблицы должна быть возможность выбора всех элементов списка, но в произвольном порядке и небылоб возможности выбрать два раза одно и тоже.
Или такой вариант задуманного:
Пусть в выпадающем списке содержится весь список, но при выборе уже выбранного это как-то пресекалось или, например, очищалась предыдущая ячейка с этим значением... Думаю подробно все расписал, но могу если что уточнить или например скинуть куда-нибудь файл со списками, но без формул(вопрос в них)...
← →
{RASkov} © (2008-09-09 17:31) [1]> есть табличка из 10 строк
Т.е. не из 10, а сколько в списке значений, т.е. в нашем случае 20... Просто в одном месте подумал о списке из 20 значений, а в другом из 10... :( Сорри..
← →
Andy BitOff © (2008-09-09 17:47) [2]Скинь.
Если честно, очень сильно морщил репу, но так и не понял, что нужно =(
← →
{RASkov} © (2008-09-09 17:57) [3]http://webfile.ru/2217761
(16Кб)
← →
Andy BitOff © (2008-09-09 20:03) [4]Т.е. редактирование значений вручную недопустимо? Там где val7 второй раз. Тогда проще удалять значение из списка при его выборе один раз.
← →
{RASkov} © (2008-09-09 20:17) [5]> Т.е. редактирование значений вручную недопустимо?
Ну почему не допустимо... допустимо. Лишь бы правильно все было.
Т.е. например изначально в пустую ячейку C8 вводим значени вручки например Val5 то все должно нормально ввестись, а если Val7, то тут....
Тут можно придумать любые варианты решения, но желательно без макросов...
Например что-нибудь типа =ЕСЛИ(ПОИСКПОЗ(С8; SpisokUnicVals; ?)<>0;.... не могу я что-то соображать по екселевски :(
> Тогда проще удалять значение из списка при его выборе один раз
А как его оттуда удалить-то? И например потом если на ячейке с введенным значением(из списка) нажать Del то значение должно вернуться в список, так как теперь его можно будет выбрать в другой ячейки....
Это я все говорю про Лист1 и списки в ячейках колонки C
Я подозреваю, что описал не понятно, то что хочу реализовать :( Уже сам запутался в этом екселе.... в голове все по делфийски крутится :)
← →
{RASkov} © (2008-09-09 20:24) [6]Другими словами в книге [3] если очистить ячейку С8 то при имеющихся уже выбранных значениях:
Val1
Val7
Val10
У нас в любой пустой(и не только) список должен сожержать
Val2
Val3
Val4
Val5
Val6
Val8
Val9
Или другой вариант: Пусть список всегда полный, но при выборе уже выбранного значения, например в С8 выбрать Val7 то в С4 должна очиститься ячейка....
← →
Andy BitOff © (2008-09-09 20:47) [7]Думаю, что без макросов не обойтись. ИМХО.
Ща еще подумаем.
← →
Andy BitOff © (2008-09-09 20:48) [8]Я понял, что тебе надо.
← →
Real © (2008-09-10 00:58) [9]А чем макросы не устраивают? СИнтаксис - обычный бейсик, имена объектов - легко получить включив запись макроса и потыкав руками по листам да ячейкам...
← →
ggg (2008-09-10 05:48) [10]>>чтоб выбранное значение пропадало из общего выпадающего списка...
Уверен, что нужно? Т.е. когда будут определены 19 из 20 значений, в 20-ом останется только один возможный вариант. А когда будут выбраные все, возможность редактирования (т.е. выбора другого значения для какого-то поля) вообще исчезнет. Надо будет найти, где уже установленно необходимое значение, там сбросить, и уже потом установить его в необходимом месте.
Чем-то напоминает гениальные идеи моего бывшего главного менеджера... :)
← →
{RASkov} © (2008-09-10 08:23) [11]> [10] ggg (10.09.08 05:48)
> Т.е. когда будут определены 19 из 20 значений, в 20-ом останется
> только один возможный вариант.
Именно так.
> А когда будут выбраные все, возможность редактирования (т.е.
> выбора другого значения для какого-то поля) вообще исчезнет.
В принципе - да. Но если встать на любое выбранное значение и нажать Del(очистить ячейку) то значение должно вернуться в список, а если теперь на имеющемся значении выбрать из списка единственное значение, то они(значения) должны поменятся местами, из списка в ячейку из ячейки в список.
> Надо будет найти, где уже установленно необходимое значение,
> там сбросить, и уже потом установить его в необходимом
> месте.
Или так, но как это сделать без макросов? :)
← →
Andy BitOff (PPC) (2008-09-10 11:11) [12]Без макросов не сделать Приду с работы покажу как с макросом сделать.
← →
Andy BitOff (PPC) (2008-09-10 11:50) [13]Хотя я тут перечитал. Ты хочешь что бы из списка пропадало, а это намного муторнее. Т.к. список есть диапазон яцеек придется постоянно его варьировать, что геморройнее нежели проверять введенное значение и в случае повтора не давать его вводить.
← →
{RASkov} © (2008-09-10 14:12) [14]> Ты хочешь что бы из списка пропадало, а это намного муторнее.
Не, я хочу чтоб был контроль, а каким образом - всё равно. Можно чтоб из списка пропадали значения, можно не давать вводить, можно затирать предыдущее введеное значение, можно еще какой другой способ, как например цветом выделять или !-знаками..... Но чтоб без макрасов...
Просто макросы отключаются и все это не работает....(безопасность типа того, достала уже) :( Хотя на самый край можно и с макросами... с ними проще(делать) я думаю, но всеж желательно без них...
Andy BitOff Отдельное Большое Спасибо в любом случае)
← →
Andy BitOff © (2008-09-10 18:52) [15]Без макросов не получится. Зациклинная проверка получается, проверка проверки и т.д. до бесконечности, к тому же не возможно вставить любое значение отличное от содержащихся в списке. В общем вот макрос. Скопируй всё на Лист1 (через ALT+F11, конечно) и всё будет работать.
А на счет безопастности, здесь такой же вечный спор как и запуск потенциально опасного ехе"шника. Обычно юзеру запрещено то, что не разрешено админом и здесь такой же случай. Админ должен посмотреть, что всё нормально и уже дать юзеру, а сам юзер — ни-ни. А VBA такой же мощный инструмент как и любой язык, плохо у него, конечно с GUI, а в остальном достаточно мощная штука. Тут тебе и WinAPI и БД и всё это в удобной обертке. Хотя сам на нем не пишу. Работал в паре с человеком, который на нем писал, так очень плотная взаимосвязь между приложениями, общались месаджами, перекидывали данные, он еще с Ораклом работал и был доволен, в общем.Const MyRangeData = «C3:C12» " функция срабатывает только внутри этого range"а
Public PrevValue As String " Предыдущее значение ячейки
" Проверка вхождения в нужный range
Function InMyRange(Target As Range) As Boolean
Set MyRange = Range(MyRangeData)
InMyRange = (Target.Row >= MyRange.Row And Target.Row <= MyRange.Row + MyRange.Rows.Count — 1) And _
(Target.Column >= MyRange.Column And Target.Column <= MyRange.Column + MyRange.Columns.Count — 1)
End Function
" Запомнить предыдущее значение
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If InMyRange(Target) Then
If Target.Count <= 1 Then
PrevValue = Target.Text
Else:
PrevValue = ActiveCell.Offset(0, 0).Text
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If InMyRange(Target) Then
If Target.Text <> «» Then
" поиск повторного ввода
Set MyRange = Range(MyRangeData)
Set ResSearch = MyRange.Find(What:=Target.Text, LookAt:=xlWhole)
If Not ResSearch Is Nothing Then
FirstRes = ResSearch.Address
ResCount = 0
Do
ResCount = ResCount + 1
Set ResSearch = MyRange.FindNext(ResSearch)
Loop While (Not (ResSearch Is Nothing)) And (ResSearch.Address <> FirstRes) And (ResCount <= 1)
If ResCount <> 1 Then
" найдено более одного значения
t = MsgBox(«Такое значение уже существует.», vbApplicationModal + vbCritical + vbOKOnly, «Ошибка»)
Target.Formula = PrevValue
Target.Activate
End If
End If
End If
End If
End Sub
← →
{RASkov} © (2008-09-10 19:21) [16]> [15] Andy BitOff © (10.09.08 18:52)
---------------------------
Microsoft Visual Basic
---------------------------
Compile error:
Invalid outside procedure
---------------------------
ОК Справка
---------------------------
И выделяет в первой строчке
> Const MyRangeData = «C3:C12» " функция
C12....
:)
Вообщем, понятно.... нужно "справку" нажать, потом это все дело перевести на русский, выкинуть из мозга знания делфи...
Не так уж в принципе и многое... Не, ну ее нафик.... Я уже с формулами, ёкселевскими, весь моск сломал...
Спасибо, конечно, Огромное, но думаю на этом хватит... нужно остановится. Дуб я в екселе и в VBA :(
Алгоритм-то конечно понятен, но "что куда сувать"...
Сделал пока по максимуму удобный ввод данных в ячейки, а проверку на (не)уникальность - опустил, (т.е. оставил на совесть пользователя, благо этот пользователь я сам, просто пользоватся буду редко, но...) Еще раз спасибо.
← →
Andy BitOff © (2008-09-10 21:36) [17]Все кавычки должны быть " парные. Это мне DMClient так помог.
← →
{RASkov} © (2008-09-11 05:58) [18]> [17] Andy BitOff © (10.09.08 21:36)
Ясно. Спасибо, попробую подменить кавычки на настоящие вэбэашные)
← →
{RASkov} © (2008-09-11 15:38) [19]Ага, это[15] "дело" заработало.... Там DMClient минусы еще подправил и еще вроде чего-то...)
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.007 c