返回列表 上一主題 發帖

定義名稱 Print_Area 無法用Marco刪除

定義名稱 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, 還留在檔案裡,而且只能手動刪除.
這是怎麼回事? 我的語法應該沒錯吧.
是版本問題嗎?還是要用其它方式刪除.
我查詢過許多資料, 所使用的語法都與我所列的相同或相似. 而我套用別人的語法後,問題仍在.
懇請大家幫忙處理. 謝謝.
(檔案有上千個,我可沒時間一個一個開檔案手動刪除)

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

清除列印範圍

TOP

我刪了好幾年是可以
用這種試試看
ActiveWorkbook.Names(sht).Delete
Hung-Chi Lin/林宏吉
HUNGCHILIN/林宏吉的OFFICE專欄

TOP

回復 2# oobird

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

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

很奇怪的情況,不是嗎?

我也試著使用錄製巨集的方式來刪除它. 也是沒用.

TOP

若該名稱已經發生錯誤,就要手動刪除了!

TOP

本帖最後由 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試過,也有同樣問題) 本身的問題嗎?

TOP

看到#REF!, 就是發生錯誤了。
表示這個名稱已不成立,自然搜尋不到而要手工刪除!

TOP

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

回復 7# oobird

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

步1.壞掉的定義
2010-11-24 23-14-23.jpg
2010-11-24 23:20

步2.VBA工具刪定義
2010-11-24 23-14-52.jpg
2010-11-24 23:20

步3.已刪除
2010-11-24 23-15-31.jpg
2010-11-24 23:20
Hung-Chi Lin/林宏吉
HUNGCHILIN/林宏吉的OFFICE專欄

TOP

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

TOP

        靜思自在 : 【生命在呼吸間】佛陀說:「生命在呼吸間。」人無法管住自己的生命,更無法擋住死期,讓自己永住人間。既然生命去來這麼無常,我們更應該好好地愛惜它、利用它、充實它,讓這無常、寶貴的生命,散發它真善美的光輝,映照出生命真正的價值。
返回列表 上一主題