[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル内容に変更があったらアドインのツールバーボタンを変更したい』(しのみや)
こんなことはできるのかな?といったことがありますので、 教えて頂けると助かります。
アドインを使って、ツールバーにボタンを置いていまして、 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/02/01(月) 12:27
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.