Страницы: 1
RSS
Указать список значений для ComboBox, Как переделать 1|2|3|4|5 в Array("1", "2", "3", "4", "5", "6")
 
Добрый вечер.

Имею  в наличии список значений в формате 1|2|3|4|5
Создал ComboBox Насколько я знаю в него значения заносятся следующим образом
Код
ComboBox4.List = Array("1", "2", "3", "4", "5", "6")
Попытался занести имеющиеся у меня списки таким образом:
Код
ComboBox4.List = Array("")
zn = Replace(zn, "|", """, """) 
zn = """" & zn & """"
ComboBox4.List = Array(zn)
ComboBox4.ListIndex = 0
Список не получился. Что делаю не так?
 
Код
Private Sub UserForm_Initialize()
Dim v As Variant

     For Each v In Array("1", "2", "3", "4", "5", "6")
        Me.ComboBox1.AddItem v
     Next v
End Sub

Код
Private Sub UserForm_Initialize()
    Dim arr As Variant, v As Variant, str As String

    str = "1|2|3|4|5"
    arr = Split(str, "|")
    For Each v In arr
        Me.ComboBox1.AddItem v
    Next v
End Sub

Код
Private Sub UserForm_Initialize()
    Dim v As Variant, str As String

    str = "1|2|3|4|5"
    For Each v In Split(str, "|")
        Me.ComboBox1.AddItem v
    Next v
End Sub

Код
Private Sub UserForm_Initialize()
    Dim v As Variant

    For Each v In Split("1|2|3|4|5", "|")
        Me.ComboBox1.AddItem v
    Next v
End Sub
Изменено: New - 28.07.2021 19:38:51
 
Цитата
Юрий написал: Что делаю не так?
Одномерный массив горизонтальный, список в ComboBox вертикальный
 
Цитата
Юрий написал:
Как переделать 1|2|3|4|5 в Array("1", "2", "3", "4", "5", "6")
Можно тоже таким образом:
Код
Option Explicit

Sub UserForm_Initialize()
    Dim strval As Variant
    
    strval = "1|2|3|4|5|6"
    
    strval = "{" & Replace(strval, "|", ",", 1, -1, 1) & "}"
    strval = Evaluate(strval)
    
    Me.ComboBox4.List() = strval
End Sub
 
Что я не понимаю?
Код
Me.ComboBox1.List = Split("1|2|3|4|5", "|")
 
Цитата
vikttur: Одномерный массив горизонтальный, список в ComboBox вертикальный
одномерный массив (в строку) запросто передаётся в ComboBox  :)
Цитата
RAN: Что я не понимаю?
то же самое хотел написать  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Чего-то я напутал )
 
vikttur, наверное с тем, что одномерный массив можно выгрузить только в строку на лист, а для того, чтобы выгрузить его в столбец нужно пересобирать массив в двухмерный  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
ocet p написал:
Можно тоже таким образом:
Как раз про с Evaluate возился. Спасибо большое. Пришел к выводу, что проблема была в том, что я запятую вместо ";" использовал. Но не успел попробовать. Вижу кроме этого нужно дополнительно кое что добавить... Подскажите, пожалуйста, для чего нужны  "1, -1, 1" и фигурные скобки?
 
Всем спасибо за помощь!

Самое лучшее и простое понимание решение от New
Цитата
New написал:
  For Each v In Split(str, "|")
Также очень хотелось бы разобраться с Evaluate Очень интересное решение. В том же autoit есть подобная функция которая позволяет проделывать подобное, а не использовать более сложные методы. Называется Eval. С помощью неё можно проделывать что-то такое:
Код
znach1=15
$num_state =1
msgbox Eval ("znach"& $num_state) 'Выдаст сообщение "15"
Вот только я не могу понять как такое же сделать с VBA и с Evaluate. Можете подсказать?


Также я пробовал использовать
Код
Dim zn$, iArr&(0 To 9), i&, x

For Each x In Split(zn, "|")
    iArr(i) = x
    i = i + 1
Next
Но, что-то у меня плохо начало получаться, как только я перестал экспериментировать с 1|2|3|4|5. Как только стал использовать словами и предложения, подтягиваться начало только первое значение. Далее пришлось бы возиться с изменением размера массива. А как это делать, я пока не придумал. Поэтому я и подумал, что наверняка есть что-то типа "Evaluate ", которое позволит "ожить" простую конструкцию указанную в примере.

Добавил Ваши варианты в файл. С Evaluate  вариант не "завелся". Почему, я не понимаю.  Вариант от New простой и отличный. Работает как часы. Ещё раз за него огромное спасибо!
Изменено: Юрий - 29.07.2021 12:56:27
 
Цитата
Юрий: Самое лучшее и простое понимание решение от New
а что, простите, непонятного в варианте от RAN???
Me.ComboBox1.List = Split("1|2|3|4|5", "|") — дословно "список ComboBox1 это значения строки «1|2|3|4|5», разделённой по «|»"
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал: а что, простите, непонятного в варианте от  RAN ???
Отличный вариант. Даже лучше. Просто я подумал, что он вопрос задает, а не ответ дает. Поэтому не протестировал....
RAN, спасибо Вам огромное за отличный вариант!
Изменено: vikttur - 29.07.2021 13:56:13
Страницы: 1
Наверх