Microsoft 製品に組み込まれている Visual Basic の実装。
こんばんは。
モードレスなUserFormから下記のようにするのはどうでしょうか?
(試していないので上手くいくかどうか分かりませんが・・・)
ActiveSheet.Range("C5").Select
AppActivate Application.Caption
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
Excel 2007 を使用しています。
以下の動作を作っているのですが、うまく動きません。
Excel のシート上にVBAのフォームを表示し、フォーム内のコマンドボタンを押すと、指定の処理を実行後にExcelの指定セルへ飛び、データを入力する。
以下がコードの抜粋です。
Public Sub Tmp_2()
Sheets("Tmp_2").Activate
~~~~ 処理 ~~~~
Cells( Yp_s , Xp_s ).Activate
End Sub
現在の動作は、Cells( Yp_s , Xp_s ) が アクティブ になるが、フォーカスがフォーム上に有り、データ入力が出来ない。
マウスで Cells( Yp_s , Xp_s ) をクリックすれば、もちろん通常通りにデータ入力は出来ます。
フォーカスがフォーム上から Cells( Yp_s , Xp_s ) に自動で動けば、マウス動作をしないで、データ入力が出来るので能率が上がります。
Cells( Yp_s , Xp_s ).Select や Range(Cells( Yp_s , Xp_s )).Select にしても動きは変わりません。
フォーム上からの自動移動は、出来ないでしょうか?
宜しくお願い致します。
Microsoft 製品に組み込まれている Visual Basic の実装。
ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。
質問作成者が受け入れた回答
こんばんは。
モードレスなUserFormから下記のようにするのはどうでしょうか?
(試していないので上手くいくかどうか分かりませんが・・・)
ActiveSheet.Range("C5").Select
AppActivate Application.Caption
こんばんは。
モードレスなUserFormから下記のようにするのはどうでしょうか?
(試していないので上手くいくかどうか分かりませんが・・・)
ActiveSheet.Range("C5").Select
AppActivate Application.Caption
きぬあさ 様、こんばんは。
早速試してみました、希望の動きになりました!!
Public Sub Tmp_2()
Sheets("Tmp_2").Activate
~~~~ 処理 ~~~~
Cells( Yp_s , Xp_s ).Activate
AppActivate Application.Caption
End Sub
これで、メニューを表示しながらのデータ入力が出来るので、能率がアップします。
今後の作成時には、必ず使いたいと思います。
アドバイス、有り難うございました。
ああ、なるほど、AppActivateって手がありましたね。
考えなかったです。
y sakuda 様、早速の回答、ありがとうございます。
>できないと思います。
>Hide してしまう方法がないではありません
との事、了解いたしました、Hide する事にしました。
Public Sub Tmp_2()
Sheets("Tmp_2").Activate
~~~~ 処理 ~~~~
Cells( Yp_s , Xp_s ).Activate
Tmp2_Menu.Hide
End Sub
フォームは、指定の場所をダブルクリックすると表示する様にしています。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If セルの判定 Then
Tmp2_Menu.Show (vbModeless)
End If
End Sub
Access だと フォーム から 別のフォーム へのフォーカスの移動が出来るので、
Excel でも出来るかな~と思ったのですが・・・
これで運用する事にします。
アドバイス、有り難うございました。
ユーザーフォームをモードレスで使っているという前提の話だとおもいます。
100%の自信があるわけではありませんが、できないと思います。
代替案としては、モーダルで呼び出し、Hideしてしまう方法がないではありません。
Private Sub CommandButton1_Click()
UserForm1.Hide
With Worksheets("sheet1")
.Activate
.Range("C2").Select
End With
End Sub
これで、C2を変更したときに再度フォームを表示すれば、希望のような形になることはなります。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" Then
UserForm1.Show
End If
End Sub
ただし、この例は入力対象を1セルにしてますが、シート入力の最後のセルでイベントをキックしますので、非常に制約が大きくなります。
また、実際にこのセルが変更されなければイベントは発生しません。
ですから、入力値を変更しない場合、F2⇒エンター ということになります。
個人的な意見ですが、現状のままで妥協するか、入力はすべてユーザーフォームからきちんとやる方が良いように思えます。
参考まで。