2014-02-10 145 views
-1

我有一個Excel 2010電子表格,用於維護使用Selenium WebDriver編寫的自動化測試應用程序的測試。該電子表格有6個ActiveX按鈕,分別上傳(到數據庫),導入(從另一個工作表),清除所有表格,導出(到另一個工作表),合併(兩個工作表)和還原(從數據庫中的測試套件)。我的問題似乎源於選擇「導入」按鈕時運行的宏VBA宏崩潰Excel 2010

該宏使用兩張工作表(源和目標)清除目標工作表並將單元和數據從源工作簿複製到相應的工作表目的地工作簿。從那裏,它可以上傳到數據庫或由測試應用程序從表單運行

幾個星期前,當選擇導入按鈕Excel崩潰。我查看了網絡,發現了一個可行的解決方案。它涉及禁用所有宏,關閉信任文檔和可信位置,重新編譯以及重新打開工作簿。這工作了幾個星期,直到上週再次發生同樣的事情,修復程序不再工作。

下面是代碼我有:

numSheets = wrkBook.Sheets.Count 

appName = wrkSheet.Cells(2, 3).Value 

bkPath = Application.GetOpenFilename("Excel Macro-Enabled Workbook (*.xlsm),*.xlsm") 

If bkPath <> "False" Then 

    Call Clear_All(wrkBook, wrkSheet) 

    'get the number of sheets in the source workbook 
    destCnt = wrkBook.Sheets.Count 

    Set importBook = Workbooks.Open(bkPath) 
    For a = 1 To destCnt 
     thsShtName = wrkBook.Worksheets(a).Name 
     'activate the source workbook 
     importBook.Activate 

     'get the numer of sheets in the source workbook 
     srcCnt = importBook.Sheets.Count 

     'loop through each sheet checking title 
     For b = 1 To srcCnt 
      'get the name of the 'a' sheet 
      **srcSheetName = importBook.Worksheets(b).Name** 

      'do more stuff with the source sheet 
     Next b 
Next a 
End If 

的代碼上下面的行崩潰 srcSheetName = importBook.Worksheets(b)中,請將.Name

下面是我注意到幾件事。一旦設置了importBook變量,即使代碼還沒有到達違規行,我也無法在監視窗口中展開該變量。但是,宏將成功獲取srcCount(源表單上的工作表數量)。一旦宏到達有問題的行,它就會一致地出現一條消息,說明Excel遇到錯誤並需要關閉。沒有信息,Excel關閉,有時重新啓動到一個空白工作簿

+0

也許文件中您試圖打開的工作表中有一張已損壞?錯誤發生時'b'的值是多少? –

+0

我正在調查通過保存其他人,清除保存的工作表,並從「損壞」工作表中逐一複製所有數據來源表可能會損壞的事實 b = 1(按預期)它擊中失敗的線 –

+0

在該行放置一箇中斷,然後在立即窗口中鍵入'importBook.Name'並同樣檢查是否?importBook.Sheets(1).Name' –

回答

0

好的......我在聽到Siddarth Rout對腐敗電子表格的建議後自己想到了這一點。我採取了我上面描述的步驟

所以這就是我所做的。

我複製了其他電子表格之一併將其清除。只要我運行導入宏,它就會通過它以前失敗的那一行,因此腐敗似乎成了問題。然後我瀏覽了原始代碼並重寫了導入宏以簡化其中的代碼。它現在似乎工作得很好

感謝您的建議!