Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9352 / 13644 ツリー ←次へ | 前へ→

【27795】ユーザーフォームとワークシートの切替え... わさび 05/8/19(金) 16:40 質問[未読]
【27796】Re:ユーザーフォームとワークシートの切替... m2m10 05/8/19(金) 17:00 回答[未読]
【27797】Re:ユーザーフォームとワークシートの切... わさび 05/8/19(金) 17:31 質問[未読]
【27802】Re:ユーザーフォームとワークシートの切... m2m10 05/8/19(金) 18:43 回答[未読]
【27804】Re:ユーザーフォームとワークシートの切... m2m10 05/8/19(金) 19:30 回答[未読]
【27805】Re:ユーザーフォームとワークシートの切... わさび 05/8/19(金) 19:56 お礼[未読]
【27806】Re:ユーザーフォームとワークシートの切替... ichinose 05/8/19(金) 20:59 発言[未読]
【27849】Re:ユーザーフォームとワークシートの切... わさび 05/8/22(月) 11:42 質問[未読]
【27850】Re:ユーザーフォームとワークシートの切... m2m10 05/8/22(月) 11:49 回答[未読]
【27854】Re:ユーザーフォームとワークシートの切... わさび 05/8/22(月) 13:19 質問[未読]
【27853】Re:ユーザーフォームとワークシートの切... ichinose 05/8/22(月) 13:14 発言[未読]
【27856】Re:ユーザーフォームとワークシートの切... わさび 05/8/22(月) 13:26 お礼[未読]
【27843】Re:ユーザーフォームとワークシートの切替... m2m10 05/8/22(月) 8:18 回答[未読]
【27845】Re:ユーザーフォームとワークシートの切替... わさび 05/8/22(月) 9:41 お礼[未読]

【27795】ユーザーフォームとワークシートの切替え...
質問  わさび  - 05/8/19(金) 16:40 -

引用なし
パスワード
   仕事でVBAを使うことになり、独学で悪戦苦闘、藁にもすがる思いでこちらにたどり付きました。
どうかお助けください。

ユーザーフォームをワークシートの左上に表示したまま、
モードレスダイアログボックスとしてワークシートを操作するとき、
フォームとシートのアクティブ状態の切替は、
それぞれをマウスでクリックするだけのことかと思います。
しかし今やっている仕事は、
マウスを使わずにすべてキーボードで操作することが条件となっており、
いろいろとキーを押して試してはみたのですが、切替ができません。
OnKeyを使っていろいろ試してみたのですが、うまく機能しません。
何かショートカットキーが割り振られているのでしょうか。
もしくは自分で割り振る場合、どのように考えればよいのでしょうか。
どなたかご存知の方がいらっしゃいましたら、よろしくお願いします。

【27796】Re:ユーザーフォームとワークシートの切...
回答  m2m10  - 05/8/19(金) 17:00 -

引用なし
パスワード
   動きが良く判りませんが
ユウザーホームのTextBox1で「改行」した場合動きます。


Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
  改行をした************
End If
End Sub

【27797】Re:ユーザーフォームとワークシートの切...
質問  わさび  - 05/8/19(金) 17:31 -

引用なし
パスワード
   説明不足で申し訳ございません。
状況は以下のとおりになります。

----------
<目的>
ユーザーフォームで入力した条件に対し、
データベースをフィルタオプションで選択範囲内へ抽出する

<ユーザーフォームの仕様>
テキストボックス:条件項目を入力
コマンドボタン:フィルタオプションをかけるマクロを登録、
         Acccleratorでアクセスキーを指定し実行

<流れ>
1.テキストボックスに条件を入力
2.アクセスキーでコマンドボタンを「押す」ことで、フィルタオプションが実行
3.ユーザーフォームはモードレスで左上に表示されたまま、
  フィルタオプションの実行結果が表示されたワークシートを操作
4.再びユーザーフォームに戻り、以降1の条件入力から繰り返し
----------

ここで頭を悩ませているのが3と4で、
ユーザーフォーム→ワークシート、ワークシート→ユーザーフォームの相互の切替を
マウスを使わずにキーボードで行えません。
「切替」を正確になんといえばよいのかわからないのですが、
アクティブ状態の切替、表示・非表示の切替、フォーカス取得の切替…
ごめんなさい、本当にどう表現すればいいのでしょうか。
マウスならフォームとシートをそれぞれクリックすれば、
タイトルバーがアクティブ状態の表示になるんですが、
それをキーボードで行うにはどうしたらよいのかさっぱりわかりません。
どうかご指南のほどよろしくお願いします。

【27802】Re:ユーザーフォームとワークシートの切...
回答  m2m10  - 05/8/19(金) 18:43 -

引用なし
パスワード
   問題は何処のボックスで何を打つか

 先ほどの例で とりあえず 改行でしたが、何のコードで何でも取れます

 あと、シートからは 

 Sub カーソル移動のマクロ開始()
   Application.OnKey "{F1}", "マクロ1"
>            ^^^^^^ 仮にF1です  
  end Sub

  でホームの表示の例ですが。

【27804】Re:ユーザーフォームとワークシートの切...
回答  m2m10  - 05/8/19(金) 19:30 -

引用なし
パスワード
   もう少し詳しく入れます
一度カーソル移動のマクロ開始を動かしてください
tab でユウザーホームが表示

テキスト1で
タブ でユウザーホームをUnload します。


'-----UserForm1-----
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 9 Then
  Range("B7").Select
  Unload UserForm1
End If
End Sub
'-----標準モジュール----------------
Sub カーソル移動のマクロ開始()
   Application.OnKey "{tab}", "マクロ1"

End Sub

Public Sub マクロ1()
UserForm1.Show 0
End Sub

【27805】Re:ユーザーフォームとワークシートの切...
お礼  わさび  - 05/8/19(金) 19:56 -

引用なし
パスワード
   詳細回答ありがとうございます!
おかげで、このプログラムの云わんとするところは理解できました。

が、実際に走らせてみると、フォームが表示されたまま、
うんともすんともいいません…なぜなんでしょうか。
月曜日にまたいろいろ研究してみます。
ありがとうございました。

【27806】Re:ユーザーフォームとワークシートの切...
発言  ichinose  - 05/8/19(金) 20:59 -

引用なし
パスワード
   こんばんは。

新規ブックに以下の仕様でユーザーフォームを作成してください。

ユーザーフォーム---Userform1
   テキストボックス Textbox1
   コマンドボタン  Commandbutton1

つまり、テキストボックスとコマンドボタンをそれぞれ一つ配置した
ユーザーフォームです。
このフォームを表示した後、Ctrl+aでアクティブ・非アクティブの切り替え
を行うことを考えます。


コードは、標準モジュールに

'===============================================================
Sub main()
  UserForm1.Show vbModeless
End Sub
'=================================================================
Sub app_form()
  AppActivate UserForm1.Caption
End Sub
'================================================================
Sub settei()
  Application.OnKey "^a", "app_form"
End Sub


Userform1のモジュールに

'================================================================
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If Shift = 2 And KeyCode = 65 Then
    AppActivate Application.ActiveWindow.Caption
    End If
End Sub
'================================================================
Private Sub UserForm_Initialize()
  With CommandButton1
    .TabStop = False
    .TakeFocusOnClick = False
    End With
End Sub


これで、事前にプロシジャー「settei」を実行した後、

プロシジャー「main」を実行して、ユーザーフォームを表示させた後に

Ctrl+aでアクティブ・非アクティブになるか確認してください。

尚、標準モジュールに

'=============================================================
Sub kaijo()
  Application.OnKey "^a", ""
End Sub

で割り当てたマクロ実行を解除できます。

試してみてください。

【27843】Re:ユーザーフォームとワークシートの切...
回答  m2m10  - 05/8/22(月) 8:18 -

引用なし
パスワード
   >ユーザーフォームをワークシートの左上に表示したまま、

こんちは

'---UserForm1-----UserForm1の位置の変更の例です。
Private Sub UserForm_Activate()
  'UserFormの表示位置
  UserForm1.StartUpPosition = 0
  'フォームの左端の距離
  UserForm1.Left = 10
  'フォームの上端からの距離
  UserForm1.Top = 10
End Sub

【27845】Re:ユーザーフォームとワークシートの切...
お礼  わさび  - 05/8/22(月) 9:41 -

引用なし
パスワード
   ぜひぜひ参考にさせていただきます。
いろいろとお気遣いいただき、本当にありがとうございます。

【27849】Re:ユーザーフォームとワークシートの切...
質問  わさび  - 05/8/22(月) 11:42 -

引用なし
パスワード
   いたせりつくせりのご回答、本当にありがとうございます。
早速試してみたのですが、どうしても1箇所だけうまくいきません。

ユーザーフォームからワークシートに切り替える際、
Ctrl+aを押すと、ユーザーフォームは非アクティブになるのですが、
ワークシートはアクティブにならず、操作できません。
その状態でまたCtrl+aを押しても、ユーザーフォームがアクティブになるわけでもなく、
どちらも機能しないまま、立ち往生状態となってしまいます。

ワークシートがアクティブな状態からユーザーフォームへの切替は大丈夫です。

私なりにいろいろ考えていじってみましたがよくわかりません。
もし何か思い当たる節がありましたら、ぜひ教えていただければ幸いです。
よろしくお願い致します。

【27850】Re:ユーザーフォームとワークシートの切...
回答  m2m10  - 05/8/22(月) 11:49 -

引用なし
パスワード
   一度
Unload UserForm1

 をして下さい。

【27853】Re:ユーザーフォームとワークシートの切...
発言  ichinose  - 05/8/22(月) 13:14 -

引用なし
パスワード
   ▼わさび さん:
こんにちは。

>いたせりつくせりのご回答、本当にありがとうございます。
>早速試してみたのですが、どうしても1箇所だけうまくいきません。
>
>ユーザーフォームからワークシートに切り替える際、
>Ctrl+aを押すと、ユーザーフォームは非アクティブになるのですが、
>ワークシートはアクティブにならず、操作できません。
>その状態でまたCtrl+aを押しても、ユーザーフォームがアクティブになるわけでもなく、
>どちらも機能しないまま、立ち往生状態となってしまいます。
>
>ワークシートがアクティブな状態からユーザーフォームへの切替は大丈夫です。
>
>私なりにいろいろ考えていじってみましたがよくわかりません。
>もし何か思い当たる節がありましたら、ぜひ教えていただければ幸いです。
>よろしくお願い致します。
一箇所訂正です。
Userform1のモジュールに

'================================================================
>Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
>  If Shift = 2 And KeyCode = 65 Then
    AppActivate Application.Caption
>    End If
>End Sub


私のほうでは、
  Win98+Excel2000
  Win2000+Excel2002で
確認しましたが、これでアクティブ・非アクティブが
正常に作動しています。
(実は、訂正前でも作動するときもあるんですが、
エラーになる場合もあったので・・)

>どちらも機能しないまま、立ち往生状態となってしまいます。
とのことなので心配ですが・・・。

【27854】Re:ユーザーフォームとワークシートの切...
質問  わさび  - 05/8/22(月) 13:19 -

引用なし
パスワード
   Private Sub TextBox1_KeyDown の Then のあとに入れてみました。
確かにワークシートがアクティブとなり操作できるようになったのですが、
ユーザーフォームが消えてしまいました。
またその状態でCtrl+aを押すとエラーとなります。
入れる場所を間違えているのでしょうか。

【27856】Re:ユーザーフォームとワークシートの切...
お礼  わさび  - 05/8/22(月) 13:26 -

引用なし
パスワード
   できました!
きれいに切替ができました!
今、モーレツに感動しております!

ichinoseさん、m2m10さん、本当にありがとうございました!
また行き詰まったら質問させていただくかと思いますが、
そのときはまたぜひよろしくお願い致します。
本当に本当にありがとうございました。

9352 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free