Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Динамический список, VBA
 
спасибо
Динамический список, VBA
 
Grr можно ещё маленький вопрос, я сделал экспорт кода который отслеживал изменение в рабочей книге и соответственно находился у меня непосредственно в блоке 'Эта Книга'... сохранил его как workbook_onchange.cls, далее например открываю вновь сгенерированный файл, жму ALT+F11 в структуре выбираю тоже Эта Книга, код пустой, жму импортировать файл, выбираю workbook_onchange.cls и т.д. но при этом у меня создаётся модуль Эта Книга и код прописывается туда... можно ли импортировать код именно в блок Эта Книга?  
Динамический список, VBA
 
нет вы не правильно понимаете...в E1 будет пусто если нет списочных свойств поддерживающих множественный выбор... и не пусто если будет хотя бы одно, ID-ки будут выведены через запятую..
подскажите пожалуйста как рациональней заполнить массив в VBA или может по другому?
когда мы обрабатываем лист СПРАВОЧНИКИ мы создаём в рабочей книге Имена типа prop32 prop108
но в остальных листах не все свойства списочные соответственно, мне нужно сравнивать CurrentHead со значениями некоего массива
Динамический список, VBA
 
Код
[URL=http://planetaexcel.ru/forum/index.php?PAGE_NAME=profile_view&UID=37212]Grr[/URL] ну If CurrentHead = "prop32", это как раз решается с помощью содержимого ячейки E1
что-то типа 
tmpArr = Split(E1.Value, ",") 
If inArray(32,tmpArr)


с остальным буду разбираться, спасибо
Динамический список, VBA
 
Grr не совсем понимаю что значит зашивать в код текстовые константы.? во вложении прикреплен файл, который уже содержит всю инфу по каталогу, по определённому бренду
в первом листе "Справочники" в колонке E1 указаны через запятую ID-ки списочных свойств которые должны поддерживать возможность множественного выбора, доделать с учётом этой колонки макрос не проблема... чтобы событие изменения на листе в первую очередь ориентировалось на колонки к которым прикреплены именованные диапазоны, по колонке из первой ячейки точно также определяется ID_СВОЙСТВА и если этот ID присутствует в массиве построенном на основании ячейки E1 то мы его отрабатываем...

автоматизацию я вижу как-то так... возможно я не прав...
создаётся персональный макрос... который соответственно проверяет текущую рабочую книгу, а может быть и даже и все открытые в цикле... для каждой книги он проверяет название 1-го листа этой книги и если оно равно СПРАВОЧНИКИ запускает для этой книги процедуру инициализации именованных диапазонов... вот только я не совсем понимаю как для каждой рабочей книги вкрячить в этом случае в код книги, макрос отслеживания событий при изменении чего-нить на листах

если можно хотелось бы получить пошаговые инструкции, по созданию персонального макроса и что с ним дальше делать
Динамический список, VBA
 
2003
Динамический список, VBA
 
Grr посмотрите пожалуйста что получилось, хотелось бы услышать ваши рекомендации по автоматизации всего этого для вновь сгенерированных и соответственно пустых от макросов файлов, какой список делать множественным а какой нет, я пока задал в условии жёстко... но тут проблем не возникнет... думаю при генерации файла просто в строго определённой ячейке будут идти через запятую ID_СВОЙСТВ которые должны поддерживать множественный выбор, далее всё просто...

также если можно поясните, не совсем понял, как обойти проблему Безопасности с макросами... сейчас я соответственно сделал её самого низкого уровня, что наверное не очень хорошо
Изменено: dbs74 - 21.10.2015 15:12:36
Динамический список, VBA
 
как я понимаю в моём случае можно для отслеживания изменений на каждом листе делать как-то так
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) ' срабатывание при изменении на листе
    If Sh.Name = "Справочник" Then Exit Sub ' если изменения на листе Справочник - выходим из макроса
    Dim rngDV As Range
    Dim oldVal As String
    Dim newVal As String
    Dim lOld As Long
    If Target.Count > 1 Then GoTo exitHandler

    On Error Resume Next
        Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
    On Error GoTo exitHandler

    If rngDV Is Nothing Then GoTo exitHandler

    If Intersect(Target, rngDV) Is Nothing Then
        'ничего не делаем
    Else
        Application.EnableEvents = False
        'томагочим варианты ячейки, предварительно проверим как не знаю что колонка нужная
    End If

    exitHandler:
        Application.EnableEvents = True
End Sub

Оформление кода - кнопка <...> [МОДЕРАТОР]
Изменено: dbs74 - 23.10.2015 10:53:29
Динамический список, VBA
 
наверное нет... хотелось бы обойтись без дополнительных столбцов... как я понимаю список с возможностью множественного выбора реализуется с помощью создания макроса для каждого листа который отслеживает события типа onCange, извините если я оперирую терминологией javascript, если листов много, а первый технологический, возможно ли создать событие для всей книги? http://www.planetaexcel.ru/techniques/1/181/ там жёстко указываются ячейки где нужно отслеживать события... вот в этом примере http://www.contextures.com/excel-data-validation-multiple.html как я понимаю нет... но в моём случае мне нужно вводить дополнительное условие проверять если я кликнул на колонке у которой прописано выбирать из списка... я должен ещё дополнительно проверить что выбор из множественного списка и только тогда что-то делать...  
Динамический список, VBA
 
не совсем понимаю что в п1 понимается под НАДСТРОЙКА
по п2 имел ввиду список с возможность множественного выбора, чтобы можно было бы добавлять варианты через запятую... что-то подобное как тут в http://www.planetaexcel.ru/techniques/1/181/ вариант3, может быть менее наворочено... просто чтобы например в именах если для ID_СВОЙСТВА  = 777 стоит флаг 1, то можно было бы забить Коля, Женя
Динамический список, VBA
 
Grr более менее всё понятно, что и как, хотелось бы задать парочку уточняющих вопросов на предмет возможно ли в принципе сделать это...
листов кроме технологического будет по большей части не один... но это не проблема, как я полагаю нужно кусок который работает с листом
Set CurrentSheet = Sheets("First Class")
переделать в цикл, чтобы пробегаться по всем листам рабочей книги и делать то же самое что и для него...
вопросов требующих пояснения два:

1. Сейчас в коде для 1-го листа прописан макрос для кнопки, который вызывает по сути дела инициализацию всех именованных диапазонов, т.к. файлов которые нужно будет обрабатывать будет достаточно много, то наверное как я понимаю, возможно и не правильно, поправьте меня, необходимо создать "персональный макрос" который будет делать что-то такое для текущей workbook, проверять название первого листа у текущей workbook и если это название = 'Справочники' делать тоже самое что делает сейчас кнопка в листе 'Справочники', в этом случае естественно создастся как я понимаю автоматом Personal.xls

2. В листе 'Справочники' хотелось бы сделать небольшую доработку, а именно  например в колонках E и F создать строки
108 0
32  1
777 0
где колонка E это ID_СВОЙСТВА а колонка F это флаг, говорящий макросу как должно использоваться это свойство как простой список или же мультисписок, т.е. 0 это обычный список, а 1 это мультисписок...  
возможно ли это при использовании именованных диапазонов?
     
Динамический список, VBA
 
Grr спасибо вам, буду разбираться
Динамический список, VBA
 
TheBestOfTheBest вы как я понимаю создали именованые диапазоны, это я например видел тут http://www.excel-vba.ru/chto-umeet-excel/vypadayushhie-spiski/ и указали их в качестве  Источника
однако я же написал, что файл(ы) создаваемый он динамический и соотвественно в первом листе свойств типа список с их потенциальными значениями может быть достаточно большое количество, создание этих именованых диапазонов как я понимаю это некая предварительная ручная работа, чего хотелось бы избежать, всё что хотелось бы это только сказать тому кто будет с этими файлами работать... выдели ячейки такие-то такие-то... далее Данные -> Проверка -> Тип Данных=Список с источником таким-то таким-то... а в ф-ция которая получит на вход ячейку, определит её код... например D4, значит нужно обратиться к ячейке D1, получить её значение
Помещение[prop32]
из этого значения получить число 32, и сформировать из первого листа список, учитывая что нужны только строки у которых в колонке B содержимое = 32
или что наверное ещё лучше при открытии файла... макрос должен пробежаться по данным листа с названием Справочники, и сформировать ассоциативный массив в памяти, чтобы ф-ция каждый раз не томагочила данные ячеек 1-го листа а обращалась к памяти
Динамический список, VBA
 
файл во вложении
Динамический список, VBA
 
Добрый день всем, никогда не писал макросы, а поиск в интернете не помог, поэтому спрашиваю. Есть файл excel, динамически сформированный из базы данных, первый лист этого файла содержит справочники, с разными данными, которые представлены в формате ID_ЭЛЕМЕНТА ID_СВОЙСТВА НАЗВАНИЕ_ЭЛЕМЕНТА, например для страны...
85585108Щвеция
85584108Франция
во всех остальных листах содержатся данные которые потом планируется изменять и заливать обратно в базу данных, формат данных приблизительно такой...
ID[id]Название[name]Цена[price]Помещение[prop32]Страна[prop108]
171095C5-366100.00
171106E3-274200.00
как я понимаю в Excel на ячейки Помещение и Страна можно создать СПИСОК указав ему источник, что-то типа A1:A10 или используя ф-цию ДВССЫЛ, параметром которой будет тоже некая ячейка
теперь собственно вопрос, можно ли в качестве источника указать некую рукописную ф-цию, параметром которой будет та ячейка по которой производится клик?
как должен выглядеть в этом случае код? =INIT_LIST() почему-то не работает
далее логика планируется такая, по адресу полученной ячейки, вычисляется верхняя ячейка этой колонки, из её названия определяется ID_СВОЙСТВА, и собственно показывается список... как я понимаю опять же с помощью макроса можно предварительно обработав технологический список и создать в памяти массивы, дабы в вышеуказанной ф-ции уже сразу не проходиться каждый раз по всем ячейкам листа1, а сразу получать список из массива

если то что я хочу не возможно, в силу моей некомпетентности в данном вопросе, буду рад любым идеям

заранее всем спасибо
Изменено: dbs74 - 21.10.2015 10:22:39
Страницы: 1
Наверх