【求助】Excel: Mark/UnMark 儲存格



贊助商連結


jute
2004-02-10, 05:35 PM
最近在 Excel 寫了個巨集, 就是按下 Ctrl-M 後, 整列儲存格會變成黃色, 然後再按一次就會變成無色 (xlNone). 這樣我就隨時可以知道自己正在哪一列輸入資料, 不會打錯格.
不過這有個問題, 就是整個 worksheet 的儲存格都必須是無色, 否則 Ctrl-M 按兩次, 本來是什麼顏色的也會被變成無色...

想請教的是, 在不知道資料範圍究竟多廣 (含資料的的最後一行在哪) 的情況下, 如何在整列標示為黃色後再按一次 Ctrl-M 就會恢復為原來的顏色? 雖然我是可以利用 array 儲存原來的顏色值再用 For loop 去搞定, 不過不知道要查到哪一行才算最後一行. 有辦法嗎?

原碼如下:

Sub Mark()
On Error Resume Next
Dim r As Long, c As Long
With ActiveCell
r = .Row
c = .Column
End With
ActiveCell.EntireColumn.Select
With Selection
.Interior.ColorIndex = IIf(.Interior.ColorIndex <> xlNone, xlNone, 36)
End With
Cells(r, c).Select
End Sub

贊助商連結


leonchou
2004-02-10, 11:12 PM
一定要 Ctrl-M 嗎?
讓它 auto-highlight 是不是較方便.

這個用"格式化條件"來做比較方便, 但如果
原來自己就有設格式化條件, 那就要再想辦法..


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
[jute].FormatConditions.Delete
Target.EntireRow.Name = "jute"
With [jute].FormatConditions '條件格式化
.Delete
.Add xlExpression, , "TRUE" '第條件(一)內公式為
.Item(1).Interior.ColorIndex = 36 '等於FormatConditions(1)
End With
End Sub
這個 Worksheet Event 要放在工作表模組裡.

See also :
http://www.excelhelp.net/cgi-bin/forum/topic.cgi?forum=8&topic=2245
http://www.pczone.com.tw/showthread.php?t=117218

jute
2004-02-10, 11:47 PM
再次感謝 Leon 兄, 明天回公司我會試試看...
(雖然還不知道條件格式化是什麼, 但我想 online help 應該會有:) )

我會用 Ctrl-M 是因為公司裡不是所有 worksheet 都會用到這功能, 是我突發奇想自己發明的, 雖然大部份使用者都說有此功能很方便, 但顏色復原方面就...

對了另外還有個問題:
在 Excel 裡若要設定巨集的快速鍵, 一般只能用 Ctrl-(Shift)-英文字母
有沒有什麼辦法可以設定為其它的 (例: Ctrl-Alt-F12 或 Shift-Alt-9)?

leonchou
2004-02-11, 01:52 AM
Worksheet Event 基本上只適用所屬的工作表,
也可改寫為適用該活頁簿的全部或指定工作表,
因此不用擔心作用對象的問題。

以標準功能而言,設定巨集的快速鍵只有 Ctrl-字母 和 Ctrl-Shit-字母 兩種.
不過也可以自行寫程式,利用 Application.Onkey 方法來指定想要的快速鍵。
但 Onkey 要小心使用,以免影響原有快速鍵或造成其他不可預期的問題。

jute
2004-02-11, 11:48 AM
謝謝 Leon 兄, 事情已圓滿解決。
現在我把它寫成了兩個版本, 一個放在 Workbook OnSheetSelectionChange, 另一個放在 module 裡還是用原來的 Ctrl-M (可以只在想要用的時候用)
(原來我又把問題想得太複雜了!:D )