
いつもお世話になります
今、リボンにCheckBoxを二個並べてOprionButtonのように入り切りをしたいのですが
myRibbon.Invalidate でどうして二つ目のCheckBoxが消えてしまいます
原因が分からないので教えてください
(XML)
<?xml version="1.0" encoding="utf-8"?>
<customUI onLoad="Ribbon_onLoad" xmlns="http://schemas.microsoft.com/office/2009/07/cust … xmlns:nsShared="rbnShared">
<ribbon>
<tabs>
<tab idQ="nsShared:customTab1" label="公共アプリ-Civil">
<group idQ="nsShared:customGroup13" label="チェックボックステスト" autoScale="true" >
<checkBox id="MyChoice01" getPressed="checkBox002_getPressed" onAction="checkBox002_change" label="CheckBox1"/>
<checkBox id="MyChoice02" getPressed="checkBox002_getPressed" onAction="checkBox002_change" label="CheckBox2"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
(VBA)
Option Explicit
Public myRibbon As IRibbonUI
Public IsCheckBox201 As Boolean
Public IsCheckBox202 As Boolean
Sub Ribbon_onLoad(ribbon As IRibbonUI)
Set myRibbon = ribbon
End Sub
Sub CheckBox002_change(control As IRibbonControl, returnValue As Boolean)
Select Case control.ID
Case "MyChoice01"
IsCheckBox201 = returnValue
If IsCheckBox201 = True Then
IsCheckBox202 = False
Else
IsCheckBox202 = True
End If
Case "MyChoice02"
IsCheckBox202 = returnValue
If IsCheckBox202 = True Then
IsCheckBox201 = False
Else
IsCheckBox201 = True
End If
End Select
myRibbon.Invalidate ' リボンの描画を更新する
'myRibbon.InvalidateControl ("MyChoice01")
'myRibbon.InvalidateControl ("MyChoice02")
End Sub
Sub CheckBox002_getPressed(control As IRibbonControl, ByRef returnValue)
Select Case control.ID
Case "MyChoice01"
returnValue = IsCheckBox201
Case "MyChice02"
returnValue = IsCheckBox202
End Select
End Sub
以上、よろしくお願い申し上げます
No.1ベストアンサー
- 回答日時:
こんにちは、私が作ったもので似たようなものがありますのでコードを示します。
参考にされてください。ご質問の内容コードが正しいと仮定(検証してません)した場合、リボンのインスタンスが失われた時の現象かもしてません。
野暮用で離れますので、取り敢えずコード該当部分です。ご質問のコントロール名にしていませんが何を行っているかはわかると思います。
XML
<customUI onLoad="Ribbon_onLoad" xmlns="http://schemas.microsoft.com/office/2009/07/cust …
<ribbon startFromScratch="true">
<tabs>
<tab idMso="TabHome" visible="false">
<group idMso="GroupClipboard" visible="false"/>
<group idMso="GroupFont" visible="true"/>
<group idMso="GroupAlignmentExcel" visible="false"/>
<group idMso="GroupNumber" visible="false"/>
<group idMso="GroupStyles" visible="false"/>
<group idMso="GroupCells" visible="false"/>
<group idMso="GroupEditingExcel" visible="false"/>
</tab>
<tab idMso="TabInsert">
<group idMso="GroupInsertTablesExcel" visible="true" />
</tab>
・
・略
・
<group id="grp2" label="- 処理モード変更 -">
<checkBox id="chk1" getPressed="checkBox_getPressed" onAction="checkBox_change" label="通常モード"/>
<checkBox id="chk2" getPressed="checkBox_getPressed" onAction="checkBox_change" label="修正モード"/>
</group>
・
・略
・
VBA
Option Explicit
Dim dropDown1 As String, dropDown1Idex As Integer
Dim IsCheckBox1 As Boolean, IsCheckBox2 As Boolean, B As Boolean
Dim csv_name As String, sheet_name As String, maker_name As String
Dim rc As Integer, Status As String
Private myRibbon As IRibbonUI
Private flgChk As Boolean
#If VBA7 And Win64 Then
Private Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal cbLen As LongPtr)
#Else
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal cbLen As Long)
#End If
#If VBA7 And Win64 Then
Private Function GetRibbon(ByVal lRibbonPointer As LongPtr) As Object
Dim p As LongPtr
#Else
Private Function GetRibbon(ByVal lRibbonPointer As Long) As Object
Dim p As Long
#End If
Dim ribbonObj As Object
MoveMemory ribbonObj, lRibbonPointer, LenB(lRibbonPointer)
Set GetRibbon = ribbonObj
p = 0: MoveMemory ribbonObj, p, LenB(p) '後始末
End Function
Sub Ribbon_onLoad(ribbon As IRibbonUI)
Set myRibbon = ribbon
SaveSetting "RibbonApp", "Main", "RibbonPointer", CStr(ObjPtr(ribbon)) 'リボンのポインタをレジストリに記録
flgChk = True
End Sub
Sub Start(ByVal control As IRibbonControl)
Application.Run control.id
End Sub
Sub checkBox_change(control As IRibbonControl, ByRef returnValue)
Dim Label As String
Call Events_false
Select Case control.id
Case "chk1"
IsCheckBox1 = returnValue
Worksheets("Item_data").Cells(1, 3).Value = "通常処理中"
IsCheckBox2 = False
Case "chk2"
IsCheckBox2 = returnValue
Worksheets("Item_data").Cells(1, 3).Value = "修正処理中"
IsCheckBox1 = False
' Case "chk3"
' IsCheckBox3 = returnValue
' 略・・・
End Select
If myRibbon Is Nothing Then
' MsgBox "IRibbonUIオブジェクトがNothingです。" & vbCrLf & "保持していた値からSetします。", vbExclamation + vbSystemModal
#If VBA7 And Win64 Then
Set myRibbon = GetRibbon(CLngPtr(GetSetting("RibbonApp", "Main", "RibbonPointer")))
#Else
Set myRibbon = GetRibbon(CLng(GetSetting("RibbonApp", "Main", "RibbonPointer")))
#End If
End If
myRibbon.Invalidate
Call Events_true
End Sub
Public Sub button_getVisible(control As IRibbonControl, ByRef returnedVal)
returnedVal = flgChk
End Sub
Sub checkBox_getPressed(control As IRibbonControl, ByRef returnValue)
Select Case control.id
Case "chk1"
returnValue = IsCheckBox1
Case "chk2"
returnValue = IsCheckBox2
End Select
End Sub
こんにちは
いつもお世話になります
早速のご回答ありがとうございます
お答えいただいた資料、来週での検討になると思いますが
心から感謝申し上げます
これからもよろしくお願い申し上げます
まずはお礼まで
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Excel(エクセル) 【マクロ】リボン、行列、数式・ステータスバを非表示に 4 2022/12/12 07:32
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) シートを選択して、1つのPDFにしたいのですが。 5 2022/10/03 20:18
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
MySQLの抽出について
-
複雑な条件下におけるupdate文...
-
テーブルの内容とテーブルのカ...
-
MySQL5でキーがないテーブルの...
-
[SQLServer] テーブル名からカ...
-
VIEWの元のテーブルのindexって...
-
スクリーンセイバー
-
【Excel+MySQL】select文で返っ...
-
テーブル名を省略して「h.id」...
-
PL/SQLの変数について
-
同じ日付で複数数値がある場合...
-
フィールドのデータ型を取得し...
-
MySQLにてCOUNTした値を更にCOUNT
-
SQL Server を使っています。SQ...
-
総数とその条件に一致したデー...
-
mySQLの内部結合について
-
~JOIN ON句でこのような問い合...
-
山?努さんの所属事務所をご存じ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
sqlで、600行あるテーブルを100...
-
select文のwhere句に配列を入れ...
-
SQLにて特定の文字を除いた検索...
-
WordpressのContact form 7でzi...
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
クエリ表示と、ADOで抽出したレ...
-
マイクラPC版のコマンドで効率...
-
【Transact-sql】 execの結果を...
-
SQL Left Join で重複を排除す...
-
エラー 1068 (42000): 複数の主...
-
[MySQL] UNIQUE制約の値を更新...
-
inner joinをすると数がおかし...
-
1テーブル&複数レコードの更新...
-
Access パラメータクエリをcsv...
-
期間の重複を調べるSQL文につい...
-
Unionした最後にGROUP BYを追加...
-
Updateの複数テーブル条件時のL...
おすすめ情報