На разных машинах стоят Эксели: из Office XP, 2003, 2007, 2010. Если дома пишу макрос, отлаживаю, короче, трачу время, то на работе опять приходится заново "подбирать слова", потому что "Компилл Еррор"... Есть ли что-то, что позволит унифицировать эту процедуру для разных версий Excel (VBA)? Пусть это будет "язык беспозвоночных", мне главное – не делать одно и то же тысячу раз и быть уверенной, что всё пойдет на любой версии. Наверное, сумбурно получилось, но я тут в первый раз и уже слега устала! Пользователь я, что называется, "от сохи", поэтому сильно не мордуйте.
У меня была аналогичная проблема-помогли на старом форуме. Вам придётся писать дома макросы в обеих версиях (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)
Я даже не знаю, как и что надо писать, чтобы возникли проблемы совместимости. Слишком мало различий между версиями, чтобы думать об этом.
Насчёт единственного выхода не знаю, когда делал "универсальным" свой файл - проверял его работу в обеих версиях и в каждый макрос который давал ошибку добавлял вышеуказанные строки.
Я так понял, что вы пользуетесь макрорекордером, а потом не чистите получившийся код от всего лишнего.
Если писать код самому - разницу практически не заметите, ошибок компиляции не будет. Если же пользоваться макрорекордером - то такое может быть (например, при записи макроса назначения цвета активной ячейке, вместо одной нужной строки
Код
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ы, ремарки за апострофами, украшательства тенями-подсветками-объёмами – всё это уже выхолощено, ещё когда файл перестал влезать на дискету, года два назад! И, кажется, я не указывала существующий размер! Я писала, что он может таким стать, если дублировать макросы внутри него, чтобы каждая версия Экселя и запускала "свой кусок пирога".
приведите пример участка кода, написанного в версии 2002 и не работающего в любой другой версии. будет конкретный разговор. пока десяток постов "ниачом".
В общем, понятно. Проблему можно решить, только затыкая пробоину конкретной заплаткой. Всем спасибо за скудную помощь. А то я действительно тут задержалась!
видимо, Вы удивительная женщина. Вам уже не раз и намекнули, и прямым текстом сказали, что для совместимости код надо писать в самой старшей версии. либо досконально знать, чем именно отличаются версии друг от друга. а Вы всё о заплатках каких-то толкуете.
буквально вымаливаемый у вас пример мы так и не увидели. скрин с ошибкой - вообще "ниачом". а помощь "скудная". удивительно.
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
off Из былого... На обиженных воду возят... Вариант: "... версия связана с более ранним периодом российской истории. По указу Петра Первого на всех тех, кто публично высказывал свою обиду, злость или недовольство, вешали коромысло с двумя тяжелыми ведрами с ледяной водой и заставляли бегать вокруг водоема. Вода расплескивалась, остужая пыл. " ...
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, и не требуют никакого сопровождения. Покажете свой код - подскажем что исправить, не покажете - продолжайте искать мифический компилятор.
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
1985 год — Excel 1.0
1988 год — Excel 1.5
1989 год — Excel 2.2
1990 год — Excel 3.0
1992 год — Excel 4.0
1993 год — Excel 5.0
1998 год — Excel 8.0 (Office '9 8)
2000 год — Excel 9.0 (Office 2001)
2001 год — Excel 10.0 (Office v. X)
2004 год — Excel 11.0 (Office 2004)
2008 год — Excel 12.0 (Office 200 8)
2011 год — Excel 14.0 (Office 2011)
и т.д.
Скорее всего твои коды работают только на последних версиях эксель для окон
Софья, если не хотите выкладывать в форум - пришлите мне на почту, посмотрю, где у Вас конфликт.
Саша, если так глобально подходить к этому - то и не каждый Excel на всех машинах запустится Попридираться, конечно, можно. Да, я не прав и на версии 1990 года мои коды не запустятся, хотя бы потому, что они там еще вообще не поддерживаются. Но не думал, что у кого-то появится желание использовать столь доисторические версии. И говоря "во всех версиях" имел ввиду я именно в рамках данной темы(Excel начиная с 2002 хотя бы), а не в глобальном смысле - вообще во всех.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...