標題:
excel 2007/2010開啟excel 2003編輯的vba相容性問題
[打印本頁]
作者:
lalalada
時間:
2012-8-5 02:45
標題:
excel 2007/2010開啟excel 2003編輯的vba相容性問題
原本是在2003環境下撰寫的
跑起來沒問題
但是今天將檔案移至另一台電腦以excel 2010開啟時出現錯誤
以2007開啟亦同
" 執行階段錯誤:'1004':
應用程式或物件定義上的錯誤 "
發生錯誤的程式碼為
Workbooks("Trading.xls").Sheets("DataSource").Range("J" & Rows.Count).End(xlUp).Row
經過測試之後
發現應該是因為有其它活頁簿開起所致(本例中是來自於先前使用了application.workbooks.add)
在原本2003下
workbooks("Trading.xls")會從Trading.xls這個檔案的工作表"DataSource"取得儲存格資料
但是到了2007/2010則無法
以下是我的推測:
測試一段程式碼
Sub s()
MsgBox Workbooks("Trading.xls").Sheets("DataSource").Range("J" & Rows.Count).End(xlUp).Row
MsgBox CStr(Workbooks("Trading.xls").Sheets("DataSource").Cells(2, 10))
End Sub
複製代碼
可以執行並回報正確資料
但若ActiveWorkbook 不是 Trading.xls時 則發生錯誤
像是另外開啟一個EXCEL檔(回到原先檔案,新增活頁簿時,ActiveWorkbook會變成新增的活頁簿)
想請問此相容性問題(我猜的對嗎?)及解決辦法
感激不盡!! 不然只好找2003來灌了....
作者:
GBKEE
時間:
2012-8-5 06:27
本帖最後由 Hsieh 於 2012-8-5 07:07 編輯
回復
1#
lalalada
我版本是2003 之前所回覆程式中有.Rows.Count 在 2007 2010 中執行也是會出錯
指明工作表 試試看可否解決
Option Explicit
Sub Ex()
With Workbooks("Trading.xls").Sheets ("DataSource")
MsgBox .Range("J" & .Rows.Count).End(xlUp).Row
MsgBox CStr(.Cells(2, 10))
End With
End Sub
複製代碼
作者:
lalalada
時間:
2012-8-5 14:12
回復
2#
GBKEE
感謝版大!
這段程式碼經測試後可以使用
可是我不懂這跟原本的差別在哪...? 為什麼這樣就可以
所以2007以後的版本不能使用workbooks(index)方法引入資料嗎...."
作者:
GBKEE
時間:
2012-8-5 14:31
回復
3#
lalalada
2007以上的
Rows
.Count (ROWS 是物件)
這就如 工作表模組 Code (程式碼) 中的
RANGE
(物件名稱) 如沒指名工作表名稱
當作用中的工作表 不是工作表模組 的工作表 會出錯一樣的
所以2007以後的版本不能使用workbooks(index)方法引入資料嗎...."
在 workbooks(1) 的CODE(程式碼)中 Msgbox workbooks(2).Name 試試看
作者:
lalalada
時間:
2012-8-5 15:41
本帖最後由 lalalada 於 2012-8-5 15:43 編輯
回復
4#
GBKEE
感謝版大!
測試 msgbox workbooks(2).name 會失敗
只有 msgbox workbooks(1).name 可以
我想應該不是row的問題
後來查到了這個 http://support.microsoft.com/kb/928283/zh-tw
依照其指示加入 Application.DefaultSaveFormat = xlWorkbookNormal
竟然就可以用了= =
但不是很懂發生什麼事就是了
大概跟2007之後變成xlsm/xlsx有關?
而且在2007之後會發現可以開出兩個以上的VBA編輯器
另外我發現在2007中 使用.SaveAs方法好像無法儲存檔案成.xlsm/.xlsx
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)