С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/211: Рейтинг темы: голосов - 211, средняя оценка - 4.90
1019 / 123 / 2
Регистрация: 26.08.2011
Сообщений: 1,190
Записей в блоге: 2
1

Как работать в ListBox с несколькими столбцами

28.03.2012, 12:05. Показов 38965. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть ListBox с 4 столбцами (ColumnCount = 4)
Есть 4 массива данных: элементу 1 первого массива соответствует элемент 1 второго, третьего и четвертого массивов. AddItem в ListBox нужно делать так, чтобы соответствующие элементы располагались в ListBox в строчку.
Еще один момент: возможно ли в верхней строке листбокса организовать заголовки столбцов? или поместить перый элемент в поля заголовков
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.03.2012, 12:05
Ответы с готовыми решениями:

ListBox с несколькими столбцами
Здравствуйте! Помогите, пожалуйста, найти решение… Заполняю шаблон заявки из формы. Использую...

Поправить макрос, чтобы он мог работать не только с одним, но и с несколькими столбцами
Sub EditColumn() .Replace "ср!$EW$13", "ср!$EW$14" End Sub Данный макрос заменяет нужное...

Сортировка по алфавиту таблицы с несколькими столбцами
Здравствуйте форумчане, осваиваю VBA в Excel Имеется таблица, прикрепленный файл пример.xls Нужно...

Макрос на создание сводной таблицы с несколькими столбцами
добрый вечер! имеется таблица, из которой нужно сделать сводную с несколькими столбцами. на...

12
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
28.03.2012, 12:29 2
Цитата Сообщение от AndreA SN Посмотреть сообщение
Есть 4 массива данных: элементу 1 первого массива соответствует элемент 1 второго, третьего и четвертого массивов. AddItem в ListBox нужно делать так, чтобы соответствующие элементы располагались в ListBox в строчку.
Visual Basic
1
2
3
4
5
6
7
8
9
    With UserForm1.ListBox1
        For i = 0 To UBound(Array1)
            .AddItem
            .Column(0, i) = Array1(i)
            .Column(1, i) = Array2(i)
            .Column(2, i) = Array3(i)
            .Column(3, i) = Array4(i)
        Next i
    End With

Цитата Сообщение от AndreA SN Посмотреть сообщение
Еще один момент: возможно ли в верхней строке листбокса организовать заголовки столбцов? или поместить перый элемент в поля заголовков
Насколько я изучал этот вопрос - нет. Я использую в качестве заголовков обычные TextBox-ы.
3
Заблокирован
28.03.2012, 12:32 3
Visual Basic
1
2
3
4
5
6
For i = LBound(a1) To UBound(a1)
  ListBox1.AddItem a1(i)
  ListBox1.List(ListBox1.ListCount - 1, 1) = a2(i)
  ListBox1.List(ListBox1.ListCount - 1, 2) = a3(i)
  ListBox1.List(ListBox1.ListCount - 1, 3) = a4(i)
Next
Цитата Сообщение от AndreA SN Посмотреть сообщение
элементу 1 первого массива соответствует элемент 1 второго, третьего и четвертого массивов.
Проще сделать двумерный массив. Тогда и листбокс можно будет одной строчкой кода заполнить.
1
1019 / 123 / 2
Регистрация: 26.08.2011
Сообщений: 1,190
Записей в блоге: 2
28.03.2012, 13:12  [ТС] 4
пр двумерный массив думал. там действительно одна строчка кода нужна типа
Visual Basic
1
Me.ListBox5.List() = spisok()
Но проблема заключается в использовании динамического массива.
У меня данные располагаются в строках, количество которых меняется. Количество столбцов не меняется (4). Правила объявления динамического массива и последующего использования Preserve требуют, чтоб массив объявлялся как mass(столбцы,строки), где число строк - изменяемое, а число столбцов - нет.
А использование list подразмевает положение mass(строки, столбцы)
Может я просто не совсем понимаю, как организовать тут работу?

Добавлено через 9 минут
Побовал оба варианта. Сверху остается пустая строка в ListBox. В чём может быть причина? Заголовки в ListBox отключены
0
Заблокирован
28.03.2012, 13:40 5
Цитата Сообщение от AndreA SN Посмотреть сообщение
Сверху остается пустая строка в ListBox. В чём может быть причина?
Причина наверняка в том, что нижняя граница массивов по умолчанию равна нулю, а заполняли вы их с единицы, т.е. фактически - со второго элемента массива.
0
1019 / 123 / 2
Регистрация: 26.08.2011
Сообщений: 1,190
Записей в блоге: 2
28.03.2012, 14:12  [ТС] 6
Апострофф))) спасибо за оплеуху по моему самомнению))))
ноль в массиве - это для меня привычно, можно сказать по-домашнему уютно)))
НО! Может кто-то также влипнет. Перепутал местами строки присвоения значения и увеличения динамического массива на 1.
Было
Visual Basic
1
2
3
            
ReDim Preserve NN(UBound(NN) + 1)
NN(UBound(NN)) = j
а должно было быть
Visual Basic
1
2
NN(UBound(NN)) = j
ReDim Preserve NN(UBound(NN) + 1)
В результате действительно элементы массива начинались с 1, а в 0 - было пусто. Куда высылать пару пива?))))
0
Заблокирован
28.03.2012, 15:43 7
Цитата Сообщение от AndreA SN Посмотреть сообщение
а должно было быть
Visual Basic
1
2
NN(UBound(NN)) = j
ReDim Preserve NN(UBound(NN) + 1)
Таким образом мы развернули грабли на 180г, но не вокруг черенка (зубья всё равно наверху)
Теперь пустая строка будет внизу списка.

Проще завести глобальный счётчик типа
Visual Basic
1
public NN_Count as long
и
Visual Basic
1
2
3
ReDim Preserve NN(NN_Count)
NN(NN_Count) = j
NN_Count=NN_Count+1
1
1019 / 123 / 2
Регистрация: 26.08.2011
Сообщений: 1,190
Записей в блоге: 2
28.03.2012, 17:27  [ТС] 8
Я по другому сделал. Чтоб не париться с глобальным счетчиком - я просто проверяю - не является ли элемент первым в списке. Если не является - то перед добавкой нового элемента увеличиваем массив на 1
Visual Basic
1
2
3
4
If Klih(0) <> Empty Then
    ReDim Preserve Klih(UBound(Klih) + 1)
End If
Klih(UBound(Klih)) = Elem
В результате ушел от счетчиков вообще))) и всю логику сохранил в одном месте
0
Заблокирован
28.03.2012, 18:38 9
Visual Basic
1
2
3
4
5
6
7
8
9
10
Option Explicit
 
Dim Klih()
 
Sub AddKlih()
If Klih(0) <> Empty Then
  ReDim Preserve Klih(UBound(Klih) + 1)
End If
Klih(UBound(Klih)) = 1 'Elem
End Sub
О_о Error 9 Недопустимый индекс. Т.е. Вы что-то недоговариваете и не всё так просто...

А ещё можно у Гугла спросить - Размерность динамического не инициализированного массива - первая ссылка.
1
Эксперт WindowsАвтор FAQ
18014 / 7715 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
28.03.2012, 23:23 10
Именно. Поэтому берем и сразу после объявления инициализируем:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Option Explicit
 
Dim Klih()
 
Sub AddKlih()
Redim Klih(0)
If Klih(0) <> Empty Then
  ReDim Preserve Klih(UBound(Klih) + 1)
End If
Klih(UBound(Klih)) = 1 'Elem
End Sub
Добавлено через 12 минут
...понятно, значит вопрос в том, чтобы как раз не инициализировать?

Добавлено через 8 минут
Тогда вот я одному студенту впаял - инициализация двухмерного массива внутри цикла на основе преобразования типов:
На том сайте, что ты давал, кстати, до такого не додумались (правда здесь тип можно только Variant и Вариант - не совсем массив .
0
1019 / 123 / 2
Регистрация: 26.08.2011
Сообщений: 1,190
Записей в блоге: 2
29.03.2012, 00:24  [ТС] 11
Апострофф, я тоже инициализировал массив раньше приведенного мной кода
Diskretor всю мою логику полностью здесь повторил.
Я извиняюсь, что всё кучей не публикнул - мусора навалом рядышком накидано с этим кодом. Вот я и забыл о том, что инициализировал массив ранее. За сегодня уже раз 50 прогнал код - ошибок не возникало
0
Заблокирован
29.03.2012, 09:22 12
Цитата Сообщение от AndreA SN Посмотреть сообщение
Чтоб не париться с глобальным счетчиком - я просто проверяю - не является ли элемент первым в списке. Если не является - то перед добавкой нового элемента увеличиваем массив на 1
Мне кажется, проще один раз попариться с объявлением глобального счётчика, чем потом всю дорогу плясать с бубнами вокруг If Klih(0) <> Empty.
А если по логике программы некоторые элементы массива могут пустыми?
Новый велосипед изобретать будем

Наглядный пример -
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
Dim a() As Byte
 
Sub qqq()
ReDim a(0)
Dim I As Byte
For I = 0 To 9
  If a(0) <> Empty Then
    ReDim Preserve a(UBound(a) + 1)
  End If
  a(UBound(a)) = I
Next I
End Sub
Куда же ноль пропал?
1
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,223
29.03.2012, 14:25 13
Я бы сделал уточнение: В вопросе не указано где этот VBA.
Недавно убил целый день на решение аналогичной задачи в Access.
Там в список добавить значения по колонкам метод, предложенный Апострофф, не работает.
Долго искал. Может кому ещё понадобится:
Visual Basic
1
2
3
4
5
6
7
Private Sub Form_Open(Cancel As Integer)
    Dim R, C, N
    For R = 1 To 10
    N = N + 1
          Form_Форма1.ListBox1.AddItem N & ";" & N + 1 & ";" & N + 2 & ";" & N + 3 & ";" & N + 4
    Next R
End Sub
1
29.03.2012, 14:25
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.03.2012, 14:25
Помогаю со студенческими работами здесь

Как одновременно работать с несколькими несмежными строками в Excel
Надо одновременно применить скрытие строк к нескольким несмежными строкам. Строк может быть много....

Отчет с несколькими столбцами
Здравствуйте! У меня не получилось создать отчет с несколькими столбцами. Нужно сделать так же как...

Таблица с несколькими столбцами
Всем привет! Ребят, нужна таблица для финансовой сферы, то есть столбцы для ФИО, для разных...

Комбобокс с несколькими столбцами
Здравствуйте! Есть БД на MSSQL. Подключил БД к программе без проблем. Программа может отрабатывать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru