2016-09-06 74 views
3

我有幾個應用程序在傳統的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未在後臺運行,檢查我去任務管理器 - >過程並刪除它,如果它的存在。我究竟做錯了什麼?我應該如何更改我的代碼?

編輯屏幕截圖:屏幕顯示不顯示我在我的應用程序中的代碼。這是一個新項目,只是爲了展示我使用的所有代碼。 code error

+0

有趣的是,訪問沒有給我任何問題。我打開了應用程序並在訪問中運行了一些報告 - 2013年,一切都很順利。 – BobSki

+2

爲了澄清,代碼是VB6應用程序中的VB6代碼,引用了Excel對象模型?如果是這樣的話,我認爲[vba]和[excel-vba]標籤是令人困惑的事情。 –

+0

另外,'xlApp','xlBook'和'xlSheetA'是模塊範圍的,並且在函數的作用域中被賦值並不正確。一個'Function'不應該有副作用,並且你正在改變全局狀態(無論如何,模塊狀態)。在函數退出後留下帶有懸掛對象引用的'xlSheetA','xlBook'和'xlApp'。此外 - 只是一個編碼風格的小點,但使用'Private'而不是'Dim'來聲明模塊級別的變量將使您更清楚地指出私有字段。 –

回答

2

您的函數1位於私有子類中,應該作爲函數調用。顯示的代碼和屏幕截圖也有所不同。我已經創建了一個快速樣本,它在Excel 2013中的工作非常完美。將該子功能更改爲...

Option Explicit 

Dim xlApp As Excel.Application 
Dim xlBook As Excel.Workbook 
Dim xlSheetA As Excel.Worksheet 

Private Function function1() 

Set xlApp = New Excel.Application 
Set xlBook = xlApp.Workbooks.Add 
Set xlSheetA = xlBook.Worksheets.Add 

Set xlSheetA = xlBook.Sheets.Item(1) ''the sheet you want to use 

xlApp.Visible = True 

xlApp.ActiveSheet.Cells(1, 1).Value = "TEST" 

xlApp.Workbooks.Close 

MsgBox "Excel Done" 
End Function 

Private Sub Command3_Click() 

Call function1 
End Sub 

希望這會有所幫助。

編輯:見下面的截圖,做工精細...

Open Excel

+1

此外,請確保你有最新的Microsoft Excel對象庫引用,認爲你提到你只有1。 –

+1

只是稍微澄清一點,開關錯誤與調用另一個子(而不是函數),而當前子仍在嘗試執行一些進程或命令。 –

+0

以及代碼的第一部分來自我的實際應用程序,截圖是從我做一個全新的項目 - 顯示到底發生了什麼 - 更容易我這樣做,因爲我的代碼在應用程序是在不同的地方 – BobSki

1

龍揹我有類似的問題。不知道這是否與您的情況有關。 我的代碼正在更新打開的excel,它有一個處於編輯模式的單元格。在嘗試了很多可能性之後,我關閉了屏幕更新和可見性,直到代碼完成。類似於 xlApp.ScreenUpdating = False xlApp.Visible = False

+0

這不幸沒有幫助。我明白你在做什麼。這裏的問題是,一旦它在Office 2013中設置xlapp = new excel.application行 - 它並沒有給它一個價值,在2007年,當我運行它,並擊中該行 - xlAPP成爲「MICROSOFT EXCEL」,當我用鼠標懸停在它上面,它2013年沒有說什麼。 – BobSki