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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2009, 15:39   #1
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию Конфликт версий?

Писала в офисе 2002. Тестировала - все работает прекрасно. В офисе 2003 - не работает. Установила у себя 2003 - работает. У других пользователей в 2003 - периодически что-то отваливается. Как же дальше работать, когда я не могу отследить свои ошибки (не ошибки, а непонятки какие-то)?
Например, последняя "ошибка" - ругается и выделяет trim в строчке кода:
sNameProd = Range("J6").Value
sNameProdN = Trim(sNameProd)
У меня не ругается, все четко обрабатывает.
Подскажите, плиз, чего я не понимаю?
Bezdar вне форума Ответить с цитированием
Старый 10.03.2009, 15:52   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

У Вас в проекте VBA стоят ссылки на библиотеки из 2002-й версии.
Удалите эти ссылки (или выложите файл с проектом, мы сами удалим), и всё будет работать.

Отключаются ссылки через меню VBA Tools - References
EducatedFool вне форума Ответить с цитированием
Старый 10.03.2009, 16:13   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Обрезка внеших пробелов

Цитата:
Сообщение от Bezdar Посмотреть сообщение
Например, последняя "ошибка" - ругается и выделяет trim в строчке кода:
sNameProd = Range("J6").Value
sNameProdN = Trim(sNameProd)
Возможно, аргумент (в "J6") попался не строковый (а числовой, например).

Тогда бы (думаю) помогло
Код:
If TypeName(sNameProd) = "String" Then sNameProd = Trim(sNameProd)
Во всяком случае, мой Экссел (2003) на это не ругается.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 10.03.2009, 16:22   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Например, последняя "ошибка" - ругается и выделяет trim в строчке кода
Надо указывать номер или описание ошибки.

Например, такая ошибка



может появиться, если в ячейке J6 произошла ошибка вычисления формулы (к примеру, #ДЕЛ/0)

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Возможно, аргумент (в "J6") попался не строковый (а числовой, например).
Нет никакой разницы, число в ячейке, или строка (из-за этого ошибки быть не может)

При вызове sNameProdN = Trim(sNameProd) срабатывает автоматическое преобразование типов, а, как известно, тип Long (и другие числовые типы) всегда безошибочно преобразуется в String
EducatedFool вне форума Ответить с цитированием
Старый 10.03.2009, 17:33   #5
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию

Не знаю, как рисунок вставить.
Описание Ошибки и рисунок подключенных библиотек во вложении (какие от 2002 - визуально можно определить?).
Вложения
Тип файла: rar Ошибки.rar (272.4 Кб, 15 просмотров)
Bezdar вне форума Ответить с цитированием
Старый 10.03.2009, 20:45   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Ну, как я и ожидал... версия с "лишними" библиотеками подтвердилась.

Сам не раз с таким сталкивался.
Поначалу я тоже использовал элементы управления из этих библиотек (типа Common Controls, Calendar Control), пока не отдал файл проекта клиенту. Сразу после установки на компе клиента понял, что все вышеуказанные библиотеки были по умолчанию только на моём компе, и пришлось в спешке готовить дистрибутив, который устанавливал и регистрировал в системе недостающие библиотеки.

Если Вы хотите, чтобы Ваш файл работал на всех компьютерах, должны быть установлены только эти галочки: (последняя - необязательно, она требуется только при наличии в проекте форм)



В Вашем случае даже сложно сказать, из-за отсутствия какой именно библиотеки вылетает ошибка.
Надо в момент появления ошибки "Can't find project or library" отобразить окно Tools - References - перед названием отсутствующей библиотеки будет слово MISSING:

Ссылки на библиотеки Office и Excel содержат номер версии.
К примеру:
10.0 - Excel 2002
11.0 - Excel 2003
12.0 - Excel 2007

При запуске файла с проектом VBA (созданным в другой версии Office) приложение обычно успешно меняет ссылку на собственную библиотеку (при запуске проекта Excel 2002 в Excel 2003 будет автоматически обновлена ссылка на библиотеку Excel - теперь в окне References будет стоять ссылка на 11-ю версию Excel вместо 10-й), при этом забывая сменить ссылку на библиотеку Office (остаётся ссылка на библиотеку Office 2002)
Это и приводит к вышеуказанной ошибке.

Ошибка проявляется не на всех компах (зависит от версии Office и сервиспака, а также от количества ранее установленных версий Office)


Если Вы не можете отказаться от использования дополнительных элементов управления (как это сделал я в своё время), могу лишь порекомендовать сделать дистрибутив для Вашего проекта (файл Setup.exe) при помощи бесплатной программы типа Inno Setup
Пользоваться этой утилитой просто и удобно, а для регистрации библиотек надо добавить в проект Inno всего несколько одинаковых строк вроде этих:
Цитата:
[Files]
Source: "MSFLXGRD.OCX"; DestDir: "{sys}" ; Flags: regserver sharedfile
Source: "MSWINSCK.OCX"; DestDir: "{sys}" ; Flags: regserver sharedfile
EducatedFool вне форума Ответить с цитированием
Старый 11.03.2009, 12:16   #7
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию

Спасибо огромадное! Удалила отсутствующую (она же и лишней оказалась) библиотеку. Вроде все запускается. Ну а если опять где-то кобениться будет - сделаю дистрибутив проекта (программулину скачала, разбираюсь пока).
Bezdar вне форума Ответить с цитированием
Старый 06.07.2009, 12:20   #8
otto_diesel
Новичок
Джуниор
 
Регистрация: 03.07.2009
Сообщений: 2
По умолчанию

Ссылки на библиотеки Office и Excel содержат номер версии.
К примеру:
10.0 - Excel 2002
11.0 - Excel 2003
12.0 - Excel 2007

А если у меня стоит 2000 ексель, в макросе References номер версии 9.0
Как его заставить работать, нету рядом компа с другими версиями ексель чтобы проверить
otto_diesel вне форума Ответить с цитированием
Старый 06.07.2009, 17:44   #9
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

А попробуйте тупо поставить vba.trim вместо просто trim
(при этом после точки подсказчик сработает)
Я столкнулся с этим при тестировании с 2003 версии в 2003 с сервиспаком. Причем то же было и с left и с right
Похоже, при этом иксел адресуется к текущему приложению...
Вдруг поможет, интересно
alvazor вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Системы контроля версий crazy horse Общие вопросы по программированию, компьютерный форум 0 11.12.2008 12:16
конфликт файла записей и компонентов формы Deathwatcher Общие вопросы Delphi 9 14.11.2008 13:03
Конфликт IP адреса ... Ronni10 Операционные системы общие вопросы 4 28.02.2008 14:14
Delphi разных версий по разному компилируют Sergey2 Общие вопросы Delphi 3 12.01.2008 11:45
Конфликт Borland C 3.1 с двухъядерными процессорами. Alexander666 Помощь студентам 8 23.10.2007 13:19