Страницы: 1
RSS
Загрузка данных с листа в Listbox.
 
Мяв.
Имеем Listbox, в который циклом пишем данные с листа.
Код
     ListBox21.List(ListBox21.ListCount - 1, 0) = .Cells(i, 3) 'Наименование материала
     ListBox21.List(ListBox21.ListCount - 1, 1) = .Cells(i, 4) 'ед. изм.
     ListBox21.List(ListBox21.ListCount - 1, 2) = .Cells(i, 7) ' Цена

До обеда числовые данные грузились как Double, в листе отображались с запятой.
Сейчас включил комп, а они в листе с точкой, и типом String.
И это не один Listbox, а все.
При этом, при загрузке через RowSourse, типы распределяются правильно.

В чем причина такого поведения? Как с этим бороться? (Имею в виду не преобразование типа при вычислениях, а при записи)
 
RAN, Это не оно?
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
off
Цитата
RAN написал:
До обеда числовые данные грузились как Double
Андрей, ну так все ж понятно, кто-то вторую часть Double за обедом того :-)
По вопросам из тем форума, личку не читаю.
 
Не знаю...
Обновления все отключены, работает система очень давно.
Не уверен на 100%, но, кажется, в textbox из ячейки всегда с точкой прыгало.
 

Я не знаю, как это выглядит на матрице кода вашей системы (системная кодовая страница), но у меня есть так, что это зависит от того:

1. как данные были введены на листе => точка, запятая-клавиатура, запятая-числовой блок ('NumLock')
2. как я загружаю данные в "ListBox"
3. как их передаю / отображаю.

Небольшие тесты в файле.

 
ocet p, Показательный пример. Так бы все отвечали.  :)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
По результатам теста файла ocet p
Листбокс заполняется так
           'Variant I
           '------------------------------------------------
'      : arr(0,0) : "A" : Variant/String
'      : arr(0,1) : "2.1" : Variant/String
'      : arr(0,2) : "3,1" : Variant/String
'      : arr(0,3) : "4,1" : Variant/String

           'Variant II
           'Variant III
           '------------------------------------------------
'      : arr(0,2) : 3,1 : Variant/Double
'      : arr(0,3) : 4,1 : Variant/Double
При этом числа отображаются с запятой.
Вероятно, мой листбокс заполнялся так же, просто я до использования его в расчетах еще не добрался, и типы данных не смотрел.

Но это не самое главное. После теста открываю свой файл, а там...
Вчера вечером код
Код
Private Sub CommandButton2_Click()
TextBox3 = Worksheets(3).Cells(4, 5)
TextBox4 = 2.5
End Sub

выводил в текстбоксы значения с точками, а сегодня с запятыми. В листбоксах аналогично. И все мои расчеты с использованием VAL() не работают.
Это что получается, нужно писать свою SUPERVal(), которая проверяет, какой разделитель отображается в данный момент?  :cry:  :qstn:
 
Вы пытались использовать в своем коде: Application.International(xlDecimalSeparator) ?
Может быть, этот синтаксис будет вам полезен в вашем проекте ?
 
Цитата
RAN: нужно писать свою SUPERVal(), которая проверяет, какой разделитель отображается в данный момент?
используйте фундаментальный подход от Сокола  :idea:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Мне как-то мой фундаментальный подход ближе. Функция SuperVal:
Код
Function SuperVal(s)
    SuperVal = Val(Replace(s, ",", "."))
End Function
Страницы: 1
Наверх