[[20210120111820]] 『セル内容に変更があったらアドインのツールバーボ』(しのみや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セル内容に変更があったらアドインのツールバーボタンを変更したい』(しのみや)

 こんなことはできるのかな?といったことがありますので、
 教えて頂けると助かります。

 アドインを使って、ツールバーにボタンを置いていまして、
 1と電球のボタンを置いています。
 現在は、1のボタンを押すと電球が付くようになっております。

 【現在の記述】
 (ThisWorkbook)
 Option Explicit

 Private Sub Workbook_AddinInstall()

     Dim myBar      As Office.CommandBar
     Dim myButton   As CommandBarButton
     Dim myBar_Name As String

     'パレット ボタン
     myBar_Name = "パレット"
     On Error Resume Next
     Application.CommandBars(myBar_Name).Delete
     On Error GoTo 0
     Set myBar = Application.CommandBars.Add(Name:=myBar_Name)
     Set myButton = myBar.Controls.Add(Type:=msoControlButton)
     With myButton
         .Caption = "RGB(0,0,0)"
         .OnAction = "'Button_Click " & .Caption & " '"
         .FaceId = 71
     End With
     myBar.Visible = True

     Call Btn_電球("パレット2", "OFF")

 End Sub

 Private Sub Workbook_AddinUninstall()

    On Error Resume Next
    With Application
        .CommandBars("パレット").Delete
        .CommandBars("パレット2").Delete
    End With
    On Error GoTo 0

 End Sub

 (Module1)
 Option Explicit

 Sub Button_Click(StrRGB As String) 
    Call Btn_電球("パレット2", "ON")    
 End Sub

 Sub Btn_動作() 
    Call Btn_電球("パレット2", "OFF")    
 End Sub

 Sub Btn_電球(BarName As String, 選択肢 As Variant)

    Dim myBar As Office.CommandBar
    On Error Resume Next
    Application.CommandBars(BarName).Delete
    On Error GoTo 0
    Set myBar = Application.CommandBars.Add(Name:=BarName)
    With myBar.Controls.Add(msoControlButton, 59)
        .Caption = 選択肢
        .Style = msoButtonIconAndCaption
        If 選択肢 = "OFF" Then
            .FaceId = 342
            .Enabled = False
        Else
            .FaceId = 343
            .OnAction = "Btn_動作"
        End If
    End With
    myBar.Visible = True

 End Sub

 【やりたいこと】
 セル内容に変更があったら、電球が付くようにしたい。

 【試したこと】
 Workbook_SheetChange を使うのかなと思って試してみております。

 ただ、アドインファイルのThisWorkBookに
 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     MsgBox "変更あり" ’電球が付く動作を追加したい
 End Sub
 を置いたとしても、アドインファイルのThisWorkBookでの動作ですので
 必要な結果が得られていません。

 何か良い方法はあるのでしょうか。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 ApplicationのSheetChangeイベントを取得する必要があります。

 '--- アドインのThisworkBook モジュール
    Private WithEvents xlApp As Application ' モジュールレベルで定義

    Private Sub Workbook_Open()
        Set xlApp = Application              ' 開いた時にSET
    End Sub

    Private Sub xlApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        MsgBox "変更されました" & Target.Address(external:=True)
    End Sub
(´・ω・`) 2021/01/20(水) 11:32

 特定のブックだけに仕掛けるなら、もう一工夫必要です。
(´・ω・`) 2021/01/20(水) 11:37

 必要な動作ができるようになりました。
 ありがとうございます。

 お時間頂いて申し訳ないのですが、
 今後のために、特定のブックだけの場合も教えて頂けませんか?
(しのみや) 2021/01/20(水) 14:11

 ブックのイベンを取得するようにします。
 対象ブックなのかどうか判断する方法、SETするタイミンが課題です。
 下は一例です。

    Private WithEvents xlApp As Application
    Private WithEvents xlWB As Workbook

    Private Sub Workbook_Open()
       Set alapp = Application
    End Sub

    Private Sub xlApp_NewWorkbook(ByVal Wb As Workbook)
        Set xlWB = Wb     ' 新規ブックが追加されたら、最新ブックが対象になる
    End Sub

    Private Sub xlWB_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        MsgBox "Chage! " & Target.Address(external:=True)
    End Sub
(´・ω・`) 2021/01/20(水) 14:25

 自分で調べていてはたどり着かない記述でした…
 頭に入れておきたいと思います。
 ありがとうございます。
(しのみや) 2021/01/21(木) 09:11

 もうひとつ教えてください。

 教えていただいたApplicationのSheetChangeイベントを使って
 「保存する前にメッセージを出す」をしているのですが、
 以下では動作しませんでした。
 使い方が間違ってますでしょうか…

 Private WithEvents xlApp As Application

 Private Sub Workbook_Open()
  Set xlApp = Application
 End Sub

 Private Sub xlApp_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  MsgBox "変更あり"
 End Sub

 シートがアクティブでなくなった場合はどうかと試してみたところ、
 こちらはOKのようです。
 Private Sub xlApp_SheetDeactivate(ByVal Sh As Object)
  MsgBox "変更あり"
 End Sub
(しのみや) 2021/01/27(水) 17:05

 イベントプロシジャは、定めれたとおりに宣言しないと動きません
 > Private Sub xlApp_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 これ、どっからもってきました?

 WithEventsつけて変数を宣言してれば、コードウインドウの上部のコンボボックスで
 宣言したオブジェクトとイベントが選択できるようになってるはずです。
 選択すれば、正しいプロシジャの宣言文が自動で挿入されますよね
   
(´・ω・`) 2021/01/27(水) 17:31

 ありがとうございます。
 ネットで調べていろいろ試しているうちに混乱してるようです(汗)
 今は検証できる環境がないので、後程確認します。
(しのみや) 2021/01/27(水) 19:50

 オブジェクトとイベントが選択でき、解決できました。
 また教えて頂けると助かります。
 ありがとうございました。
(しのみや) 2021/02/01(月) 12:27

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.