Excel VBA質問箱 IV

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

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


2916 / 13646 ツリー ←次へ | 前へ→

【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 お礼[未読]

【65273】ListBoxにNullが入ってしまう。
質問  きしやん E-MAIL  - 10/5/4(火) 17:44 -

引用なし
パスワード
   またまた超初心者のきしやんです。
ユーザーフォームに時刻のリストボックスがあり
下記のコードでListBox1にNullがはいってしまいます。

Option Explicit
Dim stjikoku As Date, hizuke As Date, hizuke1 As Date
Dim st1 As Integer, st2 As Integer, st3 As Integer, st4 As Integer, mybtn As Integer
Dim sp1 As Integer, sp2 As Integer, sp3 As Integer, sp4 As Integer, rolly As Integer
Dim paper As Integer, fulecon As Integer
Dim seisanryou As Integer, tounyuryou As Integer, zaikoryou As Integer
Dim mymsg As String, mytitle As String, grade As String, grade1 As String, grade2 As String, mylbl As String
Dim jikan As Single
Private Sub CommandButton1_Click()
 CommandButton1.Visible = False
  
  Worksheets("sheet3").Select
 Range("d9").Select
  mytitle = "キャンペーン確認"
  hizuke = Worksheets("sheet4").Range("c4")
  hizuke1 = Worksheets("sheet4").Range("c5")
  grade = Worksheets("sheet1").Range("t18")
  mymsg = hizuke & "〜" & hizuke1 & "のキャンペーンは" & Chr(13) _
    & grade & "です"
  mybtn = MsgBox(mymsg, vbOKOnly + vbInformation, mytitle)


inputboxdata100:
  hizuke = Worksheets("sheet4").Range("c4")
  mymsg = hizuke & "の生産量を入力して下さい"
  mytitle = "生産量入力"
  seisanryou = Application.InputBox(prompt:=mymsg, Title:=mytitle, Type:=1)
 Worksheets("sheet6").Range("c5").Value = seisanryou
 mytitle = "生産量"
 mymsg = hizuke & "〜" & hizuke1 & "の生産量は" & Chr(13) & seisanryou & "tですね?"
 mybtn = MsgBox(mymsg, vbYesNo + vbQuestion, mytitle)
 If mybtn = vbNo Then
  GoTo inputboxdata100

End If

inputboxdata101:
  hizuke = Worksheets("sheet4").Range("c4")
  mymsg = hizuke & "のNo.1サイロの在庫量を入力して下さい"
  mytitle = "在庫量入力"
  zaikoryou = Application.InputBox(prompt:=mymsg, Title:=mytitle, Type:=1)
 Worksheets("sheet3").Range("d4").Value = zaikoryou
 mytitle = "在庫量"
 mymsg = hizuke & "のNo.1サイロの在庫量は" & Chr(13) & zaikoryou & "tですね?"
 mybtn = MsgBox(mymsg, vbYesNo + vbQuestion, mytitle)
   
  If mybtn = vbNo Then
  GoTo inputboxdata101

End If

inputboxdata102:
  hizuke = Worksheets("sheet4").Range("c4")
  mymsg = hizuke & "のNo.2サイロの在庫量を入力して下さい"
  mytitle = "在庫量入力"
  zaikoryou = Application.InputBox(prompt:=mymsg, Title:=mytitle, Type:=1)
 Worksheets("sheet3").Range("d13").Value = zaikoryou
 mytitle = "在庫量"
 mymsg = hizuke & "のNo.2サイロの在庫量は" & Chr(13) & zaikoryou & "tですね?"
 mybtn = MsgBox(mymsg, vbYesNo + vbQuestion, mytitle)
   
  If mybtn = vbNo Then
  GoTo inputboxdata102

End If
  
inputboxdata103:
  hizuke = Worksheets("sheet4").Range("c4")
  mymsg = hizuke & "のNo.17サイロの在庫量を入力して下さい"
  mytitle = "在庫量入力"
  zaikoryou = Application.InputBox(prompt:=mymsg, Title:=mytitle, Type:=1)
 Worksheets("sheet3").Range("d22").Value = zaikoryou
 mytitle = "在庫量"
 mymsg = hizuke & "のNo.17サイロの在庫量は" & Chr(13) & zaikoryou & "tですね?"
 mybtn = MsgBox(mymsg, vbYesNo + vbQuestion, mytitle)
   
  If mybtn = vbNo Then
  GoTo inputboxdata103
  
Else
    Worksheets("sheet3").Select
  Range("d9").Select


  grade1 = "TH-700BJ"
  grade2 = Worksheets("sheet1").Range("t18")
  If StrComp(grade1, grade2, vbTextCompare) = 0 Then
 
  Call CommandButton2_Click
  Else
 Exit Sub
 
End If
End If


End Sub

'****************************************************************
'TH-700BJの場合のサイロ投入'
'****************************************************************

Private Sub CommandButton2_Click()
  
  mymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
  mytitle = "投入時刻"
  mybtn = MsgBox(mymsg, vbOKOnly + vbInformation, mytitle)

  stjikoku = ListBox1 ・・・・・・・・・・・ ここにNullが入ってしまいます。
  mymsg = "No.1サイロの投入時刻は" & stjikoku & "ですね"
  mytitle = "投入時刻"
  mybtn = MsgBox(mymsg, vbYesNo + vbQuestion, mytitle)
  Worksheets("sheet3").Range("d9").Value = stjikoku
  If mybtn = vbNo Then
  Exit Sub
End If

  mymsg = "No.1サイロの投入時間をリストボックスより選択して下さい"
  mytitle = "投入時刻"
  mybtn = MsgBox(mymsg, vbOKOnly + vbInformation, mytitle)

End Sub
Private Sub CommandButton4_Click()

  jikan = ListBox2
 Worksheets("sheet3").Range("d10").Value = jikan
  mymsg = "No.1サイロの投入時間は" & jikan & "時間ですね"
  mytitle = "投入時間"
  mybtn = MsgBox(mymsg, vbYesNo + vbQuestion, mytitle)
  If mybtn = vbNo Then
  Exit Sub
End If

End Sub

どうか宜しくお願いします。

【65274】Re:ListBoxにNullが入ってしまう。
発言  かみちゃん E-MAIL  - 10/5/4(火) 18:19 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ユーザーフォームに時刻のリストボックスがあり

ListBox1 は、どのように設定しているのですか?
RowSource か、AddItem 等、その内容がわからないので、答えづらいです。

【65275】Re:ListBoxにNullが入ってしまう。
お礼  きしやん E-MAIL  - 10/5/4(火) 18:52 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>ユーザーフォームに時刻のリストボックスがあり
>
>ListBox1 は、どのように設定しているのですか?
>RowSource か、AddItem 等、その内容がわからないので、答えづらいです。

早速の回答ありがとうございます。
ListBox1 はRowSourceでシートより選択し、内容は16:30のような
時刻です。

【65276】Re:ListBoxにNullが入ってしまう。
発言  かみちゃん E-MAIL  - 10/5/4(火) 18:57 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>>ユーザーフォームに時刻のリストボックスがあり
>>
>>ListBox1 は、どのように設定しているのですか?
>>RowSource か、AddItem 等、その内容がわからないので、答えづらいです。
>
>早速の回答ありがとうございます。
>ListBox1 はRowSourceでシートより選択し、内容は16:30のような
>時刻です。

どのように設定しているのか、シートを再現できるように説明していただけませんか?
きしやんさんのブックを掲示板では、基本的には、見ることができないことに配慮していただければと思います。

【65283】Re:ListBoxにNullが入ってしまう。
お礼  きしやん E-MAIL  - 10/5/5(水) 10:15 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>>>ユーザーフォームに時刻のリストボックスがあり
>>>
>>>ListBox1 は、どのように設定しているのですか?
>>>RowSource か、AddItem 等、その内容がわからないので、答えづらいです。
>>
>>早速の回答ありがとうございます。
>>ListBox1 はRowSourceでシートより選択し、内容は16:30のような
>>時刻です。
>
>どのように設定しているのか、シートを再現できるように説明していただけませんか?
>きしやんさんのブックを掲示板では、基本的には、見ることができないことに配慮していただければと思います。

かみちゃんさん
説明不足ですみません。
インプットボックスで生産量等、各必要項目を入力させ、入力された値をシート(sheet3)に貼りつけ、シート上で計算させて、結果を別シート(sheet1)のセルを塗りつぶす
例えば一日を24セル(24時間)にして8時間なら8セルを塗りつぶして一本の線にする
ような感じです。
今回の質問の件は、投入時刻はある程度決まっているためシート(sheet4)に
決まった時刻を入力しておいて、ユーザーフォームのリストボックスにRowSourceで設定して、
選択させて、別シート(sheet1)セルの塗りつぶし開始位置を設定したいと
考えております。
以上まだ説明不足かもしれませんが、宜しくお願いします。

【65284】Re:ListBoxにNullが入ってしまう。
発言  かみちゃん E-MAIL  - 10/5/5(水) 10:30 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 投入時刻はある程度決まっているためシート(sheet4)に
> 決まった時刻を入力しておいて、ユーザーフォームのリストボックスにRowSourceで設定して、

きしやんさんのブックが見てみると、簡単にわかりそうなのですが、
こちらで再現用のシートを作るにあたって
ListBox1のRowSourceプロパティの値を教えてください。

あと、
Sheet4のシート内容を以下のようにサンプルデータで教えてください。

  A  B  C
1
2
3

上記のようなシート内容を提示されるときは、投稿欄右下にある「等幅」にチェックをつけてください。

【65285】Re:ListBoxにNullが入ってしまう。
お礼  きしやん E-MAIL  - 10/5/5(水) 10:55 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>> 投入時刻はある程度決まっているためシート(sheet4)に
>> 決まった時刻を入力しておいて、ユーザーフォームのリストボックスにRowSourceで設定して、
>
>きしやんさんのブックが見てみると、簡単にわかりそうなのですが、
>こちらで再現用のシートを作るにあたって
>ListBox1のRowSourceプロパティの値を教えてください。
>
>あと、
>Sheet4のシート内容を以下のようにサンプルデータで教えてください。
>
>  A  B  C
>1
>2
>3
>
>上記のようなシート内容を提示されるときは、投稿欄右下にある「等幅」にチェックをつけてください。

かみちゃん さん
ありがとうございます。


>  A   B  C
>1 14:00
>2 18:00
>3 22:00
以上のようなものです。

【65286】Re:ListBoxにNullが入ってしまう。
発言  かみちゃん E-MAIL  - 10/5/5(水) 11:02 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>  A   B  C
>>1 14:00
>>2 18:00
>>3 22:00
>以上のようなものです。

Sheet4の内容はわかりましたが、それは、日付型で入力していますよね?

>>ListBox1のRowSourceプロパティの値を教えてください。

ということも聞いているのですが、いかがでしょうか?

> ListBox1にNullがはいってしまいます。

もしかして、
stjikoku = ListBox1
で「型が一致しません」というエラーになりませんか?
それは、ListBox1 で、値の一覧から選択していますか?
選択していない場合は、上記のエラーが出て ListBox1 は Null というより ""
という値が格納されます。
Dim stjikoku As Date
と宣言されているので、「型が一致しません」というエラーになると思います。

それとも、選択しているのに、Null が入るということですか?

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

引用なし
パスワード
   ▼きしやん さん:
横から失礼します。

>下記のコードでListBox1にNullがはいってしまいます。

それはListBox1のどのアイテムも「選択されていない」からでは?


>Private Sub CommandButton1_Click()
 (途中 省略)
 
  ▼ここで CommandButton2をコードでクリックさせています 
>  Call CommandButton2_Click
>
>End Sub

▼CommandButton2が押されてから、ListBoxのアイテムを選択する
 いとまもなく、ListBox1のいま選択されているアイテムを変数に
 代入しようとしています。
>Private Sub CommandButton2_Click()
>  
>  mymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
>  mytitle = "投入時刻"
>  mybtn = MsgBox(mymsg, vbOKOnly + vbInformation, mytitle)
>
>  stjikoku = ListBox1 ・・・・・・・・・・・ ここにNullが入ってしまいます。


'------------------- (改良 案)

>  Call CommandButton2_Click
の行を削除し、
代わりに、(CommandButton2の最初のコード部分 )MsgBox 表示を
>  mymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
>  mytitle = "投入時刻"
>  mybtn = MsgBox(mymsg, vbOKOnly + vbInformation, mytitle)
>
そこに移動して、

ユーザーがListBox1からどれかの時刻を選択したあと、

Private Sub CommandButton2_Click()
  if ListBox1.ListIndex < 0 Then
    Msgbox "Listから 時刻を選択してください"
    Exit Sub
  end if
 stjikoku = ListBox1.VALUE

のように直してみては どうですか?

【65288】Re:ListBoxにNullが入ってしまう。
発言  かみちゃん E-MAIL  - 10/5/5(水) 11:24 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>>  A   B  C
>>>1 14:00
>>>2 18:00
>>>3 22:00
>>以上のようなものです。
>
>Sheet4の内容はわかりましたが、それは、日付型で入力していますよね?
>
>>>ListBox1のRowSourceプロパティの値を教えてください。
>
>ということも聞いているのですが、いかがでしょうか?
>
>> ListBox1にNullがはいってしまいます。
>
>もしかして、
>stjikoku = ListBox1
>で「型が一致しません」というエラーになりませんか?
>それは、ListBox1 で、値の一覧から選択していますか?
>選択していない場合は、上記のエラーが出て ListBox1 は Null というより ""
>という値が格納されます。
>Dim stjikoku As Date
>と宣言されているので、「型が一致しません」というエラーになると思います。
>
>それとも、選択しているのに、Null が入るということですか?

事象がわかりました。
「Nullの使い方が不正です」というエラーが出るのですね?
それは、やはりListBox1で選択していないときに限定されていると思います。

なんとなく、MsgBox がしつこい感じはしますが、以下のような修正するといかがですか?

ポイントは★の行です。(kanabunさんとかぶりますが・・・)
☆の行は変更箇所です。

Private Sub CommandButton2_Click()
 Do
  mymsg = "No.1サイロの投入時間をリストボックスより選択して下さい"
  mytitle = "投入時刻"
  mybtn = MsgBox(mymsg, vbOKCancel + vbInformation, mytitle) '☆
  If mybtn = vbCancel Then Exit Do '☆
  If ListBox1.ListIndex > -1 Then '★
   stjikoku = ListBox1

   mymsg = "No.1サイロの投入時刻は" & stjikoku & "ですね"
   mytitle = "投入時刻"
   mybtn = MsgBox(mymsg, vbYesNo + vbQuestion, mytitle)
   If mybtn = vbYes Then
    Worksheets("Sheet3").Range("D9").Value = stjikoku
   End If
  End If '★
 Loop
End Sub

【65289】Re:ListBoxにNullが入ってしまう。
お礼  きしやん E-MAIL  - 10/5/5(水) 14:34 -

引用なし
パスワード
   ▼kanabun さん:
>▼きしやん さん:
>横から失礼します。
>
>>下記のコードでListBox1にNullがはいってしまいます。
>
>それはListBox1のどのアイテムも「選択されていない」からでは?
>
>
>>Private Sub CommandButton1_Click()
> (途中 省略)
> 
>  ▼ここで CommandButton2をコードでクリックさせています 
>>  Call CommandButton2_Click
>>
>>End Sub
>
>▼CommandButton2が押されてから、ListBoxのアイテムを選択する
> いとまもなく、ListBox1のいま選択されているアイテムを変数に
> 代入しようとしています。
>>Private Sub CommandButton2_Click()
>>  
>>  mymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
>>  mytitle = "投入時刻"
>>  mybtn = MsgBox(mymsg, vbOKOnly + vbInformation, mytitle)
>>
>>  stjikoku = ListBox1 ・・・・・・・・・・・ ここにNullが入ってしまいます。
>
>
>'------------------- (改良 案)
>
>>  Call CommandButton2_Click
>の行を削除し、
>代わりに、(CommandButton2の最初のコード部分 )MsgBox 表示を
>>  mymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
>>  mytitle = "投入時刻"
>>  mybtn = MsgBox(mymsg, vbOKOnly + vbInformation, mytitle)
>>
>そこに移動して、
>
>ユーザーがListBox1からどれかの時刻を選択したあと、
>
>Private Sub CommandButton2_Click()
>  if ListBox1.ListIndex < 0 Then
>    Msgbox "Listから 時刻を選択してください"
>    Exit Sub
>  end if
> stjikoku = ListBox1.VALUE
>
>のように直してみては どうですか?

kanabun さん

ありがとうございます。
Call CommandButton2_Clickの項は説明不足でしたが、
まだ作成途中ですが条件分岐を考えておりまして、select caseも
考えていますが、構文が複雑になるかと思い、subルーチン的な
ものが出来ればと考えております。
このような場合kanabun さんの方法で可能でしょうか
どうか宜しくお願いします。

【65290】Re:ListBoxにNullが入ってしまう。
お礼  きしやん E-MAIL  - 10/5/5(水) 15:03 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>>>  A   B  C
>>>>1 14:00
>>>>2 18:00
>>>>3 22:00
>>>以上のようなものです。
>>
>>Sheet4の内容はわかりましたが、それは、日付型で入力していますよね?
>>
>>>>ListBox1のRowSourceプロパティの値を教えてください。
>>
>>ということも聞いているのですが、いかがでしょうか?
>>
>>> ListBox1にNullがはいってしまいます。
>>
>>もしかして、
>>stjikoku = ListBox1
>>で「型が一致しません」というエラーになりませんか?
>>それは、ListBox1 で、値の一覧から選択していますか?
>>選択していない場合は、上記のエラーが出て ListBox1 は Null というより ""
>>という値が格納されます。
>>Dim stjikoku As Date
>>と宣言されているので、「型が一致しません」というエラーになると思います。
>>
>>それとも、選択しているのに、Null が入るということですか?
>
>事象がわかりました。
>「Nullの使い方が不正です」というエラーが出るのですね?
>それは、やはりListBox1で選択していないときに限定されていると思います。
>
>なんとなく、MsgBox がしつこい感じはしますが、以下のような修正するといかがですか?
>
>ポイントは★の行です。(kanabunさんとかぶりますが・・・)
>☆の行は変更箇所です。
>
>Private Sub CommandButton2_Click()
> Do
>  mymsg = "No.1サイロの投入時間をリストボックスより選択して下さい"
>  mytitle = "投入時刻"
>  mybtn = MsgBox(mymsg, vbOKCancel + vbInformation, mytitle) '☆
>  If mybtn = vbCancel Then Exit Do '☆
>  If ListBox1.ListIndex > -1 Then '★
>   stjikoku = ListBox1
>
>   mymsg = "No.1サイロの投入時刻は" & stjikoku & "ですね"
>   mytitle = "投入時刻"
>   mybtn = MsgBox(mymsg, vbYesNo + vbQuestion, mytitle)
>   If mybtn = vbYes Then
>    Worksheets("Sheet3").Range("D9").Value = stjikoku
>   End If
>  End If '★
> Loop
>End Sub

かみちゃん さん
ありがとうございます。
早速試してみました結果、
mymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
OKクリックで進まず、cancelクリックで
mymsg = "No.1サイロの投入時間をリストボックスより選択して下さい"
OKクリックでListBox1選択可能になり、時刻選択後CommandButton2
クリックでmymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
OKクリックでmymsg = "No.1サイロの投入時刻は" & stjikoku & "ですね"
はいクリックでmymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
OKクリックでmymsg = "No.1サイロの投入時刻は" & stjikoku & "ですね"
はいクリックでmymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
OKクリックでmymsg = "No.1サイロの投入時刻は" & stjikoku & "ですね"
以下繰り返し、いいえでmymsg = "No.1サイロの投入時間をリストボックスより選択して下さい"に進めました。
私はDO Loopはあまり使ったことがないのでご教授願えれば幸いです。

【65291】Re:ListBoxにNullが入ってしまう。
発言  かみちゃん E-MAIL  - 10/5/5(水) 15:15 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 私はDO Loopはあまり使ったことがない

仕様どおりのつもりです。
ただ、MsgBoxがしつこい感じはしたと思います。

Private Sub CommandButton2_Click()

End Sub

を現在のコードから全部差替えてください。
説明を読む以上、☆の行の修正ができていないなど、きちんと差し替えられていないように感じます。

Private Sub CommandButton2_Click()
 Do
  mymsg = "No.1サイロの投入時間をリストボックスより選択して下さい"
  mytitle = "投入時刻"
  mybtn = MsgBox(mymsg, vbOKCancel + vbInformation, mytitle) '☆
  If mybtn = vbCancel Then Exit Do '☆
  If ListBox1.ListIndex > -1 Then '★
   stjikoku = ListBox1

   mymsg = "No.1サイロの投入時刻は" & stjikoku & "ですね"
   mytitle = "投入時刻"
   mybtn = MsgBox(mymsg, vbYesNo + vbQuestion, mytitle)
   If mybtn = vbYes Then
    Worksheets("Sheet3").Range("D9").Value = stjikoku
   End If
  End If '★
 Loop

 '◆ここにコードは書かない◆

End Sub

>mymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
>OKクリックで進まず、cancelクリックで

ListBox1が選択されていない場合、何度も
「No.1サイロの投入時刻をリストボックスより選択して下さい」
を表示するようにしています。
「キャンセル」をクリックしたら、Exit Do で Loopを抜けますが、
Loop と End Subの間にコードを書いているのではないですか?
そこには何も書かないコードを修正提案しています。

今一度ご確認ください。

【65292】Re:ListBoxにNullが入ってしまう。
お礼  きしやん E-MAIL  - 10/5/5(水) 15:38 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>> 私はDO Loopはあまり使ったことがない
>
>仕様どおりのつもりです。
>ただ、MsgBoxがしつこい感じはしたと思います。
>
>Private Sub CommandButton2_Click()
>
>End Sub
>
>を現在のコードから全部差替えてください。
>説明を読む以上、☆の行の修正ができていないなど、きちんと差し替えられていないように感じます。
>
>Private Sub CommandButton2_Click()
> Do
>  mymsg = "No.1サイロの投入時間をリストボックスより選択して下さい"
>  mytitle = "投入時刻"
>  mybtn = MsgBox(mymsg, vbOKCancel + vbInformation, mytitle) '☆
>  If mybtn = vbCancel Then Exit Do '☆
>  If ListBox1.ListIndex > -1 Then '★
>   stjikoku = ListBox1
>
>   mymsg = "No.1サイロの投入時刻は" & stjikoku & "ですね"
>   mytitle = "投入時刻"
>   mybtn = MsgBox(mymsg, vbYesNo + vbQuestion, mytitle)
>   If mybtn = vbYes Then
>    Worksheets("Sheet3").Range("D9").Value = stjikoku
>   End If
>  End If '★
> Loop
>
> '◆ここにコードは書かない◆
>
>End Sub
>
>>mymsg = "No.1サイロの投入時刻をリストボックスより選択して下さい"
>>OKクリックで進まず、cancelクリックで
>
>ListBox1が選択されていない場合、何度も
>「No.1サイロの投入時刻をリストボックスより選択して下さい」
>を表示するようにしています。
>「キャンセル」をクリックしたら、Exit Do で Loopを抜けますが、
>Loop と End Subの間にコードを書いているのではないですか?
>そこには何も書かないコードを修正提案しています。
>
>今一度ご確認ください。

かみちゃん さん
ありがとうございます。
修正して試してみました。
「キャンセル」で進みました。
ありがとうございました。

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

【65306】Re:ListBoxにNullが入ってしまう。
お礼  きしやん E-MAIL  - 10/5/7(金) 9:18 -

引用なし
パスワード
   ▼kanabun さん:
>▼きしやん さん:
>
>>>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]ボタンはひとつで済むかも知れませんが。

kanabun さん:
丁寧な説明ありがとうございました。
kanabunさんの説明の通り、ユーザーフォームは高機能な「複合InputBox」
という考えで、再考し作成しなおしてみたいと思います。
ありがとうございました。

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