|
NH さん、おはようございます。
>考えたのがシート2〜シート6で作業しているときにツールバーにボタンを
>貼り付けてそれをクリックしたらシート1がアクティブになる様なことを
>すれば良いと思うのですが、そのやり方を教えていただけ無いでしょうか。
新しいバーを作って、シート間を移動するようにしました。
下のコードを全てThisworkbookに書いて、一旦保存して終了してから開いてみてください。
'ここから////////////////////////////////////////////////
Const cbn As String = "■シート移動■" 'コマンドバーの名前
Private Sub Workbook_Activate()
'このブックがアクティブなときは使用可
On Error Resume Next
Application.CommandBars(cbn).Enabled = True
On Error GoTo 0
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'ブックを閉じるとき削除
On Error Resume Next
Application.CommandBars(cbn).Delete
On Error GoTo 0
End Sub
Private Sub Workbook_Deactivate()
'違うブックがアクティブなときは使用不可
On Error Resume Next
Application.CommandBars(cbn).Enabled = False
On Error GoTo 0
End Sub
Private Sub Workbook_Open()
Dim cb1 As CommandBar, cbb As CommandBarButton, ws As Worksheet, Idx%
'既にあれば削除
On Error Resume Next
Application.CommandBars(cbn).Delete
On Error GoTo 0
'
Idx% = 0
Set cb1 = Application.CommandBars.Add(Name:=cbn)
For Each ws In ThisWorkbook.Worksheets
Idx% = Idx% + 1
Set cbb = cb1.Controls.Add(Type:=msoControlButton)
With cbb
.Style = msoButtonCaption
.Caption = ws.Name
.BeginGroup = True
.OnAction = ThisWorkbook.Name & "!Thisworkbook.ShtSel"
End With
Next
'現在表示しているシートのコマンドを無効
CBC_Edit ActiveSheet.Name, False
cb1.Visible = True
Set cb1 = Nothing: Set cbb = Nothing
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
CBC_Edit Sh.Name, False
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
CBC_Edit Sh.Name, True
End Sub
Sub CBC_Edit(wsn As String, tf As Boolean)
'コマンドの使用可/不可の切替
On Error Resume Next
Application.CommandBars(cbn).Controls(wsn).Enabled = tf
On Error GoTo 0
End Sub
Private Sub ShtSel()
'コマンドクリック時の実働部分
Dim cbc As CommandBarControl
Set cbc = Application.CommandBars.ActionControl
If Not cbc Is Nothing Then _
ThisWorkbook.Worksheets(cbc.Caption).Activate _
Else _
MsgBox "直接実行しても何もおきません", vbInformation
End Sub
'ここまで////////////////////////////////////////////////
こんな感じです。
|
|