プロが教える店舗&オフィスのセキュリティ対策術

エクセルマクロでActivateNextを使ってCtrl+Tabと同じ動作をするツールバーを作りました。
このツールバーを使ってCtrl+Shift+Tab(ActivatePrevious)と同じ動作をさてたいと思っています。
通常はボタンを押すとActivateNextが動き、Shiftを押しながらボタンを押すとActivatePreviousが動くようにしたいのです。

プレビューボタンはShiftを押しながらボタンを押すと印刷ボタンになりますよね。
イメージまで変わらなくてもいいです。処理だけでも変えたいです。

Shiftが押されているって情報がマクロに渡せれば良いのでしょうが・・・。

Sub ウインドウ切替(kbn)
  If kbn = 1 Then
    ActiveWindow.ActivatePrevious
  Else
    ActiveWindow.ActivateNext
  End If
End Sub

そのような情報って取得できるのでしょうか?[Excel2000]

A 回答 (1件)

Windows APIのGetAsyncKeyStateを使うとキーボードの状態が取得できます。


実際のコーディングはこんな感じでしょうか。

Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Public Sub ウインドウ切替()
If GetAsyncKeyState(vbKeyShift) <> 0 Then
'Shiftキーが押されている
ActiveWindow.ActivatePrevious
Else
'Shiftキーは押されていない
ActiveWindow.ActivateNext
End If
End Sub

この回答への補足

実際にAPI関数を宣言し、作成したところ実現しました。
ただ、エクセルマクロのみでは出来ないものなのでしょうか?

補足日時:2001/06/14 19:15
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
今までAPIという言葉に対し、目を伏せていました。
APIを使うと何でもできるってイメージがあるのですが、何ができるか知らない為、発想が行き着きません。

避けつづけるのも、そろそろ限界かもしれませんね。。。

お礼日時:2001/06/14 10:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!