Excel VBA質問箱 IV

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

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


980 / 13644 ツリー ←次へ | 前へ→

【77117】コンボボックスから時刻指定でアプリを起動させたいと思います きよ 15/5/23(土) 1:37 質問[未読]
【77118】Re:コンボボックスから時刻指定でアプリを... β 15/5/23(土) 2:13 発言[未読]
【77119】Re:コンボボックスから時刻指定でアプリを... γ 15/5/23(土) 8:18 発言[未読]
【77120】Re:コンボボックスから時刻指定でアプリを... ichinose 15/5/23(土) 8:20 発言[未読]
【77121】Re:コンボボックスから時刻指定でアプリを... β 15/5/23(土) 9:26 発言[未読]
【77130】Re:コンボボックスから時刻指定でアプリを... きよ 15/5/23(土) 13:21 発言[未読]
【77140】Re:コンボボックスから時刻指定でアプリを... きよ 15/5/23(土) 15:06 お礼[未読]
【77122】解決策は不明ですが、何となく原因が分かっ... きよ 15/5/23(土) 10:51 質問[未読]
【77123】Re:解決策は不明ですが、何となく原因が分... γ 15/5/23(土) 11:21 発言[未読]
【77124】Re:解決策は不明ですが、何となく原因が分... γ 15/5/23(土) 11:51 発言[未読]
【77125】Re:解決策は不明ですが、何となく原因が分... きよ 15/5/23(土) 12:11 発言[未読]
【77132】Re:解決策は不明ですが、何となく原因が分... β 15/5/23(土) 13:38 発言[未読]
【77126】Re:コンボボックスから時刻指定でアプリを... きよ 15/5/23(土) 12:24 発言[未読]
【77127】Re:コンボボックスから時刻指定でアプリを... γ 15/5/23(土) 12:28 発言[未読]
【77128】Re:コンボボックスから時刻指定でアプリを... γ 15/5/23(土) 12:31 発言[未読]
【77129】Re:コンボボックスから時刻指定でアプリを... きよ 15/5/23(土) 12:57 発言[未読]
【77131】Re:コンボボックスから時刻指定でアプリを... きよ 15/5/23(土) 13:26 発言[未読]
【77134】Re:コンボボックスから時刻指定でアプリを... γ 15/5/23(土) 13:52 発言[未読]
【77136】Re:コンボボックスから時刻指定でアプリを... きよ 15/5/23(土) 14:21 発言[未読]
【77137】Re:コンボボックスから時刻指定でアプリを... γ 15/5/23(土) 14:26 発言[未読]
【77138】Re:コンボボックスから時刻指定でアプリを... γ 15/5/23(土) 14:27 発言[未読]
【77139】Re:コンボボックスから時刻指定でアプリを... きよ 15/5/23(土) 15:04 お礼[未読]
【77133】Re:コンボボックスから時刻指定でアプリを... β 15/5/23(土) 13:43 発言[未読]
【77135】Re:コンボボックスから時刻指定でアプリを... きよ 15/5/23(土) 14:02 発言[未読]
【77141】Re:コンボボックスから時刻指定でアプリを... きよ 15/5/23(土) 15:07 お礼[未読]

【77117】コンボボックスから時刻指定でアプリを起...
質問  きよ  - 15/5/23(土) 1:37 -

引用なし
パスワード
   初めまして、
皆様、宜しくお願い致します。


UserForm1に、コンボボックスを3つ、コマンドボタン1つを配置し、

コンボボックスのオブジェクト名を、
cbo_hh        ’ 時を入れるため
cbo_mm        ’ 分を入れるため
cbo_ss        ’ 秒を入れるため

コマンドボタンのオブジェクト名は、
cmd_start    ’ 実行ボタン

としました。


下記のコードを記述して、それぞれのコンボボックスで「cbo_hh」「cbo_mm」「cbo_ss」
から「時」「分」「秒」を指定しても、指定時刻になってもFirefoxが起動しません。

どうやったら、指定時刻にFirefoxを起動させることができるのでしょうか?
解決策をご存じの方がいらっしゃいましたら、ご教示のほど宜しくお願い致します。


※コードは、
−−−−−−−−−−−−−−−−−−−−−−
' (General) (Declarations)
  Dim hh As Long
  Dim mm As Long
  Dim ss As Long
  Dim starttime As Date
−−−−−−−−−−−−−−−−−−−−−−  
Private Sub UserForm_Initialize()
  
    For hh = 0 To 23
      UserForm1.cbo_hh.AddItem hh
    Next

    For mm = 0 To 59
      UserForm1.cbo_mm.AddItem mm
    Next
    
    For ss = 0 To 59
      UserForm1.cbo_ss.AddItem ss
    Next

End Sub
−−−−−−−−−−−−−−−−−−−−−−
Private Sub cmd_start_Click()
  
  hh = cbo_hh.ListIndex
  mm = cbo_mm.ListIndex
  ss = cbo_ss.ListIndex
  
  starttime = TimeSerial(hh, mm, ss)
  
  Application.OnTime EarliestTime:=starttime, Procedure:="firefox"
  
End Sub
−−−−−−−−−−−−−−−−−−−−−−
Sub firefox()

  Dim brows As Long
  brows = Shell("C:\Program Files (x86)\Mozilla Firefox\firefox.exe", vbNormalFocus)
  If brows = 0 Then MsgBox "起動に失敗しました"

End Sub
−−−−−−−−−−−−−−−−−−−−−−

【77118】Re:コンボボックスから時刻指定でアプリ...
発言  β  - 15/5/23(土) 2:13 -

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

ListIndexには、選ばれたものの、そのリスト内での位置が入っています。(0 から始まります)
選ばれていない場合は、-1 になっています。

選ばれた値、そのものは Value に入っています。

なお、通常は、実行前に、3つのリスト、すべてが選ばれているかどうかのチェックをしますね。
(ListIndexがすべて、0 以上かどうか、ないしは Value がすべて空白以外かどうか)

【77119】Re:コンボボックスから時刻指定でアプリ...
発言  γ  - 15/5/23(土) 8:18 -

引用なし
パスワード
   こんにちは。
たしか、OnTimeで指定するプロシージャは、
標準モジュールにあるプロシージャに限定されているんじゃなかったでしょうか。
firefox()を標準モジュールに移してみては?
それ以外の要因が無ければ動作するはずです。

【77120】Re:コンボボックスから時刻指定でアプリ...
発言  ichinose  - 15/5/23(土) 8:20 -

引用なし
パスワード
   >UserForm1に、コンボボックスを3つ、コマンドボタン1つを配置し、
>
>コンボボックスのオブジェクト名を、
>cbo_hh        ’ 時を入れるため
>cbo_mm        ’ 分を入れるため
>cbo_ss        ’ 秒を入れるため
>
>コマンドボタンのオブジェクト名は、
>cmd_start    ’ 実行ボタン
>
>としました。
>
>
>下記のコードを記述して、それぞれのコンボボックスで「cbo_hh」「cbo_mm」「cbo_ss」
>から「時」「分」「秒」を指定しても、指定時刻になってもFirefoxが起動しません。
>
>どうやったら、指定時刻にFirefoxを起動させることができるのでしょうか?
>解決策をご存じの方がいらっしゃいましたら、ご教示のほど宜しくお願い致します。
>
>
>※コードは、
>−−−−−−−−−−−−−−−−−−−−−−
> ' (General) (Declarations)
>  Dim hh As Long
>  Dim mm As Long
>  Dim ss As Long
>  Dim starttime As Date
>−−−−−−−−−−−−−−−−−−−−−−  
>Private Sub UserForm_Initialize()
>  
>    For hh = 0 To 23
>      UserForm1.cbo_hh.AddItem hh
>    Next
>
>    For mm = 0 To 59
>      UserForm1.cbo_mm.AddItem mm
>    Next
>    
>    For ss = 0 To 59
>      UserForm1.cbo_ss.AddItem ss
>    Next
>
>End Sub
>−−−−−−−−−−−−−−−−−−−−−−
>Private Sub cmd_start_Click()
>  
>  hh = cbo_hh.ListIndex
>  mm = cbo_mm.ListIndex
>  ss = cbo_ss.ListIndex
>  
>  starttime = TimeSerial(hh, mm, ss)
>  
>  Application.OnTime EarliestTime:=starttime, Procedure:="firefox"
>  
>End Sub
>−−−−−−−−−−−−−−−−−−−−−−
>Sub firefox()
>
>  Dim brows As Long
>  brows = Shell("C:\Program Files (x86)\Mozilla Firefox\firefox.exe", vbNormalFocus)
>  If brows = 0 Then MsgBox "起動に失敗しました"
>
>End Sub
>−−−−−−−−−−−−−−−−−−−−−−

非常に明快な質問投稿でした。

私は、firefoxはインストールしていないので代わりに
WinWord.EXEで試してみましたが、Excel2010 Win7で現象、再現できました。

コンボボックスのListIndexとValueがこの設定だと一致するので
理屈では 作動するはずですね


ただ、実行されるプロシジャーは、ユーザーフォームやクラスモジュールの指定は
できません。

Sub firefox()
で始まるプロシジャーをユーザーフォームのモジュールから 標準モジュールに
移動して試してみてください。

【77121】Re:コンボボックスから時刻指定でアプリ...
発言  β  - 15/5/23(土) 9:26 -

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

>コンボボックスのListIndexとValueがこの設定だと一致するので
>理屈では 作動するはずですね

AddItemでセットする値が、0 To 23 等でしたね。よく見ていませんでした。
なので、プロシジャの場所の問題ですね。

【77122】解決策は不明ですが、何となく原因が分か...
質問  きよ  - 15/5/23(土) 10:51 -

引用なし
パスワード
   UserForm1に、コンボボックスを3つ、コマンドボタン1つを配置し、

コンボボックスのオブジェクト名を、
cbo_hh        ' 時を入れるため
cbo_mm        ' 分を入れるため
cbo_ss        ' 秒を入れるため

コマンドボタンのオブジェクト名は、
cmd_start    ' 実行ボタン
としました。


それぞれのコンボボックス「cbo_hh」「cbo_mm」「cbo_ss」から「時」「分」「秒」を選択した際に、中身がどうなっているのかをMsgBoxで確認してみました。

最初の質問と違う場所は、●※●です。
Firefoxを起動するのではなく、MsgBoxでVBAが返してくる内容を確認してみました。

■※1と、■※2、を入れ換えながら、試したところ、VBAが返してくるのは、1900/xx/xx ??:??:?? であることが分かってきました。

質問で書かせて頂きましたコードでは、見かけ上「??:??:??」でも、内部処理は、「当日ではなくて1900年xx月xx日の、??:??:??」になっているようで、コンボボックスから指定した時刻になっても何も起きなかったのが原因のようです。

starttimeを、★当日★の「??:??:??」にするようには、どうやったらよいのでしょうか?

ご存じの方がいらっしゃいましたら、教えて頂きますよう宜しくお願い致します。


※コードは、
−−−−−−−−−−−−−−−−−−−−−−
'(General) (Declarations)
  Dim hh As Long
  Dim mm As Long
  Dim ss As Long
  'Dim starttime As Date    ' ■※1
  'Dim starttime As String    ' ■※2
−−−−−−−−−−−−−−−−−−−−−−  
  Private Sub UserForm_Initialize()
  
    For hh = 0 To 23
      UserForm1.cbo_hh.AddItem hh
    Next

    For mm = 0 To 59
      UserForm1.cbo_mm.AddItem mm
    Next
    
    For ss = 0 To 59
      UserForm1.cbo_ss.AddItem ss
    Next

End Sub
−−−−−−−−−−−−−−−−−−−−−−
Private Sub cmd_start_Click()
  
  hh = cbo_hh.ListIndex
  mm = cbo_mm.ListIndex
  ss = cbo_ss.ListIndex

  starttime = hh & mm & ss    ' ●※●
  
  MsgBox starttime        ' ●※●
  
End Sub
−−−−−−−−−−−−−−−−−−−−−−

【77123】Re:解決策は不明ですが、何となく原因が...
発言  γ  - 15/5/23(土) 11:21 -

引用なし
パスワード
   >質問で書かせて頂きましたコードでは、見かけ上「??:??:??」でも、内部処理は、「当日ではなくて1900年xx月xx日の、??:??:??」になっているようで、コンボボックスから指定した時刻になっても何も起きなかったのが原因のようです。
>
そんなことないですよ。
TimeSerialには問題がありません。

OnTimeのヘルプを読んだり、簡単な例で実験してみてください。
例:
Sub test1()
  Application.OnTime TimeSerial(11, 30, 0), "test2"
End Sub
Sub test2()
  MsgBox "OK"
End Sub

【77124】Re:解決策は不明ですが、何となく原因が...
発言  γ  - 15/5/23(土) 11:51 -

引用なし
パスワード
   追記。

OnTimeのヘルプにも下記の例があります。
> 次の使用例は、午後 5 時に my_Procedure を実行します。
> Application.OnTime TimeValue("17:00:00"), "my_Procedure"

TimeValue("17:00:00")とTimeSerial(17,0,0)は同じです。

【77125】Re:解決策は不明ですが、何となく原因が...
発言  きよ  - 15/5/23(土) 12:11 -

引用なし
パスワード
   ▼γ さん:
>追記。
>
>OnTimeのヘルプにも下記の例があります。
>> 次の使用例は、午後 5 時に my_Procedure を実行します。
>> Application.OnTime TimeValue("17:00:00"), "my_Procedure"
>
>TimeValue("17:00:00")とTimeSerial(17,0,0)は同じです。

ご指摘、どうも有り難うございます。
確かにそうですよね。
Dim starttime As Date と
Dim starttime As String を入れ換えながら試していましたら、
1900/xx/xx xx:xx:xx ってMsgBoxに出てきたので「これか?」と思ったのですが、何度やっても指定時刻に動いてくれません。

引き続き、宜しくお願い致します。

【77126】Re:コンボボックスから時刻指定でアプリ...
発言  きよ  - 15/5/23(土) 12:24 -

引用なし
パスワード
   βさん、γさん、ichinoseさん、色々とアドバイス有り難うございます。

完全に【どつぼ、にはまって】いる状態です。

なお、
・ Application.OnTime EarliestTime:=TimeValue("12:15:30"), Procedure:="firefox"

・Sub firefox()
・  browser = Shell("C:\Program Files (x86)\Mozilla Firefox\firefox.exe", vbNormalFocus)

としますと、きちんと12:15:30にFirefoxが起動しますので、つまずいている部分はTimeValue("12:15:30")の時刻の部分にコンボボックスの情報を書き込む部分だと思います。

良き解決策をご存じの方がいらっしゃいましたら、引き続きご教示の程宜しくお願い致します。

【77127】Re:コンボボックスから時刻指定でアプリ...
発言  γ  - 15/5/23(土) 12:28 -

引用なし
パスワード
   落ち着いて、
Timeserialに渡している変数が、
指定しようとしている値になっているか
をしっかり確認してください。

【77128】Re:コンボボックスから時刻指定でアプリ...
発言  γ  - 15/5/23(土) 12:31 -

引用なし
パスワード
   それから念のためですが、
ユーザーフォームを使うときには、
firefoxを標準モジュールに移しているのですね?
あなたから何のコメントが無いので訝っています。

【77129】Re:コンボボックスから時刻指定でアプリ...
発言  きよ  - 15/5/23(土) 12:57 -

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

>落ち着いて、

有り難うございます。
実は、もう悩み始めて3日目です(-_-;)


>Timeserialに渡している変数が、指定しようとしている値になっているかをしっかり確認してください。

MsgBoxで確認したり、TextBoxのテキストに代入してみたりしていますが、自分でやった限りでは、きちんとした時間になっています。


>ユーザーフォームを使うときには、firefoxを標準モジュールに移しているのですね?

今、試したところ、「標準モジュール」「フォームモジュール」「シートモジュール」「ブックモジュール」でも同じです。


>あなたから何のコメントが無いので訝っています。

コメントが遅くて、誠に申し訳ございません。

【77130】Re:コンボボックスから時刻指定でアプリ...
発言  きよ  - 15/5/23(土) 13:21 -

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

どうも有り難うございます。


>Sub firefox()
>で始まるプロシジャーをユーザーフォームのモジュールから 標準モジュールに
>移動して試してみてください。

試してみたのですが、ダメでした。
もし気がつくことがありましたら、教えて頂きますようお願い致します。

【77131】Re:コンボボックスから時刻指定でアプリ...
発言  きよ  - 15/5/23(土) 13:26 -

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

考えてみましたら、
Application.OnTime EarliestTime:=starttime, Procedure:="firefox"

で待機状態のまま、止まってしまっていますので"Firefox()"はどこにあっても引き継げてないのですね。

【77132】Re:解決策は不明ですが、何となく原因が...
発言  β  - 15/5/23(土) 13:38 -

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

>質問で書かせて頂きましたコードでは、見かけ上「??:??:??」でも、内部処理は、「当日ではなくて1900年xx月xx日の、??:??:??」になっているようで、コンボボックスから指定した時刻になっても何も起きなかったのが原因のようです。

γさんも指摘されているとおり、これが原因ではないと思いますよ。
確かに、TimeSerial で作成した日付型データは年月日が 0 になります。
(Double型変数に入れるか、あるいは CDbl関数で変換すると、整数部分は 0 )

でも、Ontime は、この形の場合、日付部分は無視して時刻を見ています。
先ほど、私のPCの時刻で13:30:00 に以下のTestを実行。
ちゃんと 13:31:40 に TestSub が実行されましたよ。

Sub Test()
  Dim hh As Long
  Dim mm As Long
  Dim ss As Long
  Dim starttime As Date
  
  hh = 13
  mm = 31
  ss = 40

  starttime = TimeSerial(hh, mm, ss)
  
  Application.OnTime starttime, "TestSUb"
  
End Sub

Sub TestSub()
  MsgBox Now()
End Sub

【77133】Re:コンボボックスから時刻指定でアプリ...
発言  β  - 15/5/23(土) 13:43 -

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

まさか とか思いますが・・・
きよさんのPC,時刻がくるっているということはないのでしょうね?
今、13:40 ですけど、全然別の時刻になってしまっているとか?

【77134】Re:コンボボックスから時刻指定でアプリ...
発言  γ  - 15/5/23(土) 13:52 -

引用なし
パスワード
   ▼きよ さん:
>▼γ さん:
>
>考えてみましたら、
>Application.OnTime EarliestTime:=starttime, Procedure:="firefox"
>
>で待機状態のまま、止まってしまっていますので"Firefox()"はどこにあっても引き継げてないのですね。

おっしゃる意味が全然分かりません。
「止まっている」とはどういう意味ですか?
ユーザーフォームが表示し続けているので作業ができないことは、
今の話と何の関係もありません。
タイマーがセットされていて、時がくれば実行されます。

最初の質問にあったコードで、
firefoxを標準モジュールに移すだけで、正常に動作しました。

ユーザーフォームに書いたコードでは指定できないと指摘しているのですから、
人の言うことは(特に年寄りのいうことは)信じましょう。

【77135】Re:コンボボックスから時刻指定でアプリ...
発言  きよ  - 15/5/23(土) 14:02 -

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

>まさか とか思いますが・・・
>きよさんのPC,時刻がくるっているということはないのでしょうね?
>今、13:40 ですけど、全然別の時刻になってしまっているとか?

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient
から、毎日1回自動で合わせるよう設定しています。

その他に、毎日1回は、手動でntp.nict.jpと同期させていますので、1日2回は標準時に合っているはずです。
もちろん、現在は2015/05/23 14:02になっています。

ところで、「ichinoseさん」は、Win7 Excel2010 WinWord.EXEで試して頂いて、現象が再現できていて、「コンボボックスのListIndexとValueがこの設定だと一致するので理屈では作動するはず」とおっしゃってくれていますが、βさんのPC環境では正常に稼動しているのでしょうか?

正常に動作しているのでしたら、コードを教えて頂けないでしょうか?
宜しくお願い致します。

【77136】Re:コンボボックスから時刻指定でアプリ...
発言  きよ  - 15/5/23(土) 14:21 -

引用なし
パスワード
   >最初の質問にあったコードで、
>firefoxを標準モジュールに移すだけで、正常に動作しました。

正常に動作した!のは凄い情報です。


>ユーザーフォームに書いたコードでは指定できないと指摘しているのですから、
> 人の言うことは(特に年寄りのいうことは)信じましょう。

疑われているようなので、一度PCを再起動してExcelを立ち上げなおして、1から作り直してみます。


>あなたから何のコメントが無いので訝っています。

少し待って下さい。
1時間以内にもう一度作れると思います。

【77137】Re:コンボボックスから時刻指定でアプリ...
発言  γ  - 15/5/23(土) 14:26 -

引用なし
パスワード
   ▼きよ さん:
>疑われているようなので、一度PCを再起動してExcelを立ち上げなおして、1から作り直してみます。

誤解しているようですが、
ユーザーフォームにおいてあるプロシージャを、
Application.OnTime myTime, procedure の
              ↑ に指定しても
動作しませんよ、と申し上げています。

それは、PCを再起動しようが、仕様でしょうから、それはできません。

標準モジュールに置くことを前提に検証してください。

【77138】Re:コンボボックスから時刻指定でアプリ...
発言  γ  - 15/5/23(土) 14:27 -

引用なし
パスワード
        ↑ に指定しても
の矢印の位置がずれていますが、了解願います。

【77139】Re:コンボボックスから時刻指定でアプリ...
お礼  きよ  - 15/5/23(土) 15:04 -

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

UserFormにコンボボックスを配置しオブジェクト名を指定するのに多少時間がかかっただけで、コードは、昨晩(今朝)にVBA研究所にアップした物を、サイトからそっくりそのままコピーしました。
●結果は、γさんのおっしゃる通りに無事に動きました。

早速、test.xlsmというファイル名を付けて保存しました。

ところが、先ほどまで使っていた(前の)ファイルを開いて標準モジュールにFirefoxをコピーしても動きません。
すごく、とても、不思議な現象です。
(一般的に言うと、ファイルの一部が壊れているというのでしょうけど)
他に、記述したコード/UserForm内のコンロトール、を作り直したいと思います。
その昔、Lotus1-2-3のR2.2Jでマクロで計算させると、再計算が出来ないという不具合があったのを思い出しました。
また、PaintShopPro Ver6で保存ファイル名の中に「10」という数字があると保存できないというバグに遭遇したこともありました。

これを機会にExcel2007のアップデートをしてみたいと思っています。
お手数をおかけ致しましたことをお詫びすると共に、どうも有り難うございました。

ちなみに、γさんが「あなたから何のコメントが無いので」という部分ですが、自分としては本日の12:24の書き込みで、皆さんに、コメントしたつもりでいました、すみませんでした。

色々と有り難うございました、今後とも宜しくお願い致します。

PS
今度は、「ERROR:本文に禁止語句が含まれています。」のエラーで投稿が遅くなりまして申し訳ございません。

【77140】Re:コンボボックスから時刻指定でアプリ...
お礼  きよ  - 15/5/23(土) 15:06 -

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

PCの再起動から、ファイルの作り直し、で無事に解決しました。
前のファイルでは標準モジュールにfirefoxを移動しても動かない状態です。

この度は、色々と有り難うございました。
今後とも、宜しくお願い致します。

【77141】Re:コンボボックスから時刻指定でアプリ...
お礼  きよ  - 15/5/23(土) 15:07 -

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

PCの再起動から、ファイルの作り直し、で無事に解決しました。
前のファイルでは標準モジュールにfirefoxを移動しても動かない状態です。

この度は、色々と有り難うございました。
今後とも、宜しくお願い致します。

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