三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
Ken3三流君の連絡先:
[google formsで連絡する]
上記の問い合わせフォームに質問・感想など気軽に書き込んでください

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Outlook VBA 連絡先の幅 と 表示位置を探る GetInspector Width Left Top をテスト STOPで止めてウォッチ式で探ってみた

バグ・不具合の原因がウインドウの幅だと思い込み、
決めつけてデバッグした失敗動画ですが
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で止めて、ウォッチ式で探ってみた

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を使用していますが、アドレス帳にある個人メールアドレスを編集しようと、個人のアドレスをダブルクリックして、
別ウィンドウで表示させるとウィンドウの横幅は延々に延びて「閉じる」ボタンが正しく表示されない不具合が発生しています。(画面上部のツールバーは覆い隠されることなく表示されています。)
ウィンドウの表示を直す方法を教えてください。


関連動画: https://youtu.be/Hti2Ybi2R14
youtu.be

ken3memo.hatenablog.com

ランダムな占い

再生リスト:[占い 今日のラッキーカラー]をショート動画

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



[連絡先はココのフォームから]←連絡先の入力フォームです、気軽に書いてください
本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)