2016-08-06 7 views
2

ブック内に次のユーザーフォームを作成しました。サブフォーム内のユーザーフォーム

[1]: http://i.stack.imgur.com/IJcfO.jpg

これは私がUserFormに詳細を入力した後、サブ関数内UserForm1.Showを呼び出しています私のコード

Sub Macro6() 

Dim lines As Long 
Dim letter As String 
Dim no As String 
Dim count As Integer 
Dim i As Integer 
Dim xRow As Long 
Dim TargetFiles As FileDialog 
Dim xDirect$, xFname$, InitialFoldr$ 
Dim DataBook As Workbook, OutBook As Workbook 
Dim DataSheet As Worksheet, OutSheet As Worksheet 

    count = Sheets.count 

    If count > 1 Then 
    For i = 1 To Sheets.count 
    If Sheets(i).Name <> "Sheet1" And Sheets(i).Name <> "Execute" And Sheets(i).Name <> "DBCONNECTORS" And Sheets(i).Name <> "Cil Connectors" Then 
     Sheets(i).Select 
Set OutBook = ActiveWorkbook 
Set OutSheet = OutBook.Sheets(i) 
Dim myValue, myValue1, myValue2, myValue3, myValue4, Myvalue5, myValue6, myValue7, myValue8, myValue9, myValue10, myValue11 As Variant 
UserForm1.TextBox1.Value = OutSheet.Name 
UserForm1.Show 
Windows("DB.xlsm").Activate 
Rows("1:1").Select 

です。 質問:UserForm1.Showを発行した後、サブ機能での次の行を実行することは可能ですか?もしそうなら、どうですか?

+0

ユーザーフォームがモーダルでない場合は、自動的に実行されます。それがモーダルであれば、フォームが再び閉じられるまで(フォームを介して実行されるコードを除く)、すべてのコードが停止する –

答えて

2

サブフックにコマンドUserForm1.Showを発行すると、サブが実行を停止し、フォーム上のコード(初期化、表示、フォーム上のユーザー入力待ちなど)が実行されます。

これは、残りの部分が無視されたか、または破棄されたことを意味するものではありません。残りのコードは単に保留状態になっています。フォームが閉じられると、あなたのサブコード内の残りのコードが実行されます。しかし、あなたがUserFormを開始した時点で、フォーカスはサブと離れて移動し、Formはすべてのコードとイベントが「間を滑り」ます。

あなたはアクティブに取得するシート(および選択された最初の行を)したい場合はformが表示される前に、あなたは、サブの最後に行UserForm1.Showを移動する必要がありますし、前のラインWindows("DB.xlsm").ActivateRows("1:1").Selectを実行します。

あなたは、このフォームが表示されたら、あなたはどちらかにする必要があります発生する場合:

  1. はあなたにあなたのコードの残りの部分をシフトする必要がありますformmodelessまたは
  2. を作りますフォームが表示されたら(たとえばUserForm_Initialize)実行される場所。

したがって、上記二つの選択肢のためのコードは、次のとおり

代替1

'... only copied over the last few rows or your above sub 
UserForm1.TextBox1.Value = OutSheet.Name 
UserForm1.Show (False) 
Windows("DB.xlsm").Activate 
Rows("1:1").Select 

代替2

'... in the code module of the UserForm us the following 
Private Sub UserForm_Initialize() 
Windows("DB.xlsm").Activate 
Rows("1:1").Select 
End Sub 

  • のTh e modal機能は、残りのコードが確実に実行されるだけでなく、また、おそらく最も重要なのは、ユーザーがシートとフォームを同時に操作できるようにすることです。フォームはもはや排他的な焦点を持っていません。上記のリンクを読んで、これがあなたの望むものであることを確認してください。
  • サブコードから残りのコードをUserForm_Inizializeに移動することは単なる命題です。 UserForm_Activateなどのコードを置くことができる場所が他にもあります。あるいは、最初にもUserFormが起きるように残りの部分を決めることさえできます。
+0

ありがとう – yuvaraj

関連する問題