Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26

Добавление элемента из ListBox на другой лист

08.12.2009, 12:42. Показов 5310. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите пожалуйста как сделать следующую вещь:
есть форма, на ней listbox и кнопка,она должна добавлять на другой лист то, что выбрано в ListBox.
какой код необходим для кнопки? у меня такой, но 1-ую строку добавляет,а 2-ую нет, т.к. заменяет ее первой. Помогите !!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub CommandButton2_Click()
r = 1 ' начало по строкам
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) Then
For j = 0 To Me.ListBox1.ColumnCount - 1
Sheets("Лист2").Cells(r, j + 1) = Me.ListBox1.List(i, j)
Next
r = r + 1
End If
Next
End Sub
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2009, 12:42
Ответы с готовыми решениями:

Шаблонный класс лист. Добавление элемента на место существующего элемента
Всем привет. У меня есть шаблонны класс лит: class List { public: List(); ~List(); List& operator +=(int i); int&...

Добавление данных из листа на другой лист с новой строки
Добрый день, уважаемые форумчане! Прошу у вас помощи по созданию скрипта в таблицу (во вложении). Принцип работы: пользователь...

Добавление записей массива из одной книги на лист другой + возможная конкатенация
Уважаемые форумчане! Возник вопрос касательно познания средств VBA в Excel'e. Идея такая: есть пользовательская форма, которую нужно...

16
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
08.12.2009, 17:04
Не понял, Вам что, весь ListBox1 нужно на Лист2 выписать или только одну позицию? Что значит: вторую строку?
Если одну запись, то почему не использовать ListBox1.Click или просто:

Visual Basic
1
Sheets("Лист2").Cells(r, j + 1) = Me.ListBox1.Value '?
0
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26
09.12.2009, 08:48  [ТС]
Нет весь ListBox не надо, просто выделенную строку. И чтобы он их добавлял, а то просто заменяет. Тем не меннее спасибо, попытаюсь применить этот способ))
0
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26
09.12.2009, 19:23  [ТС]
Все равно не получается
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
09.12.2009, 19:44
Тогда, может Вам такой код нужен?

Visual Basic
1
2
3
4
5
6
7
8
Private Sub CommandButton1_Click()
Dim j As Integer
 
  For j = 0 To ListBox1.ColumnCount - 1
      Cells(1, 5 + j) = ListBox1.Column(j) ' В какой нужен лист 
  Next
 
End Sub
0
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26
09.12.2009, 20:32  [ТС]
Так и не пошло. Я файл прикрепила.
Вложения
Тип файла: xls ListBox c 4 (Автосохраненный).xls (45.5 Кб, 63 просмотров)
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
10.12.2009, 20:37
Вот оттестированный код для формы:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub CommandButton1_Click()
Dim j As Integer, nRow As Integer
  
  nRow = 5
  While Sheets("Отчет").Cells(nRow, 1) <> ""
    nRow = nRow + 1
  Wend
  
  For j = 0 To ListBox1.ColumnCount - 1
      Sheets("Отчет").Cells(nRow, j + 1) = ListBox1.Column(j)
  Next
  Sheets("Отчет").Cells(nRow, 6) = Date
 
  Sheets("Отчет").Activate
 
End Sub
 
Private Sub CommandButton2_Click()
  
  Bilet.Hide
  
End Sub
P.S. Рекомендую применять табы в Вашем коде, иначе сложно с ходу понять, что у Вас где начинается и заканчивается (циклы и блоки).
0
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26
11.12.2009, 11:52  [ТС]
Большое спасибо !!!)))
0
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26
11.12.2009, 12:15  [ТС]
Спасибо, я бы так не догадалась сделать, я даже методов таких не знаю,мы только начали изучать VBA . Прошу прощения, можно обратиться еще с одним вопросом. Я думала, что не получиться реализовать эту процедуру, начала думать по другому(но я обязательно сделаю как вы сказали) и столкнулась с другой проблемой. Мне необходимо с листа "отчет" через Листбох удалять записи, скажем так - отказ от билета. Я реализовала алгоритм очень простой, все по логике правильно, но при нажатии на кнопку он абсолютно ничего не делает, даже ошибок не выдает, дебагером проверила-все правильно! Что не так? Могли бы вы взглянуть, если вам не сложно? Очень рада и благодарна вам!
Вложения
Тип файла: xls ИДЗ с удалением.xls (66.5 Кб, 54 просмотров)
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
11.12.2009, 14:23
А Вам обязательно через Listbox удалять? Могу предложить более простой вариант удаления кнопкой "Delete", сразу всю строку (стандартное Excel-евское действие), при этом, лист автоматически переформатируется, если нужны какие-то дополнительные вычисления после удаления - тоже не проблема. Т.к. у сдаваемого билета не могут измениться какие-либо аттрибуты, то в данном случае считаю форму с листбоксами усложнением задачи.
0
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26
11.12.2009, 15:16  [ТС]
Я сегодня показала ИДЗ с СomboBoxom(это тот последний файл, который я сегодня прикрепила). Прошу прощения за то что если отняла у вас время,думала, что не успею получить ответ, я очень благодарна вам. ИДЗ преподаватель почти зачел,но сказала, чтобы я объяснила код ( каждую его строчку и логику), который заполняет СomboBox (особенно который заполняет дату и почему при добавлении нескольких строк на лист "период проката" он отображает не все). Я его скачала с интернета(там была поставлена другая задача), переделала буквально на интуиции и с Божьей помощью, потому что мы такого не проходили.Могли бы вы что-нибудь подсказать или посоветовать какую-нибудь литературу?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
For y = 5 To r + 6
n = ComboBox5.ListCount
If n = 0 Then
ComboBox5.AddItem CStr(Sheets("Период проката").Cells(y, 2)), 0
Else
a = 0
For j = 0 To ComboBox5.ListCount - 1
If CStr(Sheets("Период проката").Cells(y, 2)) = ComboBox5.Column(0, j) Then
a = 1
Exit For
End If
Next j
If a = 0 Then ComboBox5.AddItem CStr(Sheets("Период проката").Cells(y, 2))
End If
Next y
End Sub
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
11.12.2009, 15:58
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
For y = 5 To r + 6
    n = ComboBox5.ListCount ' Количество записей в ComboBox5
    If n = 0 Then ' Если пустой
       ComboBox5.AddItem CStr(Sheets("Период проката").Cells(y, 2)), 0 ' Добавить новую запись
    Else ' Иначе
       a = 0 ' Принимает значения 0 или 1 (т.е. логическая переменная)
       For j = 0 To ComboBox5.ListCount - 1 ' Для всех записей в ComboBox5
           ' Если такая дата в ComboBox5 уже есть
           If CStr(Sheets("Период проката").Cells(y, 2)) = ComboBox5.Column(0, j) Then
              a = 1
              Exit For ' Дальше проверять смысла нет - выход из цикла
           End If
       Next j
       ' Если такой даты в ComboBox5 нет (a = 0)
       ' Добавляем её в ComboBox5
       If a = 0 Then ComboBox5.AddItem CStr(Sheets("Период проката").Cells(y, 2))
    End If
Next y
Только это очень уж замороченный механизм заполнения ComboBox-а. Можно намного проще организовать.

Предлагаю свой вариант:

Visual Basic
1
2
3
For y = 5 To r + 6
    ComboBox5.AddItem CStr(Sheets("Период проката").Cells(y, 2)) ' Добавить новую запись
Next y
Всё!
1
0 / 0 / 0
Регистрация: 28.09.2009
Сообщений: 88
11.12.2009, 16:10
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub test()
    For y = 5 To r + 6    ' перебираем в цикле ячейки листа
        n = ComboBox5.ListCount    ' количество заполненных строк в комбобоксе
        If n = 0 Then    ' если кол-во строк = 0 ( комбобокс пустой), то
            ' то добавляем в его первый столбец значение ячейки Cells(y, 2) с листа "Период проката"
            ComboBox5.AddItem CStr(Sheets("Период проката").Cells(y, 2)), 0
        Else    ' иначе
            a = 0
            For j = 0 To ComboBox5.ListCount - 1    ' перебираем все записи в 1-м столбце комбобокса
                ' если значение ячейки Cells(y, 2) с листа "Период проката"
                ' уже присутствует в комбобоксе
                If CStr(Sheets("Период проката").Cells(y, 2)) = ComboBox5.Column(0, j) Then
                    a = 1
                    Exit For    ' то выходим из цикла
                End If
            Next j
            ' если a=0 - значит, значение в комбобоксе не найдено, поэтому добавляем его:
            If a = 0 Then ComboBox5.AddItem CStr(Sheets("Период проката").Cells(y, 2))
        End If
    Next y
End Sub
и логика тоже сложна
Не столько логика сложна, сколько решение неоптимальное.
При желании можно было бы ограничиться 2 строками кода.

Добавлено через 1 минуту
А зачем вообще было задавать этот вопрос?

Здесь же есть этот код с комментариями:
https://www.cyberforum.ru/post409002.html
0
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26
11.12.2009, 17:28  [ТС]
Спасибо вам ,EducatedFool и Yaser!!! Теперь мне стало все намного понятнее!!! Yaser, я попробовала предложенный вами алгоритм заполнения ComboBoxa, оказывается все осуществляется намного проще, со мной вместе вся семья радуется, что все получилось.Только можно все-таки узнать поточнее, что значит в первом и втором случае а=0 и а=1. Спасибо огромное. Приезжайте к нам на пироги, мама спечет
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
11.12.2009, 18:11
Цитата Сообщение от ula Посмотреть сообщение
Приезжайте к нам на пироги, мама спечет
Благодарю, пришлите на e-mail.
0
0 / 0 / 0
Регистрация: 27.02.2019
Сообщений: 25
07.03.2019, 19:41
Столкнулся с похожей проблемой, перебрал все варианты предложенные выше, ничего так и не добился. Единственный проблеск был с selected но он также записывал только выбранную строчку.
В общем задача: есть UserForm в ней два лист бокса и кнопки добавить, добавить все и т.д. Требуется в первый лист бокс загрузить все элементы, которые находятся на листе в диапазоне, далее выбирая элемент из первого листбокса перенести его во второй на той же UserForm, и по нажатии кнопки OK записать выбранные элементы на лист в указанный диапазон, причем чтоб после окончания записи выбранных элементов стирались ячейки ниже если они заполнены чем то.
Дошел до команда на кнопке "OK" и дальше не могу ничего придумать...
Помогите кому не сложно, буду очень признателен....
Работа с листбоксами довольно скудно описана в учебниках, пользуюсь "А. Гарнаев, Л. Рудикова MS Excel 2010 Разработка приложений" и " Джон Уокенбах Профессиональное программирование на VBA в Excel 2003"
Вложения
Тип файла: rar ЮНГ.rar (48.0 Кб, 8 просмотров)
0
0 / 0 / 0
Регистрация: 27.02.2019
Сообщений: 25
09.03.2019, 23:28
Нашел решение, может кому пригодится.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub OKButton_Click()
' кнопка продолжения загрузки
    Dim i, j As Integer
    
     For j = 0 To 33
        Worksheets("Исходные_Данные").Cells(j + 3, 22).ClearContents
        For i = 0 To ListBox2.ListCount - 1
            If Len(ListBox2.List(i)) Then
                Worksheets("Исходные_Данные").Cells(i + 3, 22).Value = ListBox2.List(i)
            End If
        Next i
     Next j
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.03.2019, 23:28
Помогаю со студенческими работами здесь

Добавление в listbox с другой формы
Привет форумчане;) Возник такой вопрос: как можно с формы2 добавить запись в listBox которая находится на Форме1 То есть вот у меня есть...

Добавление из одного ListBox'a в другой
подскажите как добавить несколько Item'ов из одного листбокса в другой листбокс? Пробовал так, но таким образом можно только одну...

Добавление из одного listBox'a в другой
подскажите как несколько выделенных Item'ов из листбокса(listBox1.SelectedItems) добавить в другой листбокс?

Добавление элемента в ListBox
Из БД заполняю ListBox, затем выбранный элемент надо добавить в другую таблицу БД. Не могу понять как это реализовать. Пытался так: ...

Экономное копирование из одного листа в другой (добавление готовых накладных на лист для печати в excel)
Здравствуйте, подскажите, пожалуйста макрос который будет компактно копировать подготовленные накладные, на лист, с которого в дальнейшем...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru