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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2010, 11:18   #1
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию макрос на разных машинах

Здравствуйте.

Почему один и тот же макрос на разных компьютерах может давать разные результаты по одинаковым исходным данным?
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!
gsg вне форума Ответить с цитированием
Старый 29.07.2010, 11:55   #2
аналитика
Форумчанин
 
Регистрация: 14.05.2009
Сообщений: 311
По умолчанию

опиши вкратце, что макрос делает, откуда данные берет, что на выходе?
аналитика вне форума Ответить с цитированием
Старый 29.07.2010, 12:24   #3
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию

макрос берет данные из одного файла ексель и формирует из них другой файл. формально макрос занимается копированием данных и элементарными вычислениями типа "сумма"
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!
gsg вне форума Ответить с цитированием
Старый 29.07.2010, 12:26   #4
аналитика
Форумчанин
 
Регистрация: 14.05.2009
Сообщений: 311
По умолчанию

в чем различие результатов?
аналитика вне форума Ответить с цитированием
Старый 29.07.2010, 12:28   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Как в макросе указывается путь (пути) к файлу (файлам) с данными? Макрос сам формирует имя (имена) файлов?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 29.07.2010, 12:44   #6
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию

файл с данными пользователь открывает в диалоге.

макрос не задает имена созданным файлам (если я правильно понял вопрос), они идут по умолчанию - Книга1, Книга2....

проблема в том, что на других компьютерах неправильно считается сумма элементов массива (в массиве считанные исходные данные)
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!
gsg вне форума Ответить с цитированием
Старый 29.07.2010, 13:30   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Десятичные разделители одинаковые на машинах?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.07.2010, 16:59   #8
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию

кстати, да. разделители разные. но, как это может влиять?
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!
gsg вне форума Ответить с цитированием
Старый 29.07.2010, 17:02   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Если разделитель чужой, машина эту цифру понимает неправильно. Как понимает - то ли как текст, то ли без разделителя - сейчас не скажу, смотреть надо.
Исправить - в коде определяем разделитель машины, заменяем в данных разделители (вероятно там всегда одно и тоже, скорее всего точка) на текущие.
Примерно так (кусок из кода, цикл не закончен):
Код:
'### определяем системный разделитель дробной части
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")   
strKeyPath = "Control Panel\International"
strValueName = "sDecimal"
oReg.GetExpandedStringValue &H80000001, strKeyPath, strValueName, strValue

Do Until objTextFile.AtEndOfStream 'пока не кончился файл
  strNextLine = objTextFile.Readline 'читаем посторочно
  strNextLine = Replace(strNextLine, ".", strValue)  'меняем "." на системный разделитель дробной части
P.S. Вот как раз на соседнем форуме встретил:
Цитата:
The_Prist
> чтобы узнать какой знак является разделителем целой и дробной части
На мой взгляд, лучше всего использовать что-то типа:
mid$(1/2,2,1)
Так можно точно узнать кто разделитель. А вот лазание в Реестр, не всегда работает. Точнее не везде. Если нет должных прав на компьютере(не обязательно админских) - то попытка получить данные Реестра вызовет ошибку.
Все сугубо лично.
И в самом деле так проще и быстрее.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 29.07.2010 в 18:22.
Hugo121 вне форума Ответить с цитированием
Старый 30.07.2010, 09:05   #10
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию

Спасибо, действительно, проблема оказалась в разделителях. нашел, даже где конкретно:

при разделителе "." выражение
Sum = var(arr(4)), где arr(4)=10,52 равняется "10,52",
а при разделителе "," = "10", т.е. происходит округление, отсюда вопрос - почему?
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!
gsg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Транспонирование множества данных из разных книгах или из разных листов на 1 лист посредством макроса Тантана Microsoft Office Excel 6 18.12.2014 13:04
Помогите плиз правильно написать макрос обновления данных из разных файлов Legame Microsoft Office Excel 10 10.09.2009 10:39
exe-файл не работает на других машинах D-mann Помощь студентам 8 04.09.2009 11:17
несколько разных строк из разных файлов сформировать в один Иван123456 Microsoft Office Excel 3 30.07.2009 17:05
WMI + Получать pID запускаемых процессов на удаленных машинах Seqular Общие вопросы .NET 0 23.05.2009 14:03