バグ・不具合の原因がウインドウの幅だと思い込み、
決めつけてデバッグした失敗動画ですが
VBAデバッグでウォッチ式使用方法の参考となれば幸いです。
youtu.be
https://youtu.be/9qlahSwozo8
目次
00:00 現状とやりたいことを説明
01:40 STOPで止めてウォッチ式をセット
02:05 オブジェクト変数の中身を確認
03:10 現物の値を確認しながら目的のプロパティを探す
04:20 イミディエイトで値の確認とセットをテストする
06:10 幅widthを広くし、エラーの再現
08:16 エラーの原因が違ったのに蛇足解説を続ける・・・
10:12 脱線ついでにFolderなどをウォッチ式で確認してみた
#OutlookVBA #ウォッチ式 #Inspector #Width #Left #Top #マクロ #デバッグ #テスト方法
1.いつものSTOPで止めて、ウォッチ式で探ってみた
'Outlook操作テスト 'アイテムの表示後Stopで止める Sub outlook連絡先test20221015() Dim oApp As Object 'OutlookのApplication オブジェクトを入れる変数 Dim myNameSpace As Object '名前の領域を入れる変数 Dim myFolder As Object 'フォルダー指定する変数 Set oApp = CreateObject("Outlook.Application") '新規にアプリの枠作成 '.GetNamespace("MAPI") Set myNameSpace = oApp.GetNameSpace("MAPI") '最近はセッションの方を良く見るけど '作業フォルダーの指定(.GetDefaultFolder) と 表示(.Display) Set myFolder = myNameSpace.GetDefaultFolder(10) '連絡先10を直値で '----- Dim oITEM As Object '連絡先のアイテム オブジェクトを入れる変数 Set oITEM = myFolder.Items(1) '一番目のアイテムをテストで代入 oITEM.Display '画面表示 Stop End Sub
- : GetInspector : : Inspector/Inspector : Module1.outlooktest
: Width : 1087 : Long : Module1.outlooktest
2.エラーの状態を強引に作成する
↑で、プロパティがわかったので、
エラーを再現する。
と言っても、独りよがりで勝手に犯人・不具合原因 Widthのエラーを作成してみた。
'わざと不具合、幅の広い編集エリアを作り、閉じて記憶させる Sub outlook連絡先test20221015_002エラーの作成() Dim oApp As Object 'OutlookのApplication オブジェクトを入れる変数 Dim myNameSpace As Object '名前の領域を入れる変数 Dim myFolder As Object 'フォルダー指定する変数 Set oApp = CreateObject("Outlook.Application") '新規にアプリの枠作成 '.GetNamespace("MAPI") Set myNameSpace = oApp.GetNameSpace("MAPI") '最近はセッションの方を良く見るけど '作業フォルダーの指定(.GetDefaultFolder) と 表示(.Display) Set myFolder = myNameSpace.GetDefaultFolder(10) '連絡先10を直値で '----- Dim oITEM As Object '連絡先のアイテム オブジェクトを入れる変数 Set oITEM = myFolder.Items(1) '一番目のアイテムをテストで代入 oITEM.Display '画面表示 oITEM.GetInspector.Width = 4096 '広い幅の不具合を作成する oITEM.GetInspector.Left = 0 '確認しやすいように左に寄せとく MsgBox "横幅を4096にしました、テスト設定" End Sub
3.エラーの再現に失敗・・・
編集画面を閉じて、再度表示させると(ここ重要、前回の設定値を記憶しているかが重要)
広くはなったけど、画面の最大値ですね。
>ウィンドウの横幅は延々に延びて「閉じる」ボタンが正しく表示されない
強引にエラー状態(幅4096)を作ったみたいに延々には、伸びてない・・・
Widthの幅じゃないのか・・・
ここまで作成して、失敗動画でした。。。
STOPで止めて、ウォッチ式で現物を探る操作のヒントとなれば幸いです。
4.ActiveInspector でいいかも?
蛇足のオンパレード
ActiveInspector って、アクティブなオブジェクトを取得できそうなので、
単純に、
GetObject(, "Outlook.Application")でOutlookを取得して
ActiveInspector.Width = 800
でいいのかな。
'ウインドウ幅を800にするテスト Sub outlook編集ウインドウ幅800test() Dim oApp As Object 'OutlookのApplication オブジェクトを入れる変数 On Error Resume Next '取得エラー時に次へ Set oApp = GetObject(, "Outlook.Application") On Error GoTo 0 'エラーを元に戻す※これを忘れると、デバッグ時にハマるから注意 If oApp Is Nothing Then '上↑で、Outlookをgetできなかったら MsgBox "Outlookを取得できません。Outlook起動後に再テストしてね" Exit Sub End If oApp.ActiveInspector.Width = 800 '広い幅の不具合を作成する oApp.ActiveInspector.Top = 0 '確認しやすいように上に oApp.ActiveInspector.Left = 0 '確認しやすいように左に MsgBox "横幅を800にしました、再度起動してテストしてみてください" End Sub
Watch : - : oApp : "Outlook" : Object/Application : Module1.outlook連絡先test20221015
思い込みと決めつけでデバッグした失敗動画ですが
VBAデバッグでウォッチ式の使い方、
デバッグの参考となれば幸いです。
キッカケ
detail.chiebukuro.yahoo.co.jp
Outlook2016を使用していますが、アドレス帳にある個人メールアドレスを編集しようと、個人のアドレスをダブルクリックして、
別ウィンドウで表示させるとウィンドウの横幅は延々に延びて「閉じる」ボタンが正しく表示されない不具合が発生しています。(画面上部のツールバーは覆い隠されることなく表示されています。)
ウィンドウの表示を直す方法を教えてください。