Страницы: 1
RSS
"Детская" проблема совместимости макросов., Разные версии Excel на четырёх машинах.
 
На разных машинах стоят Эксели: из Office XP, 2003, 2007, 2010. Если дома пишу макрос, отлаживаю, короче, трачу время, то на работе опять приходится заново "подбирать слова", потому что "Компилл Еррор"... Есть ли что-то, что позволит унифицировать эту процедуру для разных версий Excel (VBA)? Пусть это будет "язык беспозвоночных", мне главное – не делать одно и то же тысячу раз и быть уверенной, что всё пойдет на любой версии. Наверное, сумбурно получилось, но я тут в первый раз и уже слега устала! Пользователь я, что называется, "от сохи", поэтому сильно не мордуйте.
Изменено: Софья - 26.01.2013 15:37:14
 
У меня была аналогичная проблема-помогли на старом форуме.
Вам придётся писать дома макросы в обеих версиях (2003 и 2010) ,
а потом использовать следующую конструкцию :

If Application.Version Like "14*" Then ' Version Like "14*"-это 2010 офис
        Ваш макрос записанный в 2010 офисе
Else
        Ваш макрос записанный в 2003 офисе
End If
End Sub
 
Неужели это единственный выход?!! Это же кошмар! У меня 12 модулей, 10 многокнопочных форм, и исполнение с автозапуском при открытии! Это получится файлик в 12-14 Мб! Похоже, это станет трудом половины жизни!
 
В одной из моих последних программ:
30 стандартных модулей
30 модулей классов
20 форм (с кучей элементов управления)
В сумме - около 10.000 строк кода.

И я ни разу не сталкивался с проблемами совместимости
(пишу в Excel 2010, работает всё и в Excel 2003-2007)

Я даже не знаю, как и что надо писать, чтобы возникли проблемы совместимости.
Слишком мало различий между версиями, чтобы думать об этом.
 
Насчёт единственного выхода не знаю, когда делал "универсальным" свой файл - проверял  его работу в обеих версиях и в каждый макрос который давал ошибку добавлял вышеуказанные строки.
 
Мне тоже не встречалась подобная проблема...
 
EducatedFool, вот:
Изменено: Софья - 27.01.2013 00:29:08 (добавление текста)
 
Платформа одна, 32/64-й битный байпас есть, всё упирается в версии.
 
Вам надо писать код в 2003-м Excel

Я так понял, что вы пользуетесь макрорекордером, а потом не чистите получившийся код от всего лишнего.

Если писать код самому - разницу практически не заметите, ошибок компиляции не будет.
Если же пользоваться макрорекордером - то такое может быть (например, при записи макроса назначения цвета активной ячейке, вместо одной нужной строки
Код
Sub Макрос1()
    ActiveCell.Interior.Color = 5287936
End Sub


записывается несколько:
Код
Sub Макрос1()
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 5287936
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub


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

Когда научитесь править код, записанный макрорекордером, - проблем таких не будет.
А пока записывайте макросы в Excel 2003 - он, хоть и тоже записывает лишнее, - но это лишнее хотя бы не будет выдавать ошибок в новых версиях Excel
 
Вы покажите код того самого модуля, где вылазит ошибка компиляции.
Тогда мы сразу озвучим диагноз.

Ну а лучше файл свой выложите на файлообменник, и дайте ссылку для скачивания
(чтобы оценить масштаб бедствия)

Наиболее часто встречающаяся ошибка - попытка запихать на формы нестандартные компоненты (календарь, ещё что-то), наподключать библиотек каких-то левых.

И, судя по весу файла, - там что-то лишнее есть. Либо данных много слишком,
либо картинки на форме присутствуют.
Файл на 10 тысяч строк кода с 10-30 формами, обычно имеет размер около 1,5-3 Мб
 
Да какая разница! Дело-то не в том, чтобы поставить очередную заплатку! По этой части я поднаторела... Дело в том, чтобы переписать код на чём-то, что сделает его универсальным для всех версий. Вот это "нечто" и интересует! А всякие лишние Scrollы, Selectы, ремарки за апострофами, украшательства тенями-подсветками-объёмами – всё это уже выхолощено, ещё когда файл перестал влезать на дискету, года два назад!
И, кажется, я не указывала существующий размер! Я писала, что он может таким стать, если дублировать макросы внутри него, чтобы каждая версия Экселя и запускала "свой кусок пирога".
Изменено: Софья - 26.01.2013 18:08:51
 
приведите пример участка кода, написанного в версии 2002 и не работающего в любой другой версии.
будет конкретный разговор.
пока десяток постов "ниачом".
Изменено: ikki - 26.01.2013 18:07:03
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
В общем, понятно. Проблему можно решить, только затыкая пробоину конкретной заплаткой. Всем спасибо за скудную помощь. А то я действительно тут задержалась!
 
видимо, Вы удивительная женщина.
Вам уже не раз и намекнули, и прямым текстом сказали, что для совместимости код надо писать в самой старшей версии.
либо досконально знать, чем именно отличаются версии друг от друга.
а Вы всё о заплатках каких-то толкуете.

буквально вымаливаемый у вас пример мы так и не увидели.
скрин с ошибкой - вообще "ниачом".
а помощь "скудная".
удивительно.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Цитата
Софья пишет: Всем спасибо за скудную помощь
off Из былого... На обиженных воду возят...
Вариант:
"... версия связана с более ранним периодом российской истории. По указу Петра Первого на всех тех, кто публично высказывал свою обиду, злость или недовольство, вешали коромысло с двумя тяжелыми ведрами с ледяной водой и заставляли бегать вокруг водоема. Вода расплескивалась, остужая пыл. "
... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
1. Указанная ошибка может возникать при использовании функций API для 32-битной ОС и запускать на 64-битной и наоборот.
2. Вы используете методы, присутствующие в 2007 и старше, но отсутствующие в 2003 и младше. Здесь просто надо знать какими методами заменять. Так, в 2003 есть метод FileSearch, но его заблокировали в 2007 и старше. А метод .AppliesTo появился только начиная с 2007 версии. Так же объект FileDialog появился только в Excel 2003, а в более ранних для вызова диалогов использовались функции типа: Application.GetOpenFileName(которая работает даже в 2010). Это только часть различий.

Исходя из изложенного - Ваши обиды беспочвенны, т.к. никто чудесным образом не даст Вам нужный код, не видя Вашего. А свой Вы показывать не хотите, зато хотите, чтобы Вам сказали какую таблетку принять, чтобы все везде работало. Так не будет. Показывайте свой код, а мы здесь уже посмотрим, как его под разные версии подшаманить.

Я ни один код написал и все они работали на всех версиях, потому что я изначально пишу свои приложения для всех версий, если иное не декларировано заказчиком.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Да какие обиды! Вы просто все всё не так поняли.
Квинтэссенция:
1. Существует проблема совместимости макросов старших и младших версий.
2. Вопрос: есть ли СРЕДСТВО (патч, компиллятор, что-то ещё), которое унифицирует код для ЛЮБОЙ версии? Что-то типа "Режим совместимости", только по макросам.
3. Речь шла не о ТЕКУЩИХ ЗАПЛАТКАХ, которые я ставлю в рабочем порядке. Просто нужно сделать такой продукт, который не требовал бы никакого сопровождения с моей стороны. Чтобы на любой машине не вылезало это сообщение. Собственно, и всё.
Кто ж виноват, что это было расценено, как обида? Всё просто – либо 1, либо 0.
 
Это уже даже не смешно.
Цитата
Софья пишет:
Просто нужно сделать такой продукт, который не требовал бы никакого сопровождения с моей стороны.
Так делайте!
 
Цитата
1. Существует проблема совместимости макросов старших и младших версий.
Такой проблемы не существует, если соблюдать несколько простых правил при написании кода.
Например, это:
http://excelvba.ru/articles/WinAPI

Цитата
2. Вопрос: есть ли СРЕДСТВО (патч, компиллятор, что-то ещё), которое унифицирует код для ЛЮБОЙ версии? Что-то типа "Режим совместимости", только по макросам.
Нет.
Только «прямые руки»
На примере вашей проблемы: надо подправить буквально несколько строк кода,
и все проблемы с несовместимостью исчезнут.
Волшебных патчей и компиляторов не существует.

Цитата
3. Речь шла не о ТЕКУЩИХ ЗАПЛАТКАХ, которые я ставлю в рабочем порядке
Надо не заплатки ставить, а устранить ОШИБКИ в коде, сделав его универсальным
Обычно для этого требуется совсем немного времени.

Цитата
Просто нужно сделать такой продукт, который не требовал бы никакого сопровождения с моей стороны. Чтобы на любой машине не вылезало это сообщение
Я (как и большинство моих коллег) ежедневно пишем такие макросы - которые беспроблемно работают на ВСЕХ версиях Excel, и не требуют никакого сопровождения.
Покажете свой код - подскажем что исправить,
не покажете - продолжайте искать мифический компилятор.
 
Девушке просто поговорить захотелось, не серчайте  :)  Если что, флейм здесь

Цитата
Софья пишет:
Кто ж виноват, что это было расценено, как обида?
вы

Цитата
EducatedFool пишет:
Такой проблемы не существует
на данный момент ее практически не существует (я бы так сказал)

Цитата
The_Prist пишет:
Я ни один код написал и все они работали на всех версиях
уверен?

Версии для Windows и Windows NT
  • 1988 год — Excel 2.0 для Windows
  • 1990 год — Excel 3.0
  • 1992 год — Excel 4.0
  • 1993 год — Excel 5.0 (Office 4.2 и 4.3, также есть 32-битная версия только для Windows NT)
  • 1995 год — Excel 7 для Windows 95 (включён в пакет Microsoft Office 95)
  • 1997 год — Excel 97 (включён в пакет Microsoft Office 97)
  • 1999 год — Excel 2000 (9) — Microsoft Office 2000
  • 2001 год — Excel 2002 (10) — Microsoft Office XP
  • 2003 год — Excel 2003 (11) — Microsoft Office 2003
  • 2007 год — Excel 2007 (12) — Microsoft Office 2007
  • 2010 год — Excel 2010 (14) — Microsoft Office 2010
  • Замечание: Версия 1.0 не использовалась, чтобы избежать путаницы с продуктами Apple
  • Замечание: Excel 6.0 не существует, так как версия Windows 95 поставлялась с Word 7. Все программы Office 95 и Office 4.x использовали OLE 2.0 (автоматическая передача данных между различными программами), и Excel 7 должен был показывать, что он соответствует Word 7.
  • Замечание: Версия 13.0 была пропущена. Excel 2010 имеет внутреннюю версию 14.0.
Версии для Macintosh
  1. 1985 год — Excel 1.0
  2. 1988 год — Excel 1.5
  3. 1989 год — Excel 2.2
  4. 1990 год — Excel 3.0
  5. 1992 год — Excel 4.0
  6. 1993 год — Excel 5.0
  7. 1998 год — Excel 8.0 (Office '9  8)
  8. 2000 год — Excel 9.0 (Office 2001)
  9. 2001 год — Excel 10.0 (Office v. X)
  10. 2004 год — Excel 11.0 (Office 2004)
  11. 2008 год — Excel 12.0 (Office 200  8)
  12. 2011 год — Excel 14.0 (Office 2011)
и т.д.

Скорее всего твои коды работают только на последних версиях эксель для окон
Изменено: nerv - 05.07.2018 00:03:07
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Софья, если не хотите выкладывать в форум - пришлите мне на почту, посмотрю, где у Вас конфликт.


Саша, если так глобально подходить к этому - то и не каждый Excel на всех машинах запустится  :D
Попридираться, конечно, можно. Да, я не прав и на версии 1990 года мои коды не запустятся, хотя бы потому, что они там еще вообще не поддерживаются.
Но не думал, что у кого-то появится желание использовать столь доисторические версии. И говоря "во всех версиях" имел ввиду я именно в рамках данной темы(Excel начиная с 2002 хотя бы), а не в глобальном смысле - вообще во всех.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist пишет:
говоря "во всех версиях" имел ввиду я именно в рамках данной темы
я понял. Решил поддержать холивар : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Цитата
nerv пишет:
1995 год — Excel 7 для Windows 95 (включён в пакет Microsoft Office 95)
Цитата
The_Prist пишет:
Да, я не прав и на версии 1990 года мои коды не запустятся, хотя бы потому, что они там еще вообще не поддерживаются.

VBA появился в Office для Windows 95 (кстати, без IntelliSense). :)
There is no knowledge that is not power
Страницы: 1
Читают тему
Наверх