キャレット位置にポップアップメニューを表示するマクロ(エスパスネット検索)改良版 | みんなのワードマクロ

みんなのワードマクロ

ワードマクロで、文書作成とオフィス事務を効率化!!

先日ご紹介したエスパスネットのマクロ ですが、もっと便利になりましたのでご紹介します。

ポップアップメニューが表示された瞬間に文献番号が選択されている状態になります。

なので、文字入力のために[Tab] キーでフォーカスを移動する必要がなくなりました。

ワンクリック分のお得感です。

なお、この改造に関しては、きぬあささん から全面的にご助言をいただきました。毎度ありがとうございます。


▼このマクロでできること
基本的には、前回の記事「キャレット位置にポップアップメニューを表示するマクロ(エスパスネット検索) 」で紹介したマクロと同じです。

エスパスネット検索用に特許番号を入力する入力欄をポップアップメニューとして表示させます。


▼マクロの解説
前回の記事で紹介した黒文字の部分だけ変更です。

以下のマクロのように青文字の部分を追記しました。

SendKeys ステートメントといいます。

[Home]キーと[Enter]キーによって、ポップアップメニューにフォーカスを移動させています。([Tab]キーではフォーカスが移らないのです。理由はよくわかりませんが。。)

実は、SendKeys ステートメントで特定の操作をすると、NumLockのオン・オフが勝手に切り替わるというバグが発生するのです(「SendKeysのバグの報告 」で紹介したとおり)。

そのために、NumLockの状態を元に戻す処置まで施されています。このあたりのきめこまかさ、きぬあささんの技をいただきました。

これが赤文字で示した部分です。

[Home]キーと[Enter]キーを押す前後で、NumLockのオン・オフが切り替わった場合には、元に戻すという処理が施されています。


▼マクロ
Public Sub ShowPopupCaretPos()
'キャレット位置にポップアップメニュー表示
 Dim hWwG As Long
 Dim ClassName As String
 Dim ClassBuf As String * 255
 Dim tmp As Boolean
 Dim p As POINTAPI
 
 hWwG = GetFocus()
 GetClassName hWwG, ClassBuf, Len(ClassBuf)
 ClassName = Left$(ClassBuf, InStr(ClassBuf, vbNullChar) - 1&)
 
 '選択されているテキストを入力
 With Application.CommandBars(CommandBarName).Controls(1)
  If Selection.Start = Selection.End Then
   .Text = ""
  Else
   .Text = Selection.Text
  End If
 End With
 
 If ClassName <> "_WwG" Then GoTo Err
 GetCaretPos p
 ClientToScreen hWwG, p
 tmp = Application.NumLock
 VBA.SendKeys "{HOME}{ENTER}"
 If Application.NumLock <> tmp Then VBA.SendKeys "{NUMLOCK}"

Application.CommandBars(CommandBarName).ShowPopup p.x, p.y
 Exit Sub

Err:
 MsgBox "処理が失敗しました。", vbCritical + vbSystemModal
End Sub



▼関連記事
キャレット位置にポップアップメニューを表示するマクロ(エスパスネット検索)

キャレット位置にポップアップメニューを表示する (サイト紹介)

エスパスネット検索のアドイン紹介