0

わかりましたので、私が達成しようとしていること: ユーザーが処理する必要がある新しい注文の数を尋ねるユーザーフォームが 1 つあります。このコードでは、ユーザー入力を変数に設定しています (何かを実行するかどうかはわかりません)。

Private Sub CommandButton1_Click()
UserForm2.Show
    OrderNum.Text = NewOrders
'I changed the textbox name to OrderNum

End Sub

次に、UserForm2 がポップアップしたら、注文に関するより具体的な情報を含むデータをさらに入力できるようにしたいと考えています。したがって、Userform1 で 3 回入力した場合、新しいデータを UserForm2 に 3 回送信する必要があります。For - Next ループ (以下) を使用してみましたが、うまくいきません。ユーザーフォーム間でそのような変数を保存する方法 (または保存するかどうか) がわかりません。

Private Sub CommandButton1_Click()

Dim lRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Core Info")
OrderNum.Text = NewOrders
lRow = ws.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row

For i = 1 To NewOrders

ws.Cells(lRow, 1).Value = TextBox1.Text
ws.Cells(lRow, 3).Value = TextBox2.Text

Next i

UserForm2.Hide

End Sub

2 番目のユーザーフォームは正常にポップアップしますが、その後は何も機能しません。これを修正するために何ができるか教えてもらえますか?

注: 上記のものは CommandButton1 (デフォルト) で始まりますが、別のユーザーフォーム上にあることに気付きました。

4

1 に答える 1

0

CommandButton1あいまいな命名法の代わりに、フォーム コントロールにより簡単に認識できる名前を付けることは役に立ちます (そして良いコーディング プラクティスです) 。CommandButton1の名前を に修正UserForm1Form1_SubmitButtonます。次に、このコードを使用してフォームの送信を処理します。

Sub Form1_SubmitButton_Click()
' a textbox control named OrderNum on UserForm1 has captured the value
'Assign the value from the OrderNum textbox to a named variable in the worksheet
ActiveWorkbook.Names.Add "OrderNum", Me.OrderNum.Text

UserForm2.Show


End Sub

次に、UserForm2 でコマンド ボタンの名前を次のような名前に変更し、次のForm2_SubmitButtonコードを使用します。

Sub Form2_SubmitButton_Click()
Dim orderNum as Long
orderNum = Replace(ActiveWorkbook.Names("OrderNum").Value,"=",vbNullString)

'the rest of your code goes here.

End Sub

したがって、上記で行ったことはName、いくつかのフォームで使用する値を含むワークシートに を作成することです。この値は、次の方法でいつでも取得できます。Replace(ActiveWorkbook.Names("OrderNum").Value,"=",vbNullString)

または、コード モジュールでパブリック変数を使用することもできます。

于 2013-07-17T14:07:03.957 に答える