|
▼きしやん さん:
>>Private Sub CommandButton2_Click()
>> if ListBox1.ListIndex < 0 Then
>> Msgbox "Listから 時刻を選択してください"
>> Exit Sub
>> end if
>> stjikoku = ListBox1.VALUE
>>
>>のように直してみては どうですか?
ListBoxにNullがはいってしまう原因と対処法については
お分かりになりましたでしょうか?
>Call CommandButton2_Clickの項は説明不足でしたが、
>まだ作成途中ですが条件分岐を考えておりまして、select caseも
>考えていますが、構文が複雑になるかと思い、subルーチン的な
>ものが出来ればと考えております。
>このような場合kanabun さんの方法で可能でしょうか
え〜っと、UserFormの各論のまえに 概論をひとつ。
ユーザーフォームというのは、いわば高機能な「複合InputBox」
なので、UserForm のなかで個々のデータ入力を 一回一回
InputBoxで個別に実行するのは、入力したデータの表示がすぐ消えて
しまうので、ユーザーにとって決して入力しやすいインターフェース
ではないと思います。
UserFormを 複合InputBoxとして利用するなら、複数入力項目別に
TextBoxやComboBoxを置いておいて、ユーザーに自由に(相互の値を
確認させながら)入力させ、全部入力が終わった時点で、
[OK]ボタンを押すようにするのがいいでしょう。
そのような「複合InputBoxとしての UserForm」のイメージを
参考までに、以下に紹介します。
新しいUserFormに LabelとTextBoxとComboBox をそれぞれ4つづつ、
以下のLayoutの感じで配置します
┏━━━━━━━━━━━━━━━━━━━━━━━┓
┃ [Label1] 【TextBox1 】 【ComboBox1】 ┃
┃ [Label2] 【TextBox2 】 【ComboBox2】 ┃
┃ [Label3] 【TextBox3 】 【ComboBox3】 ┃
┃ [Label4] 【TextBox4 】 【ComboBox4】 ┃
┃ ┃
┃ 【CommandButton1】【CommandButton2】 ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━┛
Option Explicit
'★モジュールレベル変数は必要最小限にとどめる!
Private Grade As String
Private Hizuke As Date, Hizuke1 As Date
'▼UserForm 初期化時
' LabelのCation設定、ComboBoxリスト設定など
Private Sub UserForm_Initialize()
Dim c As Range
Dim i As Long
Dim SrcList
With Worksheets("sheet4")
Hizuke = .Range("c4").Value '★Valueプロパティを省略しない!
Hizuke1 = .Range("c5").Value
'ComboBox用 時刻リスト _
◆「Sheet4」の[B2]以降にあると仮定 ◆要 変更
' 時刻データを "h:mm"フォーマットした文字列の配列に入れる
SrcList = Application.Text( _
.Range("B2", .Range("B1").End(xlDown)), "h:mm")
End With
Me.Caption = Hizuke & "〜" & Hizuke1 & "のキャンペーンは " _
& Grade & "です"
Label1.Caption = "生産量"
Label2.Caption = "No.1サイロの在庫量"
Label3.Caption = "No.2サイロの在庫量"
Label4.Caption = "No.17サイロの在庫量"
For i = 1 To 4
With Controls("ComboBox" & i)
.RowSource = ""
.List = SrcList
End With
Next
CommandButton1.Caption = "転記1"
CommandButton2.Caption = "転記2(時刻)"
End Sub
'Initialize後の画面はこんなふうになるはずです
┏━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 生産量 【 】 【 】 ┃
┃ No.1サイロの在庫量 【 】 【 】 ┃
┃ No.2サイロの在庫量 【 】 【 】 ┃
┃ No.17サイロの在庫量【 】 【 】 ┃
┃ ┃
┃ [ 転記1 ] [転記2(時刻)] ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━┛
'▼4つのTextBoxの値を入力後 量をセルに転記する
Private Sub CommandButton1_Click()
Dim i As Long
Dim msg As String
Dim grade1 As String
Dim grade2 As String
'TextBox 入力チェック
For i = 1 To 4
msg = Controls("TextBox" & i).Text
If Len(msg) = 0 Then
MsgBox Controls("Label" & i).Caption & " が未入力です"
Exit Sub
End If
Next
'シートに代入
Worksheets("sheet6").Range("c5").Value = CLng(TextBox1.Text)
With Worksheets("Sheet3")
.Select
.Range("d4").Value = CLng(TextBox2.Text)
.Range("d13").Value = CLng(TextBox3.Text)
.Range("d22").Value = CLng(TextBox4.Text)
End With
grade1 = "TH-700BJ"
grade2 = Worksheets("sheet1").Range("t18").Value
If StrComp(grade1, grade2, vbTextCompare) = 0 Then
msg = "つぎに投入時刻を各ComboBox より選択してから" _
& "入力2ボタン を押してください"
MsgBox msg, vbInformation, "入力1 完了しました"
End If
End Sub
'▼4つのComboBoxの「投入時刻」をシートに転記する
Private Sub CommandButton2_Click()
Dim i As Long
Dim c As Range
Set c = Worksheets("sheet3").Range("d9")
For i = 1 To 4
With Controls("ComboBox" & i)
If .ListIndex < 0 Then
MsgBox Controls("Label" & i).Caption _
& "の投入時刻が未選択です", vbCritical
Else
c.Item(i).Value = .Value
End If
End With
Next
End Sub
補足
通常のInputBoxのように [OK]ボタンはひとつで済むかも知れませんが。
|
|