次の方法で共有

Excel のVBAのForm上からExcelの指定セルへのフォーカスの移動

Anonymous
2011-08-08T08:44:22+00:00

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 にしても動きは変わりません。

フォーム上からの自動移動は、出来ないでしょうか?

宜しくお願い致します。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

  1. Anonymous
    2011-08-08T14:49:02+00:00

    こんばんは。

    モードレスなUserFormから下記のようにするのはどうでしょうか?

    (試していないので上手くいくかどうか分かりませんが・・・)

    ActiveSheet.Range("C5").Select

    AppActivate Application.Caption

    10+ 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません

4 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2011-08-08T15:01:28+00:00

    こんばんは。

    モードレスな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

    これで、メニューを表示しながらのデータ入力が出来るので、能率がアップします。

    今後の作成時には、必ず使いたいと思います。

    アドバイス、有り難うございました。

    3 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2011-08-08T15:13:54+00:00

    ああ、なるほど、AppActivateって手がありましたね。

    考えなかったです。

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  3. Anonymous
    2011-08-08T14:41:17+00:00

    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 でも出来るかな~と思ったのですが・・・

    これで運用する事にします。

    アドバイス、有り難うございました。

    0 件のコメント コメントはありません
  4. Anonymous
    2011-08-08T13:11:54+00:00

    ユーザーフォームをモードレスで使っているという前提の話だとおもいます。

    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⇒エンター ということになります。

    個人的な意見ですが、現状のままで妥協するか、入力はすべてユーザーフォームからきちんとやる方が良いように思えます。

    参考まで。

    0 件のコメント コメントはありません