Поле со списком

Автор ali_vlad, 23 октября 2019, 16:30

0 Пользователи и 1 гость просматривают эту тему.

ali_vlad

Цитата: mikekaganski от 29 октября 2019, 16:08
UniqueColl - это параметр в функции. Он объявлен в строке
Function CheckDup(rowStr As String, byRef UniqueColl)
и не нуждается в дальнейших объявлениях.

Но всё это не имеет значения. Имеет значение то, что нельзя пытаться исправлять ошибки, не видя код.

mikekaganski

Нужен ещё код самой функции - нет ли там проблемы.
С уважением,
Михаил Каганский

ali_vlad

Цитата: mikekaganski от 29 октября 2019, 16:34
Нужен ещё код самой функции - нет ли там проблемы.

bigor

#48
Смотри
CheckDup дважды присвоено True 

ps скриншот удалил, слишком тяжелый получился.
Поддержать наш форум можно здесь

ali_vlad

Цитата: Bigor от 29 октября 2019, 17:06
Смотри
Поменял на Fаlse, ничего не изменилось.

ali_vlad

Наверно лучше будет загнать значения ячеек в коллекцию, а потом коллекцию в Список?

mikekaganski

Ну, кроме изменения True на False (чтобы было как в исходном ответе 37), надо ещё и имена писать как в исходном коде. А то имя функции переделали в ChekDup, а внутри True присваивается локальной переменной CheckDup. Программирование предполагает внимание.
С уважением,
Михаил Каганский

ali_vlad

Цитата: mikekaganski от 29 октября 2019, 17:50
Ну, кроме изменения True на False (чтобы было как в исходном ответе 37), надо ещё и имена писать как в исходном коде. А то имя функции переделали в ChekDup, а внутри True присваивается локальной переменной CheckDup. Программирование предполагает внимание.
Вот я старый баран.

mikekaganski

Цитата: ali_vlad от 29 октября 2019, 17:44
Наверно лучше будет загнать значения ячеек в коллекцию, а потом коллекцию в Список?

Зависит от задачи. Я привёл почти точно кусок своего кода из задачи, где мне важно было сохранить исходную последовательность элементов, и коллекция использовалась исключительно для быстрой фильтрации дубликатов. В случае если порядок не имеет значения, или даже нужно отсортировать элементы, может быть изящнее действительно сначала всё загнать в цикле в коллекцию с отключённой проверкой ошибок, а потом вторым циклом загнать в список.
С уважением,
Михаил Каганский

ali_vlad

Цитата: mikekaganski от 29 октября 2019, 20:07
Цитата: ali_vlad от 29 октября 2019, 17:44
Наверно лучше будет загнать значения ячеек в коллекцию, а потом коллекцию в Список?

Зависит от задачи. Я привёл почти точно кусок своего кода из задачи, где мне важно было сохранить исходную последовательность элементов, и коллекция использовалась исключительно для быстрой фильтрации дубликатов. В случае если порядок не имеет значения, или даже нужно отсортировать элементы, может быть изящнее действительно сначала всё загнать в цикле в коллекцию с отключённой проверкой ошибок, а потом вторым циклом загнать в список.
Именно в этом случае сохранение последовательности не требуется. Даже лучше будет, если список наполнится в алфавитном порядке.
Будут и другие списки, где лучше сохранить исходную последовательность.
Много чего планирую, но сначала надо продумать логику поведения, а потом реализовывать в коде. В любом случае это опыт и тренировка.

ali_vlad

Как добавить коллекцию в список?

mikekaganski

#56
Если нужно из коллекции вытаскивать строки, надо немного изменить наполнение коллекции. Коллекция - это отображение (map) уникальной строки-"ключа" на некий объект-значение, хранящийся в коллекции. Ключи в коллекции уникальны, но значения не обязаны быть уникальными. Я использовал строки в качестве ключей (чтобы отследить дубли), а в качестве значений передавал просто число 1 (для экономии места). Если из такой коллекции потом попытаться вытащить значения, окажется, что там просто куча единиц.

Нужно сделать что-то вроде
Sub sModelAdd
   Dim iCol As Integer ' Long?
   Dim NoDupes As New Collection
   iCol = 1
   On Error Resume Next
   While oASheet.getCellByPosition(2, iCol).String <> ""
       iCellModel = oASheet.getCellByPosition(2, iCol).String
       NoDupes.Add(iCellModel, iCellModel) ' Adding the string *both* as key and as value
        iCol = iCol + 1
   Wend
   On Error GoTo 0
   For Each iCellModel In NoDupes
       oModel.insertItemText(oModel.itemCount, iCellModel)
   Next iCellModel
End Sub
С уважением,
Михаил Каганский

ali_vlad

Спасибо, буду вникать.

ali_vlad

Вопрос на засыпку.
Два списка. Заполняются по условию. Если выбираю значение в первом, второму присваиваю .enabled=false и наоборот.
Можно ли сделать так, чтобы в неактивном списке вместо пустого поля (когда элемент ещё не выбран) появилась надпись, как будто выбран элемент?