2013-08-16 112 views
6

我負責一個非常大的Excel 2010電子表格,其中包含指向各種外部數據源的鏈接,包括彭博,65個工作表和vba模塊以及對其他vba加載項的引用。Excel VBA項目已生成多個工作簿對象

我注意到VBA項目已經獲得了多個工作簿對象。

有標準的ThisWorkbook。但是,一些工作表也被Excel轉換爲Workbook對象,將原始工作表保留爲前一個工作表的副本,減去代碼。

這似乎不是任何人的行爲的結果。的確,我認爲不可能有多個Workbook對象!

例如,我有一個名爲wksInputs的工作表,它現在已經變成了一個Workbook對象,原來的wksInputs現在被稱爲wksInputs1。

example

我不能刪除wksInputs Workbook對象。

請有人幫忙解釋一下這裏發生了什麼,以及我怎樣才能解決問題......?

非常感謝。發生在我的代碼

+0

你能上傳你的VBA項目文件夾列表的截圖嗎?上傳到像imgur.com這樣的網站,並在您的帖子問題中加入鏈接/網址。 –

+0

大衛,不幸的是我受到我辦公室安全標準的限制,無法上傳到這些網站。我試圖在上面添加一張圖片,但是StackOverflow說我沒有必要的專業知識......讓我試試其他的東西,因爲我知道這對其他人來說真的會有幫助... –

+0

是啊,這是如果沒有看到你所看到的東西真的是不可能的。 –

回答

0

這個問題,當我路過一個工作表一個Sub作爲參數,如:

呼叫BuildCodeStrings(Sheet2中,sAccount)
子BuildCodeStrings(wsSource作爲工作表,S作爲字符串)

爲了解決這個問題,我創建了一個新的工作簿,將我原來的所有合法工作表中的所有數據複製到我的新工作簿中同名的工作表中。然後將所有代碼從原始代碼複製到新的工作簿中。

然後我改變了子程序調用

呼叫BuildCodeStrings( 「IC帳戶」,sAccounts)
子BuildCodeStrings(sSource作爲字符串,S作爲字符串)

並加入一條線我的子程序BuildCodeString:

設置wsSource = ThisWorkbook.Sheets(sSource)

我不知道是什麼原因導致此問題,但此解決方法對我有用。

3

這是我的解決方案,它一貫地工作,您不需要手動將工作表和代碼複製到空白工作簿。我已經在幾個損壞的工作簿上測試了這種方法,這些工作簿在啓動時給我提供了「自動化錯誤 - 災難性故障」錯誤。

注意:原始損壞的文件被保存爲。XLSM

  1. 打開一個空白Excel工作簿
  2. 開發選項卡>宏安全>禁用所有宏不通知
  3. 關閉Excel
  4. 雙擊損壞的文件,例如,MyFile.xlsm
  5. 文件>另存爲...> MyFile.xlsb(不是.xlsm),選擇.xlsb格式是什麼竅門
  6. 開發人員選項卡>宏安全性>啓用al升宏(或其他安全的水平,你喜歡)
  7. 關閉Excel
  8. 雙擊MyFile.xlsb

現在的文件是固定的!如果需要,您可以將MyFile.xlsb文件重新保存爲.xlsm。根據我的經驗,.xlsm文件很容易被損壞,所以我會養成使用.xlsb格式的習慣。

希望有人認爲這很有幫助:)

+1

不幸的是,沒有爲我工作 –

0

我有同樣的問題在PowerPoint(2007年),其中「滑件」是空的,無法刪除。通過@Scoox答案向我指出一個解決方案:

  1. 導出所有VBA模塊插入文本(.BAS)文件
  2. 保存.PPTM(或.XLSM)文件作爲.PPTX(或.xlsx)
  3. 關閉PowerPoint(或Excel)
  4. 打開此.PPTX/.XLSX並將其保存回爲一個.PPTM/.XLSM
  5. 導入原來的VBA文本(.BAS)文件
  6. 手動重新關聯所有按鈕改爲原始宏功能
  7. 添加任何外部參考您在原始文件
  8. 保存並測試,如果一切正常

這爲我工作,我相信它會使用Excel工作了,太。

相關問題