
いつもお世話になります
最近、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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Debug.exe実行時にWinMainCRTSt...
-
【マクロ】エラー【#DIV/0!】が...
-
Do While中のVBAアプリケーショ...
-
Amazon api について。JANコー...
-
エラー1004 PDFの保存ができま...
-
Access:結果は出るがエラー
-
VBAがブレークモードになっ...
-
IEのダウンロード通知バーのVBA...
-
Excelで下記のようにマクロを作...
-
ASPの初歩的な質問です
-
EXCEL/VBAで、自分のPCだけエラ...
-
Excel TextBoxクラスのCharacte...
-
JSP/サーブレットを用いたWebア...
-
パスワードによるシートの保護...
-
エラー:インデックスが配列の...
-
実行時エラー 438になった時の...
-
VBS実行時エラー オブジェクト...
-
VBAでピボットテーブルの作成(...
-
'Speak'メソッドは失敗しました
-
ASPでメール送信時エラーが出る
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
【マクロ】エラー【#DIV/0!】が...
-
実行時エラー -'-2147417848
-
実行時エラー3001「引数が間違...
-
実行時エラー48発生時のDLL特定...
-
【Excel VBA】マクロをボタンに...
-
マクロについて教えてください...
-
なぜこんな初歩的なVBAのIf文で...
-
VB6+SQL サーバー 2000 で 実行...
-
OLEDB.NETで接続できない
-
EXCEL/VBAで、自分のPCだけエラ...
-
ExcelVBA Range クラスの Page...
-
Invalid procedure call or arg...
-
VBAでのエラー
-
AccessVBAでExcelを起動し、罫...
-
[Delphi] データセットは閉じて...
-
VBAで実行時エラー'424' オブジ...
-
なぜエラーになるのでしょうか...
-
ADODB.Streamを使用してUTF-8を...
おすすめ情報