上次提到 CommandBars("Cell") 有兩個,但要如何區別這兩個,其實有方法
以Xp來說
CommandBars(33) '代表 一般模式的 CommandBars("Cell")
CommandBars(36) '代表 分頁預覽模式的 CommandBars("Cell")
早期我是用這個方式處理的,在Xp用沒問題,但在2000及97以後的版本
它的 Index 值都是不同的
所以如果程式碼是要給其他不同平台的使用者使用,就之能用我之前的方法了
如果要 "讓點右鍵加入的選單只在分頁預覽生效" 我只有一個辦法,那就是以CommandBars("Cell") 出現的順序決定,也就是第一個是一般模式而第二個就是分頁預覽模式
所以我只取第二個CommandBars("Cell") 作處理,程式如下
Sub AddIT()
Dim ShN
Dim CN
Dim n As Integer, i As Integer, w As Integer
Dim cb As CommandBar
ShN = Array("A1-A10", "A11-A20", "A21-A30", "A31-A40", "A41-A50", "A51-A60", "A61", "B1-B3")
CN = Array("A", "B")
i = 0
For Each cb In Application.CommandBars
If cb.Type = msoBarTypePopup And = "Cell" Then
i = i + 1
If i = 2 Then
With cb
With .Controls
i = 0: w = 1 For n = 0 To UBound(ShN)
Set MyShBut = .Add(Type:=msoControlPopup, Temporary:=True)
With MyShBut
.Caption = ShN(n)
With .Controls
Do
Set JAMPBUT = .Add(Type:=msoControlButton, Temporary:=True)
With JAMPBUT
.Caption = CN(i) & w
'.OnAction = "選取" & CN(i) & w
End With
If w Mod 10 = 0 Or w = 61 Or (w = 3 And i = 1) Then w = w + 1: Exit Do
w = w + 1
Loop
End With
End With
If w = 62 Or (i = 1 And w = 4) Then
i = i + 1
w = 1
End If
If i = 2 Then Exit For
Next End With
End With
End If
End If
Next cb
End Sub
Sub DeleteMe()
Dim cmb As CommandBarControl
i = 0
For Each cb In Application.CommandBars
If cb.Type = msoBarTypePopup And = "Cell" Then
i = i + 1
If i = 2 Then
For Each cmb In cb.Controls
cmb.Delete
Next
End If
End If
Next cb
End Sub
















