download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Ексел (листбокс)

Автор
Съобщение
power_m
Нед, 09.05.10, 14:56
Здравейте !
Имам проблем ,който опитах да оправя ,но не успях , за това се обръщам към вас , за да ми помогнете да го разреша.
Казуса е следният : В листбокса маркирам определени записи и чрез бутона "Запиши избраното" те се отпечатват във текстбока, до тук няма проблем.
Проблема е в това ,когато маркирам записи от долу-нагоре те се отпечатват така , както са подредени в листбокса . Вслучая съм маркирал първо числото 9,след туй числото 6 и най накрая числото 3 когато натиснах бутона Запиши те се отпечатаха в текстбокса в следния ред 3-6-9 а бих искал да се подредят така 9-6-3.
Как да направя така ,че записите да се подреждат по реда на маркиране с мишката?
За целта предлагам снимка

Ето и кода :
Private Sub CommandButton2_Click()
 Dim strTemp As String
    Dim lngIndex As Long
    
    For lngIndex = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(lngIndex) Then
            strTemp = strTemp & ListBox1.List(lngIndex) & "-"
        End If
    Next
    If Len(strTemp) > 0 Then
    If UserForm1.Flag = 1 Then UserForm1.TextBox94.Text = Left(strTemp, Len(strTemp) - 1)
    If UserForm1.Flag = 2 Then UserForm1.TextBox121.Text = Left(strTemp, Len(strTemp) - 1)
    If UserForm1.Flag = 3 Then UserForm1.TextBox126.Text = Left(strTemp, Len(strTemp) - 1)
    If UserForm1.Flag = 4 Then UserForm1.TextBox131.Text = Left(strTemp, Len(strTemp) - 1)
    If UserForm1.Flag = 5 Then UserForm1.TextBox136.Text = Left(strTemp, Len(strTemp) - 1)
    If UserForm1.Flag = 6 Then UserForm1.TextBox166.Text = Left(strTemp, Len(strTemp) - 1)
    If UserForm1.Flag = 7 Then UserForm1.TextBox171.Text = Left(strTemp, Len(strTemp) - 1)
    If UserForm1.Flag = 8 Then UserForm1.TextBox176.Text = Left(strTemp, Len(strTemp) - 1)
    If UserForm1.Flag = 9 Then UserForm1.TextBox181.Text = Left(strTemp, Len(strTemp) - 1)
    If UserForm1.Flag = 10 Then UserForm1.TextBox186.Text = Left(strTemp, Len(strTemp) - 1)

End If
End Sub
Благодаря ви предварително!

phrozencrew
Нед, 09.05.10, 20:21
В случая се получава така (от горе надолу), заради този For:
For lngIndex = 0 To ListBox1.ListCount - 1
Броенето започва от 0 до ..., т.е. от първия чекбокс.
Трябва въобще да се промени концепцията, за да може да се брои отделно всяко кликане. Мисля си дали с case за всеки чекбокс няма да е по-добре, като се добавят в while до натискане на бутон. Според мен ще се получи с case само че ако имаш динамично генериране на чекбоксите.... Може би ако сложиш 30-40 case-та, т.е. повече от колкото са ти небходими, ще решиш евентуален проблем с променливия брой чекбокси. И задължително това да е в рекурсия. Това е един много удобен повод за иползване на Goto.
Разбира се само си мисля на глас.

А дали няма да е по-добре да се вкара проверка на бокса за кликане с мишка. Като при кликането се проверява дали бутона е чекнат или не, защото трябва да можеш да кликаш по няколко пъти в един чекбокс.
Уффф, ама е сложна задачката.

редактиран от phrozencrew на 09.05.10 20:49
phrozencrew
Пон, 10.05.10, 10:57
dreven, отново много се изкефих на твой код:
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If ListBox1.Selected(ListBox1.ListIndex) = True Then
'Добавяме
strTemp = strTemp & "-" & ListBox1.ListIndex + 1
Else
'Изтриваме
strTemp = Replace(strTemp, ListBox1.ListIndex + 1, "")
strTemp = Replace(strTemp, "--", "-")
End If
End Sub

Много елегантно решение с кликане на мишката! Мерси, че ми позволяваш да се уча от теб! Дано не се сърдиш, че ти поставих кода директно тук.

power_m
Сря, 12.05.10, 22:13

RE: Ексел (листбокс)

Здравейте !!
Искам само да попитам , защо след като маркирам записите в листбокса ,в текстбокса се отпечатват цифри .Как да направя така,че да се отпечата маркираните записи?
Благодаря!
power_m
Чет, 13.05.10, 20:20

RE: Ексел (листбокс)

” По принцип, ако замениш Listbox1.ListIndex със Listbox1.Text се получава, но в конкретния случай Listbox е MultiSelect и за това това ще стане така:
Primer.xls

Благодаря ти Dreven !
Аз със първата част от кода нямам проблем !
И аз с твоя помощ го направих и там нямам проблем ,но....
ето този код ме мъчи
Private Sub UserForm_Initialize()
Dim vntTemp As Variant
vntTemp = Sheets("Лист1").Range("A1:A50")
ListBox1.List = vntTemp
End Sub

От Лист1 от клетка А1:А50 Листбокса си взима данни !

power_m
Чет, 13.05.10, 22:01

RE: RE: RE: Ексел (листбокс)

” Range е цял обект, за това го раздробяваш на обектчета и си ги ползваш както искаш.
Замени горния сорс с този:
Private Sub UserForm_Initialize()
For j = 1 To 50
Kletka = "A" & j
ListBox1.AddItem Sheets("Лист1").Range(Kletka)
Masiv(j) = Sheets("Лист1").Range(Kletka)
Next j
End Sub

Колко много има да уча !!!
Ще е много полезно за нас човек ,който много знае ,а това безпорно си ти ,да сподели опита и знанията си -практически!
За пореден път благодаря !

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.