[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『リボンに設定されたアイコンをマクロで変更する』(ゼブラ)
個人用マクロに「Alt押しながら参照元セルをクリックした場合参照先にジャンプする」マクロの作成をしようと考えています
この機能が有効になっているかどうかのステータス表示をそのマクロが割り当てられたリボンアイコンの変更で行おうと考えているのですが
クリックしたリボンアイコンの取得方法が分かりません
どなたか取得方法と変更方法わかる方おられませんか?
< 使用 Excel:Office365、使用 OS:Windows10 >
あれもこれも言われても全部出来るか自信ないが...^^;
標準モジュールに入れて、Alt_Key 押してみてください。 実行したら、最後はEscキーで終了してくださいね。
Option Explicit
#If Win64 Then Declare PtrSafe Function _ GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer #Else Declare Function _ GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer #End If
Function EscPress() As Integer Const KEY_PRESSED = -32768 EscPress = (GetAsyncKeyState(vbKeyEscape) And KEY_PRESSED) = KEY_PRESSED End Function Function AltPress() As Integer Const KEY_PRESSED = -32768 AltPress = (GetAsyncKeyState(vbKeyMenu) And KEY_PRESSED) = KEY_PRESSED End Function
Sub LoopStart()
Dim Alt_Key As Integer
MsgBox "キー入力ループ開始" Do If EscPress = True Then Exit Do DoEvents
If AltPress = True Then Alt_Key = AltPress + 19 ' 実数判定値 = 18 Debug.Print AltPress + 19 MsgBox "Alt キーが押されました'" End If Loop MsgBox "キー入力ループから抜け出しました" End Sub
thom さん こんにちは...お世話になりま〜す。 お考えをお借りしてま〜す。^^;
https://thom.hateblo.jp/entry/2019/03/10/125326
LIC さん すいませ〜ん。
いつも参考にさせていただいておりま〜す。 ありがとうございます。
https://liclog.net/getasynckeystate-function-vba-macro-catia-v5/
(ゼブラ)さんへ
後の操作は、只今検討中なのでここまで出来たらご連絡ください。
(あみな) 2021/08/31(火) 16:54
あなみさんのはジャンプするイベントの設定方法ですかね
はじめは各シートにWithEventsでイベント設定すればいいやと思ってましたが
ほかの処理しないならそっちでもいいかもですね
(ゼブラ) 2021/08/31(火) 17:06
普通に↓のこれとWithEventsでいいのかもしれませんが
SendKeys "%"
最初だから いろんな方法を検討してみようかなと
リボンはちょっとよ〜わかりません こんなかんじ?
With Application
.DisplayFormulaBar = False .ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)" .ShowDevTools = False End With
With Application
.DisplayFormulaBar = True .ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)" .ShowDevTools = True End With
頑張りましょう^^
(あみな) 2021/08/31(火) 17:22
たたき台ができました。
リボンアイコンについては配慮はしていません。 簡単に言うと、Alt_Keyを押さないとなにもできません。
では流れです。
1.Workbook_Open
WithEvents 設定
2.コマンドボタンクリック(フォームコントロール)
LoopStart
3.BeforeRightClick
UserForm を開く オブジェクト名 ( OperationForm )
4.Altキーを押します。
UserForm の Label1.Caption = "0" 初期値が、Alt_Key ' 実数判定値 = 18 に切り替わって判定します。
5.参照先にジャンプする
>個人用マクロに「Alt押しながら参照元セルをクリックした場合参照先にジャンプする」 で詳細が記載されてないので選択型にしました。
OptionButton を3個設置
6.OptionButton のいずれかを選択する
好きなシートに飛んでってください。(笑)
※OptionButton と Altキーが押されてないと、 MsgBox にて案内がでます。
7.通常動作の場合は、Escキーを解除
どうしようか検討中
▼ThisWorkBookモジュール
Private Sub Workbook_Open() Call ShEv_EventGet End Sub
▼標準モジュール宣言部
'----- Class Event ----- Public ShEv(1 To 3) As EventGet
▼標準モジュール
Sub OperationFormUp_Click() OperationForm.Show vbModeless End Sub
Sub ShEv_EventGet() Dim i As Long For i = 1 To 3 Set ShEv(i) = New EventGet Set ShEv(i).TargetSheet = ThisWorkbook.Sheets(i) Next End Sub
▼ユーザーフォームモジュール
Private Sub UserForm_Initialize() Label1.Caption = "0" End Sub
Private Sub CommandButton1_Click()
Dim i As Long Dim OptionAry As Variant Dim Jump As Boolean OptionAry = Array(OptionButton1, OptionButton2, OptionButton3) Jump = False
For i = 0 To UBound(OptionAry) If OptionAry(i).Value Then Jump = True If Jump And Label1.Caption = 18 = True Then With Application Select Case i Case 0 .Goto Workbooks("実験.xlsm").Sheets(1).Range("A1"), True Case 1 .Goto Workbooks("実験.xlsm").Sheets(2).Range("A1"), True Case 2 .Goto Workbooks("実験.xlsm").Sheets(3).Range("A1"), True End Select End With Else MsgBox " その操作は禁止されています。マクロ作成者に聞いてください。" SendKeys "{ESCAPE}" Application.Quit End If Exit For End If Next
End Sub
▼クラスモジュール
Private WithEvents TargetSh As Worksheet Public Property Set TargetSheet(ByVal vObject As Worksheet) Set TargetSh = vObject End Property Private Sub TargetSh_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim RetMsg As VbMsgBoxResult Cancel = True
If Not Intersect(Target, Range("A1:H100")) Is Nothing Then If UserForms.Count = 0 Then OperationForm.Show vbModeless Else RetMsg = MsgBox(" 既に、フォームは開かれています。キャンセルするとフォームを閉じます。" & vbCrLf & _ " OKボタンを押すと、継続してフォームを利用できます。", vbOKCancel + vbInformation, Title:="INFOMATION") End If Select Case RetMsg Case vbOK Case vbCancel RetMsg = MsgBox(" 開かれているフォームを閉じます。", _ vbOKOnly + vbInformation, Title:="INFOMATION") For Each OperationForm In UserForms Unload OperationForm Next End Select End If End Sub
>この機能が有効になっているかどうかのステータス表示をそのマクロが割り当てられたリボンアイコンの変更で行おうと考えているのですが クリックしたリボンアイコンの取得方法が分かりません
>どなたか取得方法と変更方法わかる方おられませんか?
(ゼブラ)さんが、調べた有効な方法を記載した URL を貼り付けしといてください。
明日、閲覧してみます。
(あみな) 2021/08/31(火) 23:05
リボンカスタマイズについては参考さんのURLやQiitaでcustomUIのことを調べれば必要最低限のことはわかると思います
Excelブックを分解したりしないとなのでここでは書きません(めんどくさい)
customUIの要素や属性のリファレンスがある場所を知っていればそこに誘導したりするんですが...
(ゼブラ) 2021/09/01(水) 08:41
>クリックしたリボンアイコンの取得方法
何のアイコンなのかをボタンから直接取得する方法は存じませんが、 使用するアイコンイメージは決まってる訳ですよね? (今回のケースだとOn/Offの2種類?) PictureだったりFaceIdだったりImageMso文字列だったりbmpファイルだったり...
ボタンから取るんじゃなくて、別途、広域変数にでも状態を覚えさせておけば それで判断して変更できませんか?
Private btnState As Boolean に状態を覚えさせる
GetImageコールバックの中で ・該当ボタンの引数imageにbtnStateの状態に応じた値(ImageMso文字列またはIPictureDisp型)を代入 OnActionの中で ・目的のマクロを実行 ・btnStateを変更してInvalidateControlを呼出す(→GetImageコールバックが発動)
って感じで。
(白茶) 2021/09/01(水) 10:23
>ステータス表示をそのマクロが割り当てられたリボンアイコンの変更で行おう リボンのトグルボタンを使うのではだめでしょうか
>Alt押しながら参照元セルをクリック Alt+セルクリックだと「リサーチ」の機能が立ち上がって、SelectionChangeが発生しません リサーチをOFFにしてイベントをつかむ方法はなにか考えてますか
Alt+セルクリックではなくて、リボンのボタンクリックで Application.Goto ActiveCell.DirectPrecedents すればいいと思いますが、Alt+クリックにこだわる必要ありますか?
DirectPrecedentsが複数のセル領域の場合、どこのセルにジャンプしますか? (´・ω・`) 2021/09/01(水) 12:01
リボンのトグルボタンを使うのではだめでしょうか トルグでいいんですけどリボンのユーザー設定からトルグぽいのがなかったんで
Alt+セルクリックだと「リサーチ」の機能が立ち上がって、SelectionChangeが発生しません それにぶち当たってもうAlt押しながらじゃなくてもいいかなと思い始めてます
誤クリックいやですけど
リボンのボタンクリックで 導線の問題ですね、いちいちリボンまでマウス運ぶのがめんどくさい
DirectPrecedentsが複数のセル領域の場合、どこのセルにジャンプしますか? 考えてなかったですね・・・スルーするかcells(1)にでも飛びますか
そしていろいろやってたんですけどPERSONAL.XLSBはcustomUI設定できないのかな・・・
他ではうまくいくのにこいつだけエラー出る・・・
そしてcustomUIはブックの設定だからもしやPERSONAL.XLSBに設定したところでUIのボタン使えないのでは・・・
(ゼブラ) 2021/09/01(水) 12:24
トグルボタンあるようですよ http://suyamasoft.blue.coocan.jp/Ribbon/ReverseResolution/toggleButton/index.html
>そしていろいろやってたんですけどPERSONAL.XLSBはcustomUI設定できないのかな 私も試しましたが、できているように思います (´・ω・`) 2021/09/01(水) 12:43
(てか今更ですけど、ショートカットの『Ctrl + ]』『Ctrl + [』で充分なんじゃないかって気がしてました...)
(白茶) 2021/09/01(水) 13:00
つかったことなかったので知らなかったですが、 ショットートカットあるんですね。 (´・ω・`) 2021/09/01(水) 13:19
Ctrl + [ ・・・選択範囲の数式が直接参照するセルを選択 Ctrl + ] ・・・選択範囲のセルを直接参照する数式が入力されたセルを選択
Ctrl + Shift + [ ・・・選択範囲の数式が直接または間接的に参照するすべてのセルを選択 Ctrl + Shift + ] ・・・選択範囲のセルを直接または間接的に参照する数式が入力されたすべてのセルを選択
なんだそうですよ。 (白茶) 2021/09/01(水) 13:23
>私も試しましたが、できているように思います
まじっすか
いろんな文字コード試しましたけどファイルが破損するんですよね・・・
ツール入れられないんでやりかたはほぼ↓
https://thom.hateblo.jp/entry/2018/06/13/043244
>(てか今更ですけど、ショートカットの『Ctrl + ]』『Ctrl + [』で充分なんじゃないかって気がしてました...)
あぁもうこれ最高ですね・・・ctrl+[の物理ボタンが欲しいくらいです・・・
(ゼブラ) 2021/09/01(水) 13:26
Application.Goto "Module1.プロシージャ名"
こんなかんじではないのか? ^^;
(あみな) 2021/09/01(水) 13:54
>他ではうまくいくのにこいつだけエラー出る・・・ XLSB形式なければうまくいくんですか? >いろんな文字コード試しましたけどファイルが破損するんですよね・・・
XLSMで作ってうまくいってからXLSB形式で保存しなおしたらどうなりますか? (´・ω・`) 2021/09/01(水) 14:48
>cutomUIで設定できるのはわかるんですがコマンドを設定するボタン一覧にないんであれこれ これはいったい何をしようとしてるのか理解できないのですが (´・ω・`) 2021/09/01(水) 14:56
[数式]タブの[ワークシート分析]グループの後にカスタムグループを追加してます。 トグルボタンのイメージは暫定で、ニコちゃん(HappyFace)です トグルボタンをONにすると、ワークシートの右クリックでジャンプします。 (右クリックメニューはCancelしてます)
--------- customUI14.xml --------------- <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon> <tabs> <tab idMso="TabFormulas"> <group id="customGroup" label="Custom Tools" insertAfterMso="GroupFormulaAuditing" autoScale="true"> <toggleButton id="ジャンプ" label="参照元セルにジャンプ" onAction="SW_JumptoDependence" size="large" imageMso="HappyFace"/> </group> </tab> </tabs> </ribbon> </customUI>
---------- 標準モジュール ------------- Private Sub SW_JumptoDependence(control As IRibbonControl, pressed As Boolean) ThisWorkbook.SW_Jump = pressed End Sub
---------- ThisWorkbookモジュール ------------- Public SW_Jump As Boolean
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) If Not SW_Jump Then Exit Sub
Cancel = True Application.EnableEvents = False On Error Resume Next Application.Goto Target.DirectDependents On Error GoTo 0 Application.EnableEvents = True
End Sub (´・ω・`) 2021/09/01(水) 15:45
他のブックで使いたいんですよね。 ならこうかな ThiwWorkBookの isAddin プロパティはTrueにしてください。
---------- ThisWorkbookモジュール ------------- Private WithEvents App As Application Public SW_Jump As Boolean
Private Sub Workbook_Open() Set App = Application End Sub
Private Sub App_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) If Not SW_Jump Then Exit Sub
Cancel = True Application.EnableEvents = False On Error Resume Next Application.Goto Target.DirectDependents On Error GoTo 0 Application.EnableEvents = True
End Sub (´・ω・`) 2021/09/01(水) 15:51
>XLSB形式なければうまくいくんですか? %USERPROFILE%\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB ↑は上手くいかなくてデスクトップに新たに作ったりしたxlsxやxlsmならうまくいきますね このファイルにこだわらなきゃいいだけですがシート全部非表示にする方法調べますか・・・
>XLSMで作ってうまくいってからXLSB形式で保存しなおしたらどうなりますか? PERSONAL.XLSBはファイルが破損して保存できないですね 他は可能です
>これはいったい何をしようとしてるのか理解できないのですが もともと↓の手順でボタンにマクロ割り当ててそのボタンにステータス表示させられたらなぁと思ってたんです http://www4.synapse.ne.jp/yone/excel2013/excel2013_macro_ribbon.html#command
下のソースはこれから試してみますありがとうございます
(ゼブラ) 2021/09/01(水) 17:27
>シート全部非表示にする方法 アドイン(XLAM)にすればいいのでは (´・ω・`) 2021/09/01(水) 20:02
なるべく1ファイルにまとめたかったですけどしたないですね・・・
ctrl+]か2ファイルで行きます
<ribbon> <tabs> <tab idQ="nsShared:tabShared01" label="Sample"> <group idQ="nsShared:grpShared" label="ユーザー補助"> <toggleButton id="ジャンプ" label="参照元セルにジャンプ" onAction="SW_JumptoDependence" size="large" imageMso="HappyFace"/> </group> </tab> </tabs> </ribbon> </customUI> (ゼブラ) 2021/09/02(木) 09:31
2007までは、customUI.xml 2010以降は、customUI14.xml です。 中身もちょっと違います。
>1ファイルにまとめたかったですけどしたないですね・・・ なぜ2ファイルになるんですか? (´・ω・`) 2021/09/02(木) 09:45
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.