Listview vba excel
Listview vba excel

Важно : вне зависимости от выбора, Панель инструментов обязательно должна отображаться на экране, иначе Вы просто не сможете воспользоваться вышеупомянутой командой. Поэтому, если панель не видна, то в меню Вид/View выберите команду Панель элементов/Toolbox или воспользуйтесь одноимённой кнопкой с панели Стандарт/Standard
После этого, в появившемся списке найдите и выберите следующие элементы управления и подтвердите свой выбор нажатием кнопки OK.
Microsoft ListView Control, version .
Microsoft ImageList Control, version .
Важно : если на компьютере присутствует несколько различных версий, то Вам необходимо выбрать контролы одной и той же версии (т.е. если Вы решили работать с 6-й версией ListView, то и ImageList обязательно тоже должен быть 6-й версии, и наоборот), иначе возникнет ошибка (см. скриншот)
Комментарий : Обратите внимание на то, что допускается использование и других значений, так 0 — lvwIcon соответствует виду Крупные значки , 1 — lvwSmallIcon это Мелкие значки , а 3 — lvwReport , соответственно, Таблица , однако, это потребует некоторых изменений, за исключением мелких значков.
Комментарий : Изменять значения этих свойств можно и программно, смотрите пример
Кликните кнопку ImageList и расположите этот элемент управления в любом месте диалогового окна. Обратите внимание на то, что этот «вспомогательный» контрол, предназначенный для хранения изображений / иконок, после вывода формы на экран, не будет отображаться на ней, а стало быть, нет особой необходимости прятать его от глаз пользователя.
Теперь, загрузите в ImageList те иконки, которые должны ассоциироваться с определённым типом файлов, для этого :
Совет : если в выпадающем списке Тип файлов: по умолчанию, установлен Bitmap and Icon Files (*.bmp, *.ico) и найти интересные иконки не получается, то выберите All Files (*.*) и повторите поиск, только учтите, что картинки, содержащие изображение «Бородинской панорамы» лучше не использовать.
Добавьте иконку для каждого из типов файлов, которые будут отображаться, на нашей форме, плюс ещё одна иконка, на тот случай, если в папке будет обнаружен файл с расширением, отличным от нижеперечисленных. В итоге, должно получиться 11 иконок.
Тип файла | Расширение |
Лист Microsoft Excel | .xls |
Шаблон | .xlt |
Надстройка | .xla |
Надстройка XLL | .xll |
Рабочая область | .xlw |
Макрос Microsoft Excel 4.0 | .xlm |
Microsoft Excel 5.0 DialogSheet | .xld |
Диаграмма | .xlc |
Модуль VBA | .xlv |
Файл архива | .xlk |
Комментарий : Разумеется, Вы вправе организовать перебор других типов файлов, или же искать только XLS файлы, в последнем случае, кстати, пример намного упрощается (смотрите вариант #3)
Пример можно скачать здесь
Если же необходимо создать полноценную имитацию стандартного диалогового окна, где вместе с именами файлов, будут также отображаться и их иконки (причём, в отличии от первоначального варианта, эти иконки мы не можем предварительно загрузить в ImageList1, по причине их отсутствия), то в таком случае, нам придётся использовать функции WinAPI.
Обратите внимание на то, что перед выполнение нижеопубликованного кода, одну иконку всё же необходимо загрузить в ImageList1, установив необходимые размеры. Это сделано для того, чтобы не связывать ListView1 и ImageList1 в цикле , где перебираются файлы указанной папки.
ListView с редактируемыми ячейками
Данный пост написан по мотивам статьи с codeproject “ListView in-line editing”.
Суть вопроса в том, что иногда возникает необходимость править данные в ячейках элемента ListView, который настроен на табличное представление (свойство View выставлено в Details). Как вы знаете напрямую это сделать нельзя, потому что ячейки эти реализованы как Read Only.
Исходный код доступен на GitHub.
В этом случае нам поможет TextBox. Как использовать данную методику я покажу на примере. В нашем распоряжении будет таблица с двумя столбцами Address и Value. При этом редактируемой может быть только ячейка в столбце Value. Таблица реализована при помощи элемента ListView и называется lvTable.
Идея подхода следующая: на форму мы поместим TextBox элемент (tbCell), он будет подставляться на место ячейки, данные который мы ходим изменить. Изменение осуществляется двойным щелчком левой кнопки мыши по соответствующей ячейке, после этого информация из нее будет скопирована в tbCell, доступный для редактирования. Для сохранения данных нужно нажать Enter или убрать фокус с элемента.
Далее предлагаю описание реализации в виде последовательности действий. Исходный код проекта прилагается к статье.
Шаг 1
На форме располагаем все необходимые элементы: ListView, TextBox, и настраиваем их.
Свойство | Значение |
BorderStyle | None |
FullRowSelect | True |
Name | lvTable |
Dock | Fill |
View | Details |
Добавим два столбца (Address и Value) на ListView, для этого нужно щелкнуть по значению свойства Columns и в появившемся окне сделать необходимые правки.
Свойство | Значение |
Name | tbCell |
Dock | Fill |
Форма будет выглядеть примерно так, как показано ниже.
Шаг 2
Добавим загрузку демо данных на форму, для этого создадим обработчик события Load для формы и назовем его Form1_Load. После этого добавим в него код, заполняющий таблицу данными.
Добавим обработчики событий для наших элементов.
Событие | Значение |
MouseDoubleClick | lvTable_MouseDoubleClick |
Событие | Значение |
Leave | tbCell_Leave |
KeyPress | tbCell_KeyPress |
Шаг 3
Добавим в обработчики событий код, который позволяет “редактировать” ячейки таблицы.
Создадим три глобальных переменных.
CancelEdit – переменная, являющаяся флагом, через который передается разрешение на изменение данных ячейки.
CurrentItem – текущая запись таблицы.
CurrentSubItem – поле редактируемой записи.
Заполним кодом обработчики событий.
В своем проекте, на этом этапе, вам будет необходимо внести в обработчики событий свои коррективы: проверка вводимых данных и т.п.
На этом все, спасибо!
Listview vba excel
Элемент управления ListView отображает данные как объекты ListItem. Каждый объект ListItem может связать необязательный значок с меткой объекта. Элемент управления превосходит другие при представлении подмножеств данных (типа членов базы данных) или обособленных объектов (типа шаблонов документа).
Возможное применение
- Отображение результатов запроса базы данных.
- Отображение всех отчетов в таблице базы данных.
- В тандеме с элементом управления Treeview дать пользователю расширенное представление ноуда элемента управления TreeView.
Четыре различных доступных режима просмотра
Элемент управления ListView может отображать данные в четырех различных режимах просмотра (как показано на рис. 2.7-2.10). Программирование элемента управления может зависеть от того, какой из режимов просмотра вы предлагаете пользователю.
Каждый из этих режимов имеет свои преимущества. Некоторые из них перечислены в следующей таблице:
Значки. Может управляться мышью, позволяя пользователю перетащить и опустить объект и перестраивать объекты.
Мелкие значки. Позволяет увидеть больше объектов ListItem. Как и в режиме Icon, объекты могут быть перестроены пользователем.
Список. Представляет сортируемый список объектов ListItem.
Таблица. Представляет сортируемый список с колонками, позволяющими отобразить дополнительную информацию.
Рис. 7A.7 ListView в режиме Icon
Рис. 7A.8 ListView в режиме SmallIcon
Рис. 7A.9 ListView в режиме List
Рис. 7A.10 ListView в режиме Report
Изменение режима просмотра свойством View
Чтобы изменить режим визуального отображения, используйте свойство View. Следующий код устанавливает свойство View в режим Report (3), используя встроенную константу lvwReport:
‘ Имя элемента управления — «ListView1»
ListView1.View = lvwReport
Используя свойство View, можно разрешить пользователю динамически изменять вид. В событии формы Load заполняется ComboBox с вариантами выбора отображения:
Private Sub Form_Load()
‘ Заполнение элемента управления ComboBox.
‘ Имя элемента управления ComboBox — «cmbChooseView».
With cmbChooseView
.AddItem «Значки» ‘ 0
.AddItem «Мелкие значки» ‘ 1
.AddItem «Список» ‘ 2
.AddItem «Таблица» ‘ 3
End With
End Sub
В событии Click элемента управления ComboBox настройка вида элемента управления может быть сброшена:
Private Sub cmbChooseView_Click()
‘ Имя элемента управления ListView — «lvwDB».
lvwDB.View = cmbChooseView.ListIndex
End Sub
Два элемента управления ImageList для Icons и SmallIcons
Объект ListItem состоит из подписи (свойство Text) и необязательного изображения, которое снабжается элементом управления ImageList. Однако элемент управления ListView, в отличие от других элементов управления, может использовать два элемента управления ImageList, которые можно установить для использования свойств Icons и SmallIcons. Сколько использовать элементов управления ImageList — один или оба, зависит от выбранного режима визуального отображения, определенного свойством View.
В режимах List, SmallIcon и Report можно использовать для представления объекта ListItem маленький значок. Один элемент управления ImageList (указанный свойством SmallIcons) поставит изображения для использования в любом из этих трех режимов. Во время разработки или выполнения установите свойство SmallIcons на элемент управления ImageList, и он снабдит ListView этими изображениями. Во время разработки, чтобы установить ImageList для SmallIcons, используйте окно диалога страниц свойств элемента управления ListView. Во время выполнения используйте следующий код:
Напротив, когда элемент управления находится в режиме Icon, элемент управления использует другой набор изображений, снабженных вторым элементом управления ImageList. Установите свойство Icons на этот второй ImageList во время разработки, используя окно диалога страниц свойств, или напишите следующий код для установки во время выполнения:
Примечание Размер значков, которые вы используете, определен элементом управления ImageList. Доступны размеры 16×16, 32×32, 48×48, и Custom (заказные).
Если вы планируете использовать больше одного режима отображения и хотите отобразить значки, установите свойства SmallIcon и Icon для каждого объекта ListItem. Следующий код сначала объявляет объектную переменную типа ListItem, затем устанавливает объектную переменную на единственный объект ListItem, добавленный в коллекцию методом Add. Тогда изображения SmallIcon и Icon устанавливаются ссылкой на объектную переменную:
Dim itmX As ListItem
Set itmX = ListView1.ListItems.Add()
‘ Предположим, что изображение с именем «smallBook» существует
‘ в ImageList, на который установлено свойство SmallIcons.
itmX.SmallIcon = «smallBook»
‘ Предположим, что изображение с именем «BigBook» существует
‘ в ImageList, на который установлено свойство Icons.
itmX.Icon = «BigBook»
После установки изображения свойствами SmallIcon и Icon правильное изображение будет автоматически отображаться при переключении видов, используя свойство View.
Отображение ColumnHeaders в режиме Report
Специфическая особенность режима Report — объекты ColumnHeader. Объекты ColumnHeader элемент управления ListView содержит в коллекции ColumnHeaders. ColumnHeader показан на рис. 7A.11:
Рис. 7A.11 ColumnHeader
Объект ColumnHeader имеет свойство Text, которое отображает текст, когда элемент управления находится в реджиме Report. Еще можно установить свойство Width каждой колонки ColumnHeader, а также свойство Alignment (которое устанавливает выравнивание текста, отображенного в ColumnHeader). Следующий пример кода создает четыре объекта ColumnHeader и устанавливает их свойства Text и Width:
Dim colX As ColumnHeader ‘ Объявление переменной.
Dim intX As Integer ‘ Переменная счетчика.
For intX = 1 To 4
Set colX = ListView1.ColumnHeaders.Add()
colX.Text = «Field » & intX
colX.W > Next intX
Настройка текста колонки свойством SubItems
Обратите внимание, что в любом из видов, кроме Report, объект ListItem отображает только одну подпись — свойство Text. Но в режиме Report каждый объект ListItem может иметь несколько других текстовых пунктов. Например, в рис. 2.11 «Путешествие автостопом по Visual Basic. » имеет подпункты «автор» («Вон, Уильям Р.»), «год» (1996) и «номер ISBN», связанные с ним. Каждый из этих текстовых пунктов — свойства объекта ListItem, определенные его свойством SubItems. Далее, поскольку может иметься любое число этих текстовых пунктов, свойство SubItems — это, фактически, массив строк. Таким образом, чтобы установить автора, год и номер ISBN объекта ListItem, код мог бы выглядеть следующим образом:
‘ Имя элемента управления — lvwAuthors.
lvwAuthor.ListItems(23).Text = _
«Hitchhiker’s Guide to Visual Basic and SQL Server»
lvwAuthor.ListItems(23).SubItems(1)= _
«Vaughn, William R.»
lvwAuthor.ListItems(23).SubItems(2)= «1996»
lvwAuthor.ListItems(23).SubItems(3)= » 1-55615-906-4″
Подпункты зависят от наличия ColumnHeaders
И наличие, и количество подпунктов зависят от наличия и количества объектов ColumnHeader. То есть нельзя установить какие-либо подпункты, если нет никаких объектов ColumnHeader. Далее, количество объектов ColumnHeader определяет число подпунктов, которые можно установить для объекта ListItem. И количество подпунктов всегда на один меньше, чем количество объектов ColumnHeader. Это происходит потому, что первый объект ColumnHeader всегда связан со свойством Text объекта ListItem, как показано на рис. 7A.12:
Рис. 7A.12 Первый ColumnHeader и подпункты
Таким образом, если число объектов ColumnHeader в вышеупомянутом примере — 4, то максимальный возможное число подпунктов, которые можно установить — 3.
Adblockdetector