我有幾個應用程序在傳統的VB6中編寫,內嵌了提取代碼以創建EXCEL提取。我們正在從Excel 2007遷移到Excel 2013,並且遇到了一些問題。我運行Windows 10. 2007年,這是我的聲明和Set
語句用來工作就好了... ...Excel 2013中的VB6提取
Option Explicit
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheetA As Excel.Worksheet
這些我都在模塊的頂部。
在我的功能是將數據寫入提取我做到這一點...
Set xlApp = New Excel.Application
Set xlBook = XlApp.Workbooks.Add
Set xlSheetA = xlBook.Worksheets.Add
當它到達XLBook - 它掛起來,一切都停止工作。我得到一個錯誤:
This action cannot be completed because the other program is busy. Choose "SwitchTo' to activate the busy program and correct the problem.
現在,在我跑我的提取物我要確保Excel未在後臺運行,檢查我去任務管理器 - >過程並刪除它,如果它的存在。我究竟做錯了什麼?我應該如何更改我的代碼?
編輯屏幕截圖:屏幕顯示不顯示我在我的應用程序中的代碼。這是一個新項目,只是爲了展示我使用的所有代碼。
有趣的是,訪問沒有給我任何問題。我打開了應用程序並在訪問中運行了一些報告 - 2013年,一切都很順利。 – BobSki
爲了澄清,代碼是VB6應用程序中的VB6代碼,引用了Excel對象模型?如果是這樣的話,我認爲[vba]和[excel-vba]標籤是令人困惑的事情。 –
另外,'xlApp','xlBook'和'xlSheetA'是模塊範圍的,並且在函數的作用域中被賦值並不正確。一個'Function'不應該有副作用,並且你正在改變全局狀態(無論如何,模塊狀態)。在函數退出後留下帶有懸掛對象引用的'xlSheetA','xlBook'和'xlApp'。此外 - 只是一個編碼風格的小點,但使用'Private'而不是'Dim'來聲明模塊級別的變量將使您更清楚地指出私有字段。 –