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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2011, 00:31   #1
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию добавление строки в Listbox массивом

Доброго времени суток уважаемые форумчане, есть несколько вопросов
хочу сделать макрос в userform,который добавлял бы из userform текущие значения в listbox .столкнулся с тем что больше 10 столбцов вручную не получится ввести.поэтому пытаюсь передать с помощью массива.
1)можно ли добавить массив в новую строчку listbox не заменяя листбокс, а то я знаю только такой способ
Код:
    ListBox4.List = array1
2)попробовал создать динамический массив и потом переопределять его ,но вылезает ошибка при повторном переопределении массива subscript out of range
в заголовке userform задаю
Код:
Dim array1() As String
а дальше в коде userform
Код:
Private Sub CommandButton2_Click()

ReDim Preserve array1(nomer_po_spisku, 13) As String

    array1(nomer_po_spisku, 0) = (nomer_po_spisku + 1)
    array1(nomer_po_spisku, 1) = TextBox1.Text
    array1(nomer_po_spisku, 2) = TextBox14.Text
    array1(nomer_po_spisku, 3) = TextBox12.Text
    If Val(TextBox10.Text) = 0 Then
        array1(nomer_po_spisku, 4) = TextBox9.Text
        array1(nomer_po_spisku, 5) = "-"
        array1(nomer_po_spisku, 6) = "-"
        Else
            array1(nomer_po_spisku, 4) = "-"
            array1(nomer_po_spisku, 5) = TextBox9.Text
            array1(nomer_po_spisku, 6) = TextBox10.Text
    End If
    array1(nomer_po_spisku, 7) = TextBox19.Text
    array1(nomer_po_spisku, 8) = R
    array1(nomer_po_spisku, 9) = pot_po_dline
    array1(nomer_po_spisku, 10) = P_din
    array1(nomer_po_spisku, 11) = TextBox11.Text
    array1(nomer_po_spisku, 12) = pot_na_mestn
    array1(nomer_po_spisku, 13) = pot_na_mestn + pot_po_dline
    nomer_po_spisku = nomer_po_spisku + 1
    
    ListBox4.List = array1
end sub
что я делаю не так?
Composter вне форума Ответить с цитированием
Старый 04.05.2011, 00:45   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Код:
Private Sub CommandButton2_Click()
With ListBox1
.ColumnCount = 13
.AddItem
.List(.ListCount - 1, 1) = "1"
.List(.ListCount - 1, 2) = "2"
.List(.ListCount - 1, 3) = "3"
'..........................................
.List(.ListCount - 1, 9) = "9"
End With
End Sub
___________________________________ _____________-
у вас надо изменить

Код:
 ReDim Preserve array1(13, nomer_po_spisku) As String
и так весь массив изменить, т.е поменять местами, менять можно только последнюю размерность массива
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 04.05.2011 в 01:35.
R Dmitry вне форума Ответить с цитированием
Старый 04.05.2011, 01:43   #3
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

да и...nomer_po_spisku глобальная переменная??
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 04.05.2011, 09:42   #4
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

в шапке формы стоит
Цитата:
Dim nomer_po_spisku As Integer
а вашем предложенном варианте не получается больше 10 столбцов
а если массив сделать array1(13,nomer_po_spisku) и потом переопределять,то все работает только запись идет в столбцы, а мне нужно что бы в строку

Последний раз редактировалось Composter; 04.05.2011 в 10:06.
Composter вне форума Ответить с цитированием
Старый 04.05.2011, 10:28   #5
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

нашел выход из ситуации
в заголовке формы
Код:
Dim array1(100, 13) As String
в инициализации
Код:
Private Sub UserForm_Initialize()
nomer_po_spisku = 0
end sub
Код:
Private Sub CommandButton2_Click()
If nomer_po_spisku > UBound(array1, 1) Then
    MsgBox ("больше нельзя добавить строк")
    Exit Sub
End If
    array1(nomer_po_spisku, 0) = (nomer_po_spisku + 1)
    array1(nomer_po_spisku, 1) = TextBox1.Text
    array1(nomer_po_spisku, 2) = TextBox14.Text
    array1(nomer_po_spisku, 3) = TextBox12.Text
    If Val(TextBox10.Text) = 0 Then
        array1(nomer_po_spisku, 4) = TextBox9.Text
        array1(nomer_po_spisku, 5) = "-"
        array1(nomer_po_spisku, 6) = "-"
        Else
            array1(nomer_po_spisku, 4) = "-"
            array1(nomer_po_spisku, 5) = TextBox9.Text
            array1(nomer_po_spisku, 6) = TextBox10.Text
    End If
    array1(nomer_po_spisku, 7) = TextBox19.Text
    array1(nomer_po_spisku, 8) = R
    array1(nomer_po_spisku, 9) = pot_po_dline
    array1(nomer_po_spisku, 10) = P_din
    array1(nomer_po_spisku, 11) = TextBox11.Text
    array1(nomer_po_spisku, 12) = pot_na_mestn
    array1(nomer_po_spisku, 13) = pot_na_mestn + pot_po_dline

    ListBox4.List = array1
    
    nomer_po_spisku = nomer_po_spisku + 1
End Sub
а не заполненые члены массива не добавляются в listbox
Composter вне форума Ответить с цитированием
Старый 04.05.2011, 10:31   #6
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Composter Посмотреть сообщение
в шапке формы стоит

а вашем предложенном варианте не получается больше 10 столбцов
а если массив сделать array1(13,nomer_po_spisku) и потом переопределять,то все работает только запись идет в столбцы, а мне нужно что бы в строку
Код:
ListBox4.List = application.transpose(array1)
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 04.05.2011, 11:51   #7
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

спасибо,большое.заработало!!!
Composter вне форума Ответить с цитированием
Старый 04.05.2011, 12:12   #8
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

а подскажите почему при
Код:
ListBox4.List = Application.Transpose(array1)
размерность массивов получается одинаковая
,а при
Код:
 array1 = Application.Transpose(ListBox4.List)
размерность массива array1 получается на 1 больше чем размерность массива ListBox4.List ?

Последний раз редактировалось Composter; 04.05.2011 в 12:14.
Composter вне форума Ответить с цитированием
Старый 04.05.2011, 14:42   #9
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

разообрался,если задать массив
Код:
Dim array1(1 To 15, 1 To nomer_po_spisku) As Variant
транспонирование в listbox и обратно происходит корректно
Composter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi 7] Добавление в ListBox выделенного текста Oldcentre Помощь студентам 2 17.11.2010 22:40
Добавление скрытого значения в элемент listbox 4e6ypek Помощь студентам 1 30.06.2010 10:02
Добавление пунктов в ListBox AdvanceQ Общие вопросы Delphi 3 08.01.2010 21:06
Listbox добавление путей из проводника! Anfall Общие вопросы Delphi 7 22.12.2009 21:20
Построчное добавление в ListBox nikolai_P Microsoft Office Excel 0 18.08.2009 12:16