Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


16899 / 76732 ←次へ | 前へ→

【65296】Re:ListBoxにNullが入ってしまう。
発言  kanabun  - 10/5/5(水) 21:06 -

引用なし
パスワード
   ▼きしやん さん:

>>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]ボタンはひとつで済むかも知れませんが。

1 hits

【65273】ListBoxにNullが入ってしまう。 きしやん 10/5/4(火) 17:44 質問
【65274】Re:ListBoxにNullが入ってしまう。 かみちゃん 10/5/4(火) 18:19 発言
【65275】Re:ListBoxにNullが入ってしまう。 きしやん 10/5/4(火) 18:52 お礼
【65276】Re:ListBoxにNullが入ってしまう。 かみちゃん 10/5/4(火) 18:57 発言
【65283】Re:ListBoxにNullが入ってしまう。 きしやん 10/5/5(水) 10:15 お礼
【65284】Re:ListBoxにNullが入ってしまう。 かみちゃん 10/5/5(水) 10:30 発言
【65285】Re:ListBoxにNullが入ってしまう。 きしやん 10/5/5(水) 10:55 お礼
【65286】Re:ListBoxにNullが入ってしまう。 かみちゃん 10/5/5(水) 11:02 発言
【65288】Re:ListBoxにNullが入ってしまう。 かみちゃん 10/5/5(水) 11:24 発言
【65290】Re:ListBoxにNullが入ってしまう。 きしやん 10/5/5(水) 15:03 お礼
【65291】Re:ListBoxにNullが入ってしまう。 かみちゃん 10/5/5(水) 15:15 発言
【65292】Re:ListBoxにNullが入ってしまう。 きしやん 10/5/5(水) 15:38 お礼
【65287】Re:ListBoxにNullが入ってしまう。 kanabun 10/5/5(水) 11:14 発言
【65289】Re:ListBoxにNullが入ってしまう。 きしやん 10/5/5(水) 14:34 お礼
【65296】Re:ListBoxにNullが入ってしまう。 kanabun 10/5/5(水) 21:06 発言
【65306】Re:ListBoxにNullが入ってしまう。 きしやん 10/5/7(金) 9:18 お礼

16899 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free