Кто-нибудь сталкивался с ошибкой воспроизведения макроса с именованным диапазоном (созданным в 2013 офисе) при запуске на ПК с 2010-м офисом?
Есть некоторый объёмный проект на VBA. Большое количество функций программно обращаются к именованным диапазонам и именованным таблицам. Проект в формате .xlsb, первые 15 "шагов" проекта были сделаны на 2010-м офисе, последние 3 "шага" - на 2013-м.
Во вложении образец синтаксиса и объекта, используемые в оригинальной программе:
[vba]
Код
Sub Check() MsgBox "Значение именованной ячейки: " & [Rioran].Cells(1, 1).Value End Sub
[/vba] При воспроизведении на 2010-х офисах подсвечивает именованный диапазон и выводит сообщение ошибки: "Can't find project or library". На других 2013-х офисах работает корректно. При создании файла с нуля на 2010-х офисах тоже работает корректно и в 2010-м, и в 2013-м.
Просьба подсказать, как можно с наименьшими затратами большой проект, созданный в 2013-м офисе и завязанный на именованные диапазоны, сделать воспроизводимым на 2010-х версиях?
Всем привет.
Кто-нибудь сталкивался с ошибкой воспроизведения макроса с именованным диапазоном (созданным в 2013 офисе) при запуске на ПК с 2010-м офисом?
Есть некоторый объёмный проект на VBA. Большое количество функций программно обращаются к именованным диапазонам и именованным таблицам. Проект в формате .xlsb, первые 15 "шагов" проекта были сделаны на 2010-м офисе, последние 3 "шага" - на 2013-м.
Во вложении образец синтаксиса и объекта, используемые в оригинальной программе:
[vba]
Код
Sub Check() MsgBox "Значение именованной ячейки: " & [Rioran].Cells(1, 1).Value End Sub
[/vba] При воспроизведении на 2010-х офисах подсвечивает именованный диапазон и выводит сообщение ошибки: "Can't find project or library". На других 2013-х офисах работает корректно. При создании файла с нуля на 2010-х офисах тоже работает корректно и в 2010-м, и в 2013-м.
Просьба подсказать, как можно с наименьшими затратами большой проект, созданный в 2013-м офисе и завязанный на именованные диапазоны, сделать воспроизводимым на 2010-х версиях?Rioran
Как раз проверяю по поводу обновлений и библиотек. Возникла мысль, что дело в объектной модели Эксель или Офиса - у меня она стоит 15-я, у клиентов 14-я.
Manyasha, _Boroda_, день добрый.
Как раз проверяю по поводу обновлений и библиотек. Возникла мысль, что дело в объектной модели Эксель или Офиса - у меня она стоит 15-я, у клиентов 14-я.
_Boroda_, странно. Возможно, мне в большом файле надо копать тогда в другую сторону, но пока нет идей в какую.
Ещё раз факты:
1). Большой файл сделан в 2013-м офисе и содержит много ссылок на именованные диапазоны. 2). При открытии большого файла в 2010-м офисе у клиентов выдаёт ошибку на именованные диапазоны в коде. 3). При открытии большого файла на других машинах с 2013-м офисом всё работает корректно.
_Boroda_, странно. Возможно, мне в большом файле надо копать тогда в другую сторону, но пока нет идей в какую.
Ещё раз факты:
1). Большой файл сделан в 2013-м офисе и содержит много ссылок на именованные диапазоны. 2). При открытии большого файла в 2010-м офисе у клиентов выдаёт ошибку на именованные диапазоны в коде. 3). При открытии большого файла на других машинах с 2013-м офисом всё работает корректно.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
_Boroda_, спасибо, предварительное тестирование показывает, что это может помочь. Перебью синтаксис, проверю и отпишу позже. Марина, эта библиотека общая для компании, есть по умолчанию у всех, к делу относится не должна.
_Boroda_, спасибо, предварительное тестирование показывает, что это может помочь. Перебью синтаксис, проверю и отпишу позже. Марина, эта библиотека общая для компании, есть по умолчанию у всех, к делу относится не должна.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Сообщение отредактировал Rioran - Понедельник, 27.04.2015, 12:07
_Boroda_, переделал синтаксис проекта в соответствии с твоим предложением. Теперь с тем же текстом ошибки ("Can't find project or library") мне выделяет метод "Left", который должен работать независимо от версии офиса.
_Boroda_, переделал синтаксис проекта в соответствии с твоим предложением. Теперь с тем же текстом ошибки ("Can't find project or library") мне выделяет метод "Left", который должен работать независимо от версии офиса.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
С Left не сталкивался, а вот Trim - было не однократно. Скачиваю файл, Trim не работает, стоит галка миссигн. Снимаю, все начинает работать. Что за что цеплялось, так и не понял. Хотя тоже от версии зависеть не должен. Возможно, цепляется за старый проект.
С Left не сталкивался, а вот Trim - было не однократно. Скачиваю файл, Trim не работает, стоит галка миссигн. Снимаю, все начинает работать. Что за что цеплялось, так и не понял. Хотя тоже от версии зависеть не должен. Возможно, цепляется за старый проект.RAN
Бывало много раз с Left, Right, Format, Len, Trim. Наверняка отсутствует какая-то библиотека (или присутствует, но на разных компах лежит в разных местах).
Бывало много раз с Left, Right, Format, Len, Trim. Наверняка отсутствует какая-то библиотека (или присутствует, но на разных компах лежит в разных местах).nilem
Может влиять даже adHocReportingEexcelClientlib. Возможно, в 2010 офисе он как-то не так работает. У меня однажды MSCOMCTL.OCX задурил, тоже Left, Right, Format, Len, Trim перестали работать. С тех пор я от MSCOMCTL.OCX отказался.
Может влиять даже adHocReportingEexcelClientlib. Возможно, в 2010 офисе он как-то не так работает. У меня однажды MSCOMCTL.OCX задурил, тоже Left, Right, Format, Len, Trim перестали работать. С тех пор я от MSCOMCTL.OCX отказался.Skif-F
Роман, если других вариантов не будет, то можно попробовать удалить не найденные библиотеки, а потом подключить необходимые для работы. На примере Microsoft Excel 14.0 Object Library
[vba]
Код
Sub Main() Dim Ref As Object With ThisWorkbook.VBProject For Each Ref In .References If Ref.isBroken Then Debug.Print "удалили " & Ref.Description: .References.Remove Ref Next Ref 'Проверяем, подключена ли библиотека Excel For Each Ref In .References If Ref.Name = "Excel" Then Debug.Print "Все ок, можно запускать макрос": Check: Exit Sub Next Ref 'Если нет, подключаем On Error Resume Next .References.AddFromGuid "{00020813-0000-0000-C000-000000000046}", 1, 7'Для 2010-го офиса If Err.Number <> 0 Then MsgBox "Не найдена библиотека Excel!", vbCritical: Exit Sub Else Debug.Print "Библиотеку нашли, подключили" Check End If End With Set Ref = Nothing On Error GoTo 0 End Sub
[/vba]
Посмотреть параметры всех подключенных библиотек можно так:
[vba]
Код
Sub all_libraries() Dim Ref As Object For Each Ref In ThisWorkbook.VBProject.References Debug.Print Ref.Name Debug.Print Ref.Description Debug.Print Ref.Guid 'Debug.Print Ref.FullPath Debug.Print Ref.Major, " ", Ref.Minor Debug.Print "--------------------------------------" Next Ref End Sub
[/vba]
Роман, если других вариантов не будет, то можно попробовать удалить не найденные библиотеки, а потом подключить необходимые для работы. На примере Microsoft Excel 14.0 Object Library
[vba]
Код
Sub Main() Dim Ref As Object With ThisWorkbook.VBProject For Each Ref In .References If Ref.isBroken Then Debug.Print "удалили " & Ref.Description: .References.Remove Ref Next Ref 'Проверяем, подключена ли библиотека Excel For Each Ref In .References If Ref.Name = "Excel" Then Debug.Print "Все ок, можно запускать макрос": Check: Exit Sub Next Ref 'Если нет, подключаем On Error Resume Next .References.AddFromGuid "{00020813-0000-0000-C000-000000000046}", 1, 7'Для 2010-го офиса If Err.Number <> 0 Then MsgBox "Не найдена библиотека Excel!", vbCritical: Exit Sub Else Debug.Print "Библиотеку нашли, подключили" Check End If End With Set Ref = Nothing On Error GoTo 0 End Sub
[/vba]
Посмотреть параметры всех подключенных библиотек можно так:
[vba]
Код
Sub all_libraries() Dim Ref As Object For Each Ref In ThisWorkbook.VBProject.References Debug.Print Ref.Name Debug.Print Ref.Description Debug.Print Ref.Guid 'Debug.Print Ref.FullPath Debug.Print Ref.Major, " ", Ref.Minor Debug.Print "--------------------------------------" Next Ref End Sub
Manyasha, спасибо, любопытные возможности, надо будет ознакомиться.
Благодарю всех за участие, вопрос решился. Что именно сыграло - сказать трудно, сделал сразу много чего:
1). Отключил библиотеку "AdHoc (...)" и надстройку СОМ Inquire. 2). Сохранил документ, перезапустил Excel 2013. 3). Собрал файл с нуля, копируя данные как значения. 4). В коде заменил обращения с [Name] на Range("Name") 5). Положил в кофе на одну ложку сахара больше, чем обычно. 6). Перепрописал имена диапазонов, формулы и подключения к SQL базам вручную. 7). Избыточные страницы просто НЕ копировал в новую версию файла.
В итоге файл стал весить в 3 раза меньше (хотя я, вроде, и так пристально следил за чистотой). И, что главное - пользователи 2010-х офисов наконец-то смогли его использовать. Особенно, мне кажется, помог пункт номер 5.
Manyasha, спасибо, любопытные возможности, надо будет ознакомиться.
Благодарю всех за участие, вопрос решился. Что именно сыграло - сказать трудно, сделал сразу много чего:
1). Отключил библиотеку "AdHoc (...)" и надстройку СОМ Inquire. 2). Сохранил документ, перезапустил Excel 2013. 3). Собрал файл с нуля, копируя данные как значения. 4). В коде заменил обращения с [Name] на Range("Name") 5). Положил в кофе на одну ложку сахара больше, чем обычно. 6). Перепрописал имена диапазонов, формулы и подключения к SQL базам вручную. 7). Избыточные страницы просто НЕ копировал в новую версию файла.
В итоге файл стал весить в 3 раза меньше (хотя я, вроде, и так пристально следил за чистотой). И, что главное - пользователи 2010-х офисов наконец-то смогли его использовать. Особенно, мне кажется, помог пункт номер 5.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279