ExcelVBAのSetFocusとプロシージャーの呼び出しについて

このQ&Aのポイント
  • ExcelVBAのSetFocusを使用してセルを選択することはできるのか
  • 同じブックの別々のユーザフォームからプロシージャーを呼び出すことはできるのか
  • ExcelVBAでのセル選択とプロシージャーの呼び出しに関する疑問
回答を見る
  • ベストアンサー

ExcelVBAのSetFocusとプロシージャーの呼び出しについてで

ExcelVBAのSetFocusとプロシージャーの呼び出しについてです。 質問させて頂きます。 セルをSetFocusで選択することはできないのでしょうか? 同じブックの別々のユーザフォームからプロシージャーを呼びだすことはできないのでしょうか? ユーザフォーム1 sub mh() a=1 msgbox a End sub SUB A_clik() 呼び出し可能 mh            End sub ユーザフォーム2  Sub B_click() call mh    呼び出し不可能     End Sub Sub B_click() userform1.mh    呼び出し不可能     End Sub 呼び出しの指定の仕方がわかりません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

Public Sub mh() '↑Publicを追加する a = 1 MsgBox a End Sub にして Sub B_click() userform1.mh   End Sub にしてください。

sea_clear
質問者

お礼

回答ありがとうございます。 呼び出しについては分助かりました。 できました。 ありがとうございました。 セルのセットフォーカスについても教えて頂けないでしょうか?

sea_clear
質問者

補足

セルのアクティブも無事できました。 ありがとうございました。

その他の回答 (1)

  • aloha886i
  • ベストアンサー率19% (22/113)
回答No.1

ん? ナニをしたいのかまったくわかりません! Sub mh()はナニで実行するのですか? フォーム1とどういう関係があるのですか?

sea_clear
質問者

お礼

回答ありがとうございます。 質問の仕方が下手ですいません。 ユーザフォーム1にあるプロシージャーをユーザフォーム2のボタンから 呼び出す方法を知りたかったのです。 セルのセットフォーカスについて教えていただけないでしょうか?

sea_clear
質問者

補足

セルのアクティブも無事できました。 ありがとうございました

関連するQ&A

  • EXCEL VBAのユーザーフォームに引数を渡す方法について

    すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。 シート上にコマンドボタンを2つ用意する。 コマンドボタン1を押すと変数mは1 コマンドボタン2を押すと変数mは2 としてユーザーフォームを呼び出す。 Public m As Integer Private Sub CommandButton1_Click()  m = 1  Call フォーム呼び出し(m) End Sub Private Sub CommandButton2_Click()  m = 2  Call フォーム呼び出し(m) End Sub Sub フォーム呼び出し(m As Integer)  UserForm1.Show End Sub 次にユーザフォームにコマンドボタンを1個置き、 ボタンを押したとき、mが1であれば「ボタン1」 mが2であれば「ボタン2」 とメッセージボックスを出し、ユーザーフォームを閉じる。 Private Sub CommandButton1_Click()   If m = 1 Then    MsgBox "ボタン2"   ElseIf m = 2 Then    MsgBox "ボタン2"   End If  Unload UserForm1 End Sub プロシージャ間の引数渡しは色々なテキストに載っているのですが ユーザーフォームに引数を渡す方法はどうも見つからず、 Private Sub CommandButton1_Click(m) としても、コンパイルエラーとなってしまいます。 よろしくご教示をお願いいたします。

  • Vba UserForm SetFocus

    ExcelのVbaでUserForm上に英単語のタイピング練習のソフトを作ろうとしていますが、うまくいきません。コントロールのイベントについての理解が不足しているのが分かりました。 ユーザフォーム上の複数のテキストボックス間のフォーカスの移動について教えて下さい。 UserForm1にテキストボックスを3つ、コマンドボタンを1つ配置しました。それぞれTextBox1、TextBox2、TextBox3、CommandButton1とします。 Private Sub CommandButton1_Click() TextBox3.SetFocus ・・・(1) End Sub Private Sub TextBox3_Enter() MsgBox "In TextBox3" TextBox2.SetFocus ・・・(2) End Sub 各TextBoxのTabStopプロパティは「True」、「TabIndex」は番号順になっています。 コマンドボタンのTabStopプロパティは「False」にしています。 フォームを表示し、コマンドボタンをクリックするとエラーが発生します。 (2)の実行の後(?)、(1)がエラー表示されます。 各イベントの発生のタイミング、連鎖、終了等の理解が不足していて、その理由がよく分かりません。どなたか教えていただけないでしょうか。よろしくお願いします。

  • ユーザーフォームのイベントプロシージャについて

    いつもお世話になっております。 VBAを勉強中の初心者です。 最近ユーザーフォームの作成について学習しております。 ユーザーフォームモジュールにコードを記述しているのですが、何かの拍子?ブックをオープンした場合などに、自動で空のプロシージャが作成されてしまいます。 ユーザーフォームモジュールを作成した時点で(例)にある空のプロシージャが初めから作成されていると思いますが。その後も何かの拍子にからのプロシージャが作成されてます。 (例) Private Sub UserForm_Click() End Sub (1)どのタイミングでプロシージャが作成されるのでしょうか? (2)何故自動で作成されるのでしょうか? (3)自動でプロシージャが作成されないようにすることはできるのでしょうか? 以上についてご教授ください。 よろしくお願いします。

  • エクセルVBA イベントプロシージャに引数を渡せま

    お世話になります。 エクセル2003/XP 使用です。 イベントプロシージャに引数を渡せまるかどうか教えていただけますでしょうか? 下記のコード中の変数mysheetnameを ユーザーフォーム、→ CommandButton1のプロシージャに 引数として渡して行きたいのですが、 実行すると、一番最初のWorkbook_SheetBeforeRightClickの時点で、 コンパイルエラー:  プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。 とエラー表示されます。 イベントプロシージャに引数を渡すことはできますでしょうか? ---------- ThisWorkBook内 ---------- Public mysheetname As String Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) mysheetname = ActiveSheet.Name UserForm1.Show (mysheetname)     '←変数mysheetnameの値をユーザーフォームに渡したい。 End Sub ---------- ユーザーフォーム ---------- Private Sub UserForm_Initialize(ByVal mysheetname As String ) 処理 End Sub Private Sub CommandButton1_Click(ByVal mysheetname As String ) 処理 End Sub ’--------- ここまで 引数について少し理解し始めたばかりの者です。 よろしくお願いします。

  • プロシージャをまたいて変数を扱いたい!

    こんばんは! プロシージャ間での変数の取り扱いについて読んでいてよく分からないので教えて頂きたいです。 現在、ユーザーフォームにて下記のコードを記述していますが、テキストボックス1に表示するiの値を初めは50として、正解ならiに1を加算、不正解ならi から1を減算して、テキストボックス1の内容を更新するようにしたいのですが、どのように記述すればよろしいでしょうか。 ----------------------------------------------- private sub userform_initialize() Textbox1 = int(i) end sub ----------------------------------------------- private sub commandbutton1_click() If 条件式 then "正解" else "不正解" end if call userform_initialize() end sub ------------------------------------------------- commandbutton2 以降省略

  • 再度,ExcelVBA,public変数が消える

    大変申し訳ありません。一度、この件で質問し、その回答を締め切ったばかりなのですが、やはりもう少し知りたくて質問させていただきます。 ある方の回答への補足で、以下のマクロを具体例としてあげました。ただし、以下のマクロは、時にはpublic変数が消えてしまいますが、しかし、消えないこともあります。 消える理由として、 回答していただいたものから考えて、 1.End Sub を通っていないままに終了しているから 2.不完全なマクロ 3.きちんと作られたマクロの流れ(ルーチン)ではない流れがある 4.「Public 変数は、標準モジュールを経由して、ローカルのUserForm に供給、しかし、それを戻すということはしない。つまり、a.ローカルで発生した値 →標準モジュールのPublic 変数 →UserFormのローカルのプロシージャ b.標準モジュールのPublic 変数 → UserFormのローカルのプロシージャ   ※ただし、起動時の一回きり、それ以上の持ち回しはしない。逆もしない。」この件に関して、以下のマクロに問題がある。 この様なことを考えました。 4.の場合、testMainからtest1.showを呼び出し、a=10とするが、このaの値は、testMainには戻らない(戻らないことがある)のでしょうか、あるいは、testMainのend sub の後は値が保障されないのでしょうか。 あるいは、 Worksheet_SelectionChange でend sub で終わっているので、それ以降は値が保持されないのでしょうか。 あるいは、どこかに欠陥のあるマクロなのでしょうか。 http://okwave.jp/qa/q6420530.html への回答のno.6の例のマクロでendをコメントにするかしないかで、endをコメントにした場合はend subで終わった後、値が保持されています。このこととも合わせて考えると、どこに問題があるのか、どのような問題があるのか、よく分からなくなってしまいます。 よろしくお願いします。 標準モジュールにーーーーーーーーーーーーーーーーー Option Explicit Public a As String Sub ini() MsgBox "初期化します" a = "5" End Sub Sub testMain() If a = "" Then ini MsgBox a test1.Show End Sub test1 というフォームのモジュールにーーーーーーーーーーーーーー (このフォームに コマンドボタンがあります。) Private Sub CommandButton1_Click() a = "10" Unload Me End Sub シートのモジュールにーーーーーーーーーーーーーーーーー Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) testMain End Sub

  • subプロシージャーは標準モジュールではなくフォームのコードを書く部分

    subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? エクセルにVBAでフォームを挿入し、 「Private Sub UserForm_Initialize()」 などのフォームのモジュールに、 Sub test() MsgBox "あああ" End Sub という標準モジュールに書くべきのsubプロシージャーを書いてもなにもエラーにならないし正常に動きます。 subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? それともエラーにならなくても標準モジュールに書いた方がいいですか?

  • access setfocusについて

    いつもお世話になっております。 いろいろ調べたのですが行き詰っておりまして ご教授お願いします。 下記記述でsetfocusでエラーになってしまいます。 Private Sub コマンド_Click() If IsNull(Me.テキストボックスコントロール名) Then MsgBox "未入力です" Me.テキストボックスコントロール名.SetFocus End If テキストボックスの処理記述 End Sub https://www.moug.net/tech/acvba/0030005.html こちらを参考にしました。 よろしくお願いします。

  • vbs subプロシージャーにするべきなの?し

    vbs subプロシージャーにするべきなの?しないべきなの? call a sub a() msgbox "b" end sub vbsでこのコードを実行すると問題なく動くのですが、 call a をsubとend subで囲わなくていいのでしょうか?

  • 複数のユーザーフォームをコマンドボタンにて表示・非表示させるには

    VBA勉強中のものです。 複数のユーザーフォームをコマンドボタンを使用して画面への表示切替を考えております。 例)ユーザーフォーム1,ユーザーフォーム2,ユーザーフォーム3のそれぞれにコマンドボタン1,コマンドボタン2,コマンドボタン3を作成し、   コマンドボタン1→ユーザーフォーム1を表示   コマンドボタン2→ユーザーフォーム2を表示   コマンドボタン3→ユーザーフォーム3を表示 とするようなことを考えおります。  そこで、下記のようにコードを作成したのでですが,一度表示させたユーザーフォームを再度表示させようとコマンドボタンをクリックしたら、「フォームはすでに表示させているのでモーダル表示はできません」とエラーがでてしまいます。   どなたか、どのようにしたらいいかご教授ねがいます。 サンプルコード) --------------------------------------------------- 'UserForm1のコード Private Sub CommandButton2_Click() Call UserForm2_show UserForm1.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm1.Hide End Sub ---------------------------------------------------- 'UserForm2のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm2.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm2.Hide End Sub ------------------------------------------------------- 'UserForm3のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm3.Hide End Sub Private Sub CommandButton2_Click() Call UserForm2_show UserForm3.Hide End Sub ------------------------------------------------------------ '標準モジュール コード Sub UserForm1_show() UserForm1.Show End Sub Sub UserForm2_show() UserForm2.Show End Sub Sub UserForm3_show() UserForm3.Show End Sub

専門家に質問してみよう