いつもお世話になります
最近、Windows11およびExcel64ビット版に変更していろいろエラーが発生しています
その中で今までWindows10およびExcel32ビット版では問題なかったリボンのリカバリーで
オーバーフローエラーで悩まされています
'***初期設定***
'...レジストリを使った、リボンコントロール用(イレギュラーに止まった時のカバー用)
Public Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal cbLen As Long)
Public rbRibbon520 As IRibbonUI ' リボン
Public rbCheckBox520 As Boolean
Sub Ribbon_OnLoad520(ribbon As IRibbonUI) ' リボンの初期処理
Set rbRibbon520 = ribbon ' リボンの表示を更新できるようにするためにリボンをセットする
SaveSetting "RibbonApp", "Main", "RibbonPointer520", CStr(ObjPtr(ribbon)) '...リボンのポインタをレジストリに記録
rbRibbon520.Invalidate ' リボンの描画を更新する
End Sub
'***エラー時***
If rbRibbon520 Is Nothing Then
'...前回イレギュラーで終わったため、レジストリからチェックボックスの値を読み込む
rbCheckBox520 = GetSetting("MyChkBox520", "Main", "IsCheckBox520")
'...オブジェクトのリセット(レジストリからのリカバリー)
Set rbRibbon520 = GetRibbon(CLng(GetSetting("RibbonApp", "Main", "RibbonPointer520")))
rbRibbon520.Invalidate ' リボンの描画を更新する
のように作成しています
プログラムは上記のチェックボックスを使って処理していますが
デバッグ等で途中で止めた場合、再スタート時にエラーになってしまいます
Windows11とWindows10の違いなのか、
Excel32版とExcel64版によるものかも分かっていません
もし分かりましたら教えてください
以上、よろしくお願い申し上げます
No.1ベストアンサー
- 回答日時:
こんばんは
Public Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal cbLen As Long)
を
Private Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal cbLen As LongPtr)
??
Private Function GetRibbon(ByVal lRibbonPointer As LongPtr) As Object
Dim p As LongPtr は・・・
'...オブジェクトのリセット(レジストリからのリカバリー)をExcel64版に
Set rbRibbon520 = GetRibbon(CLngPtr(GetSetting("RibbonApp", "Main", "RibbonPointer520")))
違うかも知れませんが確認してみてください
ちなみに以前作ったアプリはレジストリからのリカバリーをあきらめ
再起動するロジックに変えました
早々のご連絡、本当にありがとうございます
No.2の連絡を含め、テストしてみたところ
エラーは出なくなりました
ほかにもLongPtrの問題が発生していましたが
少しづつ解消されてきました
適切なご指示に心から感謝します
これからもよろしくお願い申し上げます
No.2
- 回答日時:
#1です
#1は自身のストックブックに書いてあるコードです
??
Private Function GetRibbon(ByVal lRibbonPointer As LongPtr) As Object
Dim p As LongPtr は・・・
は関係ないですね
当時参考にしていたサイトを見つけました(たぶん)
https://www.ka-net.org/ribbon.html
https://www.ka-net.org/ribbon/ri64.html
諦めた理由は 2010で作成したのですが後に
OSバージョン、Excelバージョン 32ビット・64ビット
バージョンによってXMLの変更やコントロールのプロパティが使えなかったり・・・で リボンと処理を作り込んで既存リボンを排除する事で
リボンのリカバリーの必要性が無くなったからです
(現在もそのアプリイは問題なく動いています)
早速、ご回答ありがとうございます
NO.1できました
また、参考になるURLも教えていただきありがとうございました
とても助かりました
今後ともよろしくお願いいたします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
[Delphi] データセットは閉じて...
-
エラーDlg「An invalid argumen...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAでのエラー
-
マクロについて教えてください...
-
Excel2007でWebサービスを利用...
-
OLEDB.NETで接続できない
-
Access2000での未定義関数repla...
-
Excelで下記のようにマクロを作...
-
実行時エラー3001「引数が間違...
-
なぜエラーになるのでしょうか...
-
「アプリケーション定義または...
-
INSERT INTOステートメント構文...
-
EXCEL VBAマクロ中断でデバッグ...
-
Outlook.ApplicationをCreateOb...
-
エクセルエラー13型が一致しま...
-
VBAがブレークモードになっ...
-
マクロでのActiveSheet.Pasteで...
-
実行時エラー48発生時のDLL特定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
VBAがブレークモードになっ...
-
なぜこんな初歩的なVBAのIf文で...
-
【Excel VBA】マクロをボタンに...
-
VBSで変数の宣言はできないので...
-
VBS実行時エラー オブジェクト...
-
実行時エラー3001「引数が間違...
-
ExcelVBA Range クラスの Page...
-
ExcelVBAで、ユーザー定義型は...
-
EXCEL VBAマクロ中断でデバッグ...
-
マクロについて教えてください...
-
プロシージャ名の取得
-
ADODB.Streamを使用してUTF-8を...
-
実行時エラー -'-2147417848
-
Outlook.ApplicationをCreateOb...
-
VBAでのエラー
-
なぜエラーになるのでしょうか...
-
VBAのコードがエラーになっ...
-
[Delphi] データセットは閉じて...
おすすめ情報