Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2010, 16:13   #1
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию 2 Listbox

На форме есть 2 listbox (listbox1 и listbox2 ) и у каждого свой rowsource (list1 и list2). Как можно делать так что при двойном нажатие на первом listbox-е некоторые данные (например столбец A, B, C) из активных записей из этого листа (list1) добавился 2-й лист?
Aqil_f вне форума Ответить с цитированием
Старый 03.05.2010, 16:47   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Никак.

Есть 3 способа заполнения листбокса: через свойство RowSource, через добавление пунктов посредством .AddItem, либо запись в ListBox массива посредством .List = arr

"Подружить" эти способы не получится - надо выбирать один из них.
EducatedFool вне форума Ответить с цитированием
Старый 04.05.2010, 07:04   #3
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

Мне надо из 1-го листа некоторые данные из выбронного записа добавить 2-й лист. Необязательно черех listbox, как-то по другому можно это делать?
Aqil_f вне форума Ответить с цитированием
Старый 04.05.2010, 13:37   #4
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

Можно вот так:

Код:
    If ActiveSheet.Name <> "LIST1" Then Exit Sub
        r_ = Selection.Row
        r1_ = Sheets("List2").Cells(Cells.Rows.Count, 1).End(xlUp).Row + 1
        Rows(r_).Copy Sheets("List2").Rows(r1_)
Но, здесь копируется все строка, а надо некоторые данные, например столбца A, B, C. Как можно это делать?
Aqil_f вне форума Ответить с цитированием
Старый 04.05.2010, 18:02   #5
aval
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 68
По умолчанию

Здравствуйте! Попробуйте воспользоваться примером от Джона Уокенбаха (глава 14)
Сам пример я прикрепил здесь
http://rapidshare.com/files/38343965...nsfer.rar.html
С уважением, Александр
aval вне форума Ответить с цитированием
Старый 05.05.2010, 07:16   #6
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

Спасибо, Александр. Но, в примере из одного listbox-a в другой копируется. А мне надо из одного листа в другой. И это я уже сделал. Могу копировать выбранного строку из одного листа в другой. Но, у меня копируется все строка, а надо копировать несколько столбец из выбранного строка. Вот это я не могу делать.
Aqil_f вне форума Ответить с цитированием
Старый 05.05.2010, 08:58   #7
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от Aqil_f Посмотреть сообщение
Код:
    If ActiveSheet.Name <> "LIST1" Then Exit Sub
        r_ = Selection.Row
        r1_ = Sheets("List2").Cells(Cells.Rows.Count, 1).End(xlUp).Row + 1
        Rows(r_).Copy Sheets("List2").Rows(r1_)
Но, здесь копируется все строка, а надо некоторые данные, например столбца A, B, C.
Пробуем так:

Код:
Dim r_ As Long, r1_ As Long
Dim rng As Range

r_ = Selection.Row
r1_ = Sheets("List2").Cells(Rows.Count, 1).End(xlUp).Row + 1

Set rng = Range(Cells(r_, 1), Cells(r_, 3))
rng.Copy Destination:=Sheets("List2").Cells(r1_, 1)
nilem вне форума Ответить с цитированием
Старый 05.05.2010, 09:47   #8
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

Nilem, спасибо, то что надо.
Но, если можно еще 1 вопрос:
Как можно проверить (по столбец А) если такой запись есть во втором листе 2-й раз не копировать этот запись?
Aqil_f вне форума Ответить с цитированием
Старый 05.05.2010, 12:42   #9
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Код:
Sub Aqil_f()
Dim r_ As Long, r1_ As Long
Dim rng1 As Range, rng2 As Range, RNG3 As Range

r_ = Selection.Row
r1_ = Sheets("List2").Cells(Rows.Count, 1).End(xlUp).Row + 1

Set rng1 = Range(Cells(r_, 1), Cells(r_, 3))
Set rng2 = Range(Cells(r_, 2), Cells(r_, 3))

Sheets("List2").Activate
Set RNG3 = Sheets("List2").Range(Cells(1, 1), Cells(r1_, 1)). _
                Find(Sheets("List1").Cells(r_, 1).Value, , xlValues, xlWhole)
                
If RNG3 Is Nothing Then 'если не найдено совпадающих значений
    rng1.Copy Destination:=Sheets("List2").Cells(r1_, 1)
Else
    rng2.Copy Destination:=Sheets("List2").Cells(r1_, 2)
End If

End Sub
Как-то так.
nilem вне форума Ответить с цитированием
Старый 05.05.2010, 16:02   #10
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

Nilem, спасибо!
Aqil_f вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как добавить в listbox файлы(пишу с помощью bassplayer)(Listbox+opendialog=play) blackstersl Общие вопросы Delphi 11 09.06.2010 13:23
ListBox Dimarik Общие вопросы .NET 10 28.04.2010 17:23
Listbox SnowSin Помощь студентам 6 10.12.2009 08:19
ListBox Istergu1 Помощь студентам 6 09.12.2008 20:20