2014-10-02 25 views
2

我有一個Access應用程序,在Access 2013中開發的多用戶環境中,使用Excel自動導出和格式化Excel文件。從Access應用程序支持多個版本的Excel以實現自動化

正常的Office/Excel 2013(15.0)引用已經完成,並且在Office 2013計算機上都可以正常運行。在2010年的機器上播放不好。

使用2010年機器,我用14.0引用替換了15.0引用,並且該應用在2010和2013機器上很開心。在我的2013機器上進行下一次編輯/更新時,返回15.0引用。

任何建議,以更方便地在這個多版本環境中開發/操作?

謝謝!

+1

有你看着使用[後期綁定(http://support.microsoft.com/ KB/245115)? – 2014-10-02 14:49:35

+0

我使用Late-Binding類型聲明來設置此應用程序,但後來繼續使用「xlEdgeTop」類型變量,提示我添加必要的引用。所以,混合包 - 需要使用常量來修復。感謝您提示評估。 – 2014-10-02 16:02:05

回答

1

此問題的整體解決方案是使用late binding。這帶來的不便向後期綁定

  • Dim xlApp As Object意味着我們沒有得到任何智能感知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 

當代碼調整完成後,刪除引用,將LateBinding參數設置爲「True」(LateBinding = -1)並編譯該項目。添加你錯過的任何常量(總是似乎有一兩個),並且在沒有Reference的情況下編譯時,你應該很好地部署。

對於今後的發展會議,設置LateBinding回「假」(LateBinding = 0),並添加引用回。

+0

謝謝Gord很棒的信息! Late Binding現在對我的2013和2010用戶來說是完美的。目前的問題是,Access將不允許我爲Access 2007用戶另存爲.ACCDE(2010運行時),而無需插入Excel 14.0 Reference。很奇怪!。 – 2014-10-02 19:42:13

+0

我會嘗試你注意到的條件方法 - 也許這將允許創建.ACCDE。 – 2014-10-02 19:43:56

+1

更新:一個完整​​且乾淨的後期綁定實現似乎已經消除了我看到無法保存的問題 - 如* .ACCDE(2010運行時)。 – 2014-10-03 21:21:49

相關問題