2014-10-02 6 views
2

У меня есть приложение Access, разработанное в Access 2013 в многопользовательском env, использует автоматизацию Excel для экспорта и форматирования файла Excel.Поддержка нескольких версий Excel для автоматизации из приложения Access

Нормальные документы Office/Excel 2013 (15.0) были сделаны и все хорошо работает на машинах Office 2013. Не играет хорошо на машинах 2010 года.

Используя машину 2010 года, я заменил ссылки 15.0 на 14.0 ссылки, и приложение будет рад на машинах 2010 и 2013 годов. После следующего редактирования/обновления на моем компьютере 2013 возвращаются ссылки 15.0.

Любые предложения по более удобной разработке/эксплуатации в этой среде с несколькими версиями?

Спасибо!

+1

Вы смотрели в использовании [позднее связывание] (http://support.microsoft.com/ кб/245115)? –

+0

Я настраиваю это приложение, используя объявления типа Late-Binding, но затем перешел к использованию переменных типа «xlEdgeTop», предлагая добавить необходимые ссылки. Итак, смешанный пакет - нужно исправить с помощью констант. Спасибо за подсказку оценки. –

ответ

1

Общее решение этой проблемы - использовать late binding. Недостатками позднего связывания являются

  • Dim xlApp As Object означает, что мы не получаем никакой IntelliSense для xlApp и
  • связанные константы, такие как xlEdgeTop не определены без соответствующего задания

Эти вопросы могут быть смягчается с помощью условной компиляции в проекте VBA. Для разработки, то добавьте ссылку на проект и определить условную компиляцию аргумент

ContextMenu.png

PropertiesDialog.png

, которые вы можете использовать в своем коде, как этот

Option Compare Database 
Option Explicit 

Public Sub WorkWithExcel() 
    #If LateBinding Then 
     Dim xlApp As Object 
     Set xlApp = CreateObject("Excel.Application") 
    #Else 
     Dim xlApp As Excel.Application 
     Set xlApp = New Excel.Application 
    #End If 

    Debug.Print xlEdgeTop 
End Sub 

Чтобы избежать беспорядок, я был бы склонен держать константы в отдельном модуле, как это

Option Compare Database 
Option Explicit 

#If LateBinding Then 
    Public Const xlEdgeTop = 8 
#End If 

Когда код подстройка завершена, удалите Reference, установите LateBinding аргумент «True» (LateBinding = -1) и скомпилировать проект. Добавьте любые константы, которые вы пропустили (всегда, кажется, один или два), и когда они компилируются без ссылки, вы должны быть хороши для развертывания.

Для следующей сессии развития, установить LateBinding обратно в «False» (LateBinding = 0) и добавить ссылку обратно.

+0

Спасибо, Горд, отличная информация! Late Binding теперь отлично работает для моих пользователей в 2013 и 2010 годах. Текущая проблема заключается в том, что Access не позволит мне сохранять как .ACCDE (2010 Runtime) для пользователей моего доступа 2007 без добавления справки Excel 14.0. Очень странно!. –

+0

Я попробую условный подход, который вы отметили - возможно, это позволит создать .ACCDE. –

+1

Обновление: полная и чистая реализация позднего связывания, по-видимому, устранила проблему, которую я видел там, где мне не удалось сохранить - как * .ACCDE (2010 runtime). –

Смежные вопросы