Board logo

標題: 定義名稱 Print_Area 無法用Marco刪除 [打印本頁]

作者: MRSA    時間: 2010-11-23 20:44     標題: 定義名稱 Print_Area 無法用Marco刪除

小弟有一檔案是從Excel 97 一直使用到Excel 2003.
這檔案內含有多個有效及無效的定義名稱 (Name)
目前作業系統及文書處理系統是Window 7及Excel 2007
今日我以Excel 2007建立一個Marco要將舊版本的Excel檔內的所有定義名稱都刪除. 語法如下:

Sub Clearnames()
Dim nas As Name
For Each nas In ActiveWorkBook.Names
nas.Delete
Next
End Sub

結果,小弟發現,有一個屬於Workbook的定義名稱,名為Print_Area, 還留在檔案裡,而且只能手動刪除.
這是怎麼回事? 我的語法應該沒錯吧.
是版本問題嗎?還是要用其它方式刪除.
我查詢過許多資料, 所使用的語法都與我所列的相同或相似. 而我套用別人的語法後,問題仍在.
懇請大家幫忙處理. 謝謝.
(檔案有上千個,我可沒時間一個一個開檔案手動刪除)
作者: oobird    時間: 2010-11-23 21:33

Sub Clearnames()
On Error Resume Next
For Each sh In ActiveWorkbook.Sheets
sh.PageSetup.PrintArea = ""
Next
End Sub

清除列印範圍
作者: HUNGCHILIN    時間: 2010-11-23 22:37

我刪了好幾年是可以
用這種試試看
ActiveWorkbook.Names(sht).Delete
作者: MRSA    時間: 2010-11-24 00:02

回復 2# oobird

試過版大的語法.
結果.定義名稱 Print_Area 仍然存在.
而且其 Refers To 的值也沒被改變. 這可以說是它根本沒被做任何修改或清除.

最後我只能用 Name Manager (Excel 2007的功能之一)來手動刪除.

很奇怪的情況,不是嗎?

我也試著使用錄製巨集的方式來刪除它. 也是沒用.
作者: oobird    時間: 2010-11-24 00:09

若該名稱已經發生錯誤,就要手動刪除了!
作者: MRSA    時間: 2010-11-24 00:34

本帖最後由 MRSA 於 2010-11-24 00:36 編輯

回復 5# oobird


每個定義名稱會對應到四個值, 1是參位位址(Refers To), 2是值(Value), 3是定義名稱的Scope (Scope), 4是註解(Comment)
版大所謂的定義名稱錯誤的意思是指以上四個值的哪一個.
我所困惑的是,我在檔案內有許多定義名稱, 很多都是 Value 或 Refers To  有錯誤的(#REF! 或錯誤的外部連結), 但是,許多定義名稱為Print_Area都能被刪除,偏偏就獨獨這個 Print_Area (Value是#REF!, Refers To是=#REF!, Scope是Workbook, Comment是空白)的定義名稱刪除不了.
是Excel 2010 (我也在Excel 2007試過,也有同樣問題) 本身的問題嗎?
作者: oobird    時間: 2010-11-24 10:35

看到#REF!, 就是發生錯誤了。
表示這個名稱已不成立,自然搜尋不到而要手工刪除!
作者: HUNGCHILIN    時間: 2010-11-24 23:19

本帖最後由 HUNGCHILIN 於 2010-11-24 23:21 編輯

回復 7# oobird

我測了一下壞掉連結的定義 可以用VBA刪
可能是那個檔比較奇怪,沒看到檔不知道
目前測都OK

步1.壞掉的定義
[attach]3751[/attach]
步2.VBA工具刪定義
[attach]3752[/attach]
步3.已刪除
[attach]3750[/attach]
作者: oobird    時間: 2010-11-25 09:04

想起以前曾做過這樣的測試,在自己電腦建立的名稱,遺失參照的錯誤後,在vba可以全部刪除。
相同的情形若是接收別人的,vba就不把那些錯誤的名稱當做名稱而報錯。系統緩存會記錄文件所的有操作,這就是老的文件顯得臃腫的原因,照理存在緩存中的東西應該跟著檔案跑的,我始終不能明白其中道理!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)