[請問] 請問EXCEL巨集的含意

看板Office作者 (陽光無聊男子)時間15年前 (2011/01/02 20:03), 編輯推噓2(2042)
留言44則, 1人參與, 最新討論串1/1
※ [本文轉錄自 ask 看板 #1D86c6bV ] 作者: Houcc (陽光無聊男子) 看板: ask 標題: [請問] 請問EXCEL巨集的含意 時間: Sun Jan 2 20:03:15 2011 內容如下 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count <> 1 Then Exit Sub If Intersect([A1:D1], Target) Is Nothing Then Exit Sub Dim rng As Range r = [A65536].End(3).Row c = Target.Column mycolor = Target.Font.ColorIndex Set rng = Range("A2:D" & r) If mycolor = 1 Then rng.Sort key1:=Cells(2, c), Order1:=xlAscending Target.Font.ColorIndex = 56 Else rng.Sort key1:=Cells(2, c), Order1:=xlDescending Target.Font.ColorIndex = 1 End If [D1].Select End Sub 這是一個選單巨集 請高手幫我解釋一下 各個英文縮寫代表什麼意思? 這樣寫會有什麼影響... 謝謝! -- ▁▂▁ ├┤ ◤ ╮ ▊◤ ▁▂▁ ⊙ ︵ ──◆ 巛◆ ╰╯ ) ▊◣ ▇▆▅▄ ◆██████▁ ⊙ ︶ ▇▆▅▆ ◣ ╯ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 221.169.204.126 -- ▁▂▁ ├┤ ◤ ╮ ▊◤ ▁▂▁ ⊙ ︵ ──◆ 巛◆ ╰╯ ) ▊◣ ▇▆▅▄ ◆██████▁ ⊙ ︶ ▇▆▅▆ ◣ ╯ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 221.169.204.126

01/04 18:16, , 1F
不太清楚為什麼最後是去停在D1,而不是停在A1/B1/C1/D1以外
01/04 18:16, 1F

01/04 18:16, , 2F
的區域,ex: [E1].Select 停在E1
01/04 18:16, 2F

01/04 18:18, , 3F
我沒有學過vba,所以我是用一個蘿蔔一個坑的方式來看的..
01/04 18:18, 3F

01/04 18:18, , 4F
以下不負責
01/04 18:18, 4F

01/04 18:19, , 5F
這段程式碼的用意,是資料在ABCD欄內,而每欄的第一列是標題
01/04 18:19, 5F

01/04 18:21, , 6F
分別為A1/B1/C1/D1,用意是當我點選A1,A2:Dn的資料,用欄A
01/04 18:21, 6F

01/04 18:23, , 7F
來遞增/減排序,再次點選A1則遞減/增排序,遞增、遞減反覆排
01/04 18:23, 7F

01/04 18:24, , 8F
序,B1/C1/D1一樣的意思,以欄B/C/D的遞增/遞減來排序A2:Dn
01/04 18:24, 8F

01/04 18:24, , 9F
其中Dn的n,因為資料列可能有所增減,所以他用了
01/04 18:24, 9F

01/04 18:25, , 10F
r = [A65536].End(3).Row ,意思是從65536列往上開始找資料
01/04 18:25, 10F

01/04 18:26, , 11F
,從下往上找到第一個資料的列號,就是資料的最後一列,也就
01/04 18:26, 11F

01/04 18:27, , 12F
表示資料的筆數
01/04 18:27, 12F

01/04 18:28, , 13F
c = Target.Column ,選取的儲存格的欄是第?欄,選A1是第一
01/04 18:28, 13F

01/04 18:28, , 14F
欄,c就是1,選c1是第3欄,c就是3
01/04 18:28, 14F

01/04 18:29, , 15F
mycolor = Target.Font.ColorIndex 判斷所選的儲存格字型的
01/04 18:29, 15F

01/04 18:30, , 16F
顏色是幾號?
01/04 18:30, 16F


01/04 18:31, , 18F
excel預設字型的顏色是黑色 ColorIndex=1
01/04 18:31, 18F

01/04 18:32, , 19F
寫程式的人,利用ColorIndex1(黑色) ColorIndex56(灰黑色)
01/04 18:32, 19F

01/04 18:34, , 20F
的顏色很像,所以用了 if 儲存格點下去 字型的顏色是黑(1)
01/04 18:34, 20F

01/04 18:35, , 21F
那A2:Dn的儲存格,就以欄(A或B或C),來遞增xlAscending排序
01/04 18:35, 21F

01/04 18:36, , 22F
點完之後,把那格顏色改Target.Font.ColorIndex= 56(灰黑色)
01/04 18:36, 22F

01/04 18:37, , 23F
如果不改灰黑色(56),那就只有第一次點A1/B1/C1/D1有反應
01/04 18:37, 23F

01/04 18:37, , 24F
之後再點會沒反應的
01/04 18:37, 24F

01/04 18:38, , 25F
所以我第1次點完A1,A1的字型顏色,其實已經變灰黑色(56)了
01/04 18:38, 25F

01/04 18:39, , 26F
第2次再點,程式碼就會跑else下面程式碼 (因為56 不等於 1)
01/04 18:39, 26F

01/04 18:40, , 27F
Private Sub Worksh ... End sub 是某表某一個事件的寫法
01/04 18:40, 27F

01/04 18:41, , 28F
當被觸發時,就會自動執行,所以我們不用去特別按執行或快速
01/04 18:41, 28F

01/04 18:41, , 29F
鍵,才會執行這段程式碼
01/04 18:41, 29F

01/04 18:42, , 30F
第2、3行的IF在講,如果選的儲存格不是一格,那就不用再下去
01/04 18:42, 30F

01/04 18:43, , 31F
如果不是選在A1/B1/C1/D1的儲存格,那也不用再跑下去
01/04 18:43, 31F

01/04 18:44, , 32F
如果說要應用的話... 比如我的資料標題其實是在 C1:F1
01/04 18:44, 32F

01/04 18:45, , 33F
資料內容在 C2:Fn ,那就把 A1:D1 改成 C1:F1
01/04 18:45, 33F

01/04 18:46, , 34F
Range("A2:D" & r) 改 Range("C2:F" & r) 就可以了
01/04 18:46, 34F

01/04 18:46, , 35F
如果我資料的最後一行,可能是總計或什麼的,並不需要跟著排
01/04 18:46, 35F

01/04 18:47, , 36F
序,那r = [A65536].End(3).Row - 1 減個1,最後一列就不排
01/04 18:47, 36F

01/04 18:48, , 37F
如果我一開始的資料標題不是黑色(ColorIndex=1),而是紅色,
01/04 18:48, 37F

01/04 18:49, , 38F
If mycolor = 1改3(紅色)
01/04 18:49, 38F

01/04 18:49, , 39F
Target.Font.ColorIndex = 1改3(紅色)
01/04 18:49, 39F

01/04 18:51, , 40F
對了,因為原程式點了A1/B1/C1需要跳到D1 (我覺得要改別的?)
01/04 18:51, 40F

01/04 18:52, , 41F
所以直接點A1不能改標題,要圈選含A1二個以上的儲存格才可改
01/04 18:52, 41F

01/04 18:52, , 42F
你可以試著把第一列的字型放大,可以看的出來字型顏色,每點
01/04 18:52, 42F

01/04 18:53, , 43F
一次,顏色就會換一次,資料也跟著遞增/減排序
01/04 18:53, 43F

01/04 18:53, , 44F
以上。
01/04 18:53, 44F
文章代碼(AID): #1D86cMoh (Office)
文章代碼(AID): #1D86cMoh (Office)