powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
16 сообщений из 16, страница 1 из 1
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34550962
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня офис 2002. нижеследующий код нормально отрабатывает, заполняя оба диапазона числами.
Клиент с офисом 2003 (без sp, русский) сообщил, что у него второй цикл всегда дает строковое, а не числовое заполнение ячеек.

Прошу помощи в понимании следующих вопросов:
- это баг непатченной версии или поведение Excel 2003 by design
- как отработает этот код в других версиях – 97-2007

(про версию 2002 достоверно известно, что «правильно» заполняются оба диапазона)

Прошу желающих оказать помощь запустить этот код и сообщить о том, как произошло заполнение диапазонов – оба диапазона содержат числа или один из них оказывается заполненным строками. Прошу указать версию Excel и номер сервис-пака.
App.UseSystemSeparators и App.DecimalSeparator
буду благодарен за уточнение.


я уже не помню/не знаю - были ли в 97м и 2000м
Спасибо всем откликнувшимся

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Sub testFillCellsFromArray()
    Dim oldSep, oldUseSystem
    Dim App As Excel.Application, ws As Worksheet
    
    Set App = Application
    Set ws = ActiveSheet
    
    oldUseSystem = App.UseSystemSeparators
    oldSep = App.DecimalSeparator
    
    App.UseSystemSeparators = False
    App.DecimalSeparator = "."
    
    Dim i&, j&
    ReDim filArray( 0  To  4 ,  0  To  4 )
    For i =  0  To  4 
        For j =  0  To  4 
            filArray(i, j) = "12345.6789"
        Next
    Next
    
    ws.Range(ws.Cells( 2 ,  2 ), ws.Cells( 6 ,  6 )).Value = filArray
       
    App.UseSystemSeparators = False
    App.DecimalSeparator = ","
    ReDim filArray( 0  To  4 ,  0  To  4 )
    
    For i =  0  To  4 
        For j =  0  To  4 
            filArray(i, j) = "12345,6789"
        Next
    Next
    
    ws.Range(ws.Cells( 8 ,  2 ), ws.Cells( 12 ,  6 )).Value = filArray
    
    App.DecimalSeparator = oldSep
    App.UseSystemSeparators = oldUseSystem
    
End Sub
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34550973
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хвост предыдущего сообщения должен выглядеть так:

я уже не помню/не знаю - были ли в 97м и 2000м Экселе
App.UseSystemSeparators и App.DecimalSeparator
буду благодарен за уточнение.

Спасибо всем откликнувшимся
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551052
GoCH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вы просили запустил Ваш код, во всех ячейках формат - General
Но когда я переправил формат одного ячейки на текст то при поворном запуске формат остался - текст.
У меня Wind XP sp 2, Office XP
OK?
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551088
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в данном случае формат ячеек подразумевается general или явно выставленный числовой.
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551128
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excel 2007 (Eng), Win 2003 Server (Eng), Regional Settings - Russian

Первый диапазон:
формат ячеек General
внутри строка вида 12345 разделитель 6789 (проверялось с различными разделителями - точка, запятая, буква z), т.е. число

Второй диапазон:
формат ячеек Number
внутри число 123456789
Т.е. десятичный разделитель вообще потерялся. Проверялось опять таки с разными десятичными разделителями.
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551130
GioCH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До запуска кода я в ячейках формат не выставлял. После копировяния проверил формат всех ячеик - format cells, при поверке формата ячейк у всех как по умалчанию должно быть - General.
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551141
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha я уже не помню/не знаю - были ли в 97м и 2000м Экселе
App.UseSystemSeparators и App.DecimalSeparator
буду благодарен за уточнение.праильно сомлевался
2000 не проглотил
Код: plaintext
1.
'    App.UseSystemSeparators = False
'    App.DecimalSeparator = ","
97-й ,очевидно, тем паче не зъист.
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551166
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excel 2003 (11.8134.8132) SP2
нижний диапазон строками заполнен
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551176
GioCH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл сообщить, что -
У меня после заполнения ячейк разделител - ","
Reg. setings - Russian
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551184
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 Victosha я уже не помню/не знаю - были ли в 97м и 2000м Экселе
App.UseSystemSeparators и App.DecimalSeparator
буду благодарен за уточнение.праильно сомлевался
2000 не проглотил
Код: plaintext
1.
'    App.UseSystemSeparators = False
'    App.DecimalSeparator = ","
97-й ,очевидно, тем паче не зъист.

там что там в 2000м - с таким кодом - чиселки или бузина с капустой?

2ЛП
спасибо. понял. значит 2007 живет здесь по правилам 2003го.

опечалися я вчерась от этого дела сильно.

вот еще приблуда:
0) выставляем разделитель в экселе в "," (запятая)
1) загоняем в клипборд текстовую последовательность "12345,678" & vbtab & "12345,678"
2) встаем в клетку экселя и жмем ctrl-ins
результат - в клетках чиселки (типа ура) и в 2002м и в 2003м

заменяем пункт 2) на код вида
wks.Paste StartCell

в 2002м - по людски чиселки, а в 2003м полное разочарование.

жить с этим можно, конечно. Но как-то безрадостно.
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551197
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbaproExcel 2003 (11.8134.8132) SP2
нижний диапазон строками заполнен

спасибо.
кажется с 2003м и 7м все уже ясно.
теперь бы понять, как подобное рулится или должно в младших версиях.
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551267
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извините - опечатка.
вместо
автори жмем ctrl-ins

должно быть:
и жмем shift-ins
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551274
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha там что там в 2000м - с таким кодом - чиселки или бузина с капустой?
как и ожидалось - ,т.к. разделитель в коде переключить не удаесца - нет таких пимпачкоф у аликуйшена в 2000, то в зависимости от текущих настроек.
при разделителе "тчк" - верхняя половина числеки, при "зпт" - нижняя.
Остальная часть - строчки.
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551307
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 Victosha там что там в 2000м - с таким кодом - чиселки или бузина с капустой?
как и ожидалось - ,т.к. разделитель в коде переключить не удаесца - нет таких пимпачкоф у аликуйшена в 2000, то в зависимости от текущих настроек.
при разделителе "тчк" - верхняя половина числеки, при "зпт" - нижняя.
Остальная часть - строчки.

премного спасибо. с этим понятно как жить.
осталось надеятся, что 97й ведет себя также.
вот если еще не затруднит проверить программную вставку из клипборда в 200м... было бы совсем замечтательно...
надеюсь, что там нет разносортицы вставки вручную и кодом.

--------
ЗЫ
конечно, каждая версия имеет право свою правду утверждать.
но правда свежих версий мне нравится меньше всего.

для меня это, пожалуй, ошеломительно разочаровывающее поведение в целом в 2203-2007м.
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551409
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victoshaосталось надеятся, что 97й ведет себя также.проверил 97. так же.

Victoshaошеломительно разочаровывающее поведение в целом в 2203-2007м.2203- это перебор.
но да, забавно.
Я так понимаю, что вопрос о вставке числе в перемешку со сторками, в случаях, когда тип возврата заранее не известен? А не проще ли пытаться вставить числа как числа? или там идет неявное преобразование в текст?
зы а .Formula вместо Value не спасает?
...
Рейтинг: 0 / 0
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
    #34551609
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot 4321
Я так понимаю, что вопрос о вставке числе в перемешку со сторками, в случаях, когда тип возврата заранее не известен? А не проще ли пытаться вставить числа как числа? или там идет неявное преобразование в текст?
зы а .Formula вместо Value не спасает?[/quot]

.Formula вместо Value не спасает - это утверждение, а не вопрос.
проверил вчера для .FormulaR1C1

контекст возникновения вопроса такой:
есть три разных типа входных потоков, "форматирующих результат"
один - "двоично-текстовый" с десятичным разделителем, соответствующий системному.
второй - похожий на первый "двоично-текстовый" с десятичным разделителем точка.
тип даных для полей в обоих потоках отсутствует. О том, число там или нет нужно судить по контексту.

третий - текстовый, с тегами типа данных
Разделитель для третьего потока может быть заказан в момент обращения к нему.

По смыслу потоки содержат текст, числа и даты.

сорт потока определяется нормально. Напимер, разделением вызывающих процедур.

Первоначальное предположение состояло в том, что худший случай обработки всех потоков однотипной процедурой заполнения массива для отрисовки, будет заключаться в манипулияциях текущими настройками приложения в момент отрисовки потока, так, чтобы не требовалось преобразования из строки к числовым типам данных.
Как показывает происходящее в данном топике обсуждение, к простому рабочему виду,
для всех трех потоков без перегрузки преобразования данных,
это приводится в версии 2002.
Изначально переносимость кода ожидалось обеспечить в перелах версий 2000-2003....

------------------
Как надежно жить с потоком первого типа, при том, что тип "текущего поля" из потока непосредственно не вычитывается, в версиях 2003 и дальше я пока не знаю.

В общем, тема почти закрыта.
Если бы еще вопрос о вставке из клипборда в версииях 2000 и 2007м
прояснить, было бы совсем здорово.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]