リボンの表示、非表示 切替え

サンプル

Access2007

(2007.09.23)

  概要

VBAを利用したリボンUIの表示、非表示の切り替え

以前では、ツールバーの表示は、グローバルオプションで、プログラムでコントロールできましたが、Access2007から新しくなったUI、リボンインターフェイスでは

Application.SetOption "Built-In Toolbars Available", True/ False

でツールバーの表示/非表示はできません。

ヘルプを見ても、それらしいのがみつかりません。しかたないので、 APIのSendInputを使って
Ctrl+F1」を送ってやって、切り替えしているだけです。
 

  ソース

 

Option Compare Database
Option Explicit


Private Type GENERALINPUT
  dwType As Long
  xi(0 To 23) As Byte
End Type

'===KEYBDINPUT 構造体
Private Type KEYBDINPUT
  wVk As Integer    '仮想キーコード
  wScan As Integer   'ハードウェアスキャンコード
  dwFlags As Long   'キーボードの動作を指定するフラグ
  time As Long     'タイムスタンプ。単位は ms
  dwExtraInfo As Long  '32 ビットの追加情報
End Type

'===入力タイプ
Private Const INPUT_MOUSE = 0 'マウスイベントを発生
Private Const INPUT_KEYBOARD = 1 'キーボードイベントを発生
Private Const INPUT_HARDWARE = 2 'ハードウェアイベントを発生

'===キーコード 以下は一部
Private Const VK_F1 = &H70 'F1 key
Private Const VK_RETURN = &HD 'ENTER key
Private Const VK_SHIFT = &H10 'SHIFT key
Private Const VK_CONTROL = &H11 'CTRL key
Private Const VK_MENU = &H12 'ALT key
Private Const VK_V = &H56 'V key

'===
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_EXTENDEDKEY = &H1 'スキャンコードは拡張コード

'============ Win32 API ===========================
'キーストローク、マウスの動作、ボタンのクリックをシミュレート
Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, PINPUTS As GENERALINPUT, ByVal cbSize As Long) As Long
'メモリブロックをコピーする
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'キーストロークをシミュレートする
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Sub SendCtrlF1()
  Dim GInput(3) As GENERALINPUT 'ストロークによって
  Dim KInput As KEYBDINPUT

  
'Press Ctrl
  KInput.wVk = VK_CONTROL
  KInput.dwFlags = 0
  GInput(0).dwType = INPUT_KEYBOARD
  Call CopyMemory(GInput(0).xi(0), KInput, Len(KInput))

  '
Press F1
  KInput.wVk = VK_F1
  KInput.dwFlags = 0
  GInput(1).dwType = INPUT_KEYBOARD
  Call CopyMemory(GInput(1).xi(0), KInput, Len(KInput))

  
'Release F1
  KInput.wVk = VK_F1
  KInput.dwFlags = KEYEVENTF_KEYUP
  GInput(2).dwType = INPUT_KEYBOARD
  Call CopyMemory(GInput(2).xi(0), KInput, Len(KInput))

'  Release Ctrl
  KInput.wVk = VK_CONTROL
  KInput.dwFlags = KEYEVENTF_KEYUP
  GInput(3).dwType = INPUT_KEYBOARD
  Call CopyMemory(GInput(3).xi(0), KInput, Len(KInput))

  
'Now, finally send the keystrokes
  Call SendInput(4, GInput(0), Len(GInput(0)))

End Sub


 
 

 


ここに掲載された情報を使用したことによって発生した、いかなる損害に対しても
管理者であるしゃくは一切責任を負いません。