Excel VBA質問箱 IV

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

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


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

【32053】通信を繰り返ししすぎるとプログラムが壊れる よっちゃん 05/12/5(月) 15:35 質問[未読]
【32055】Re:通信を繰り返ししすぎるとプログラムが... やま 05/12/5(月) 16:18 発言[未読]
【32060】Re:通信を繰り返ししすぎるとプログラムが... よっちゃん 05/12/5(月) 17:07 質問[未読]
【32061】Re:通信を繰り返ししすぎるとプログラムが... Jaka 05/12/5(月) 17:12 発言[未読]
【32074】Re:通信を繰り返ししすぎるとプログラムが... こたつねこ 05/12/5(月) 20:57 回答[未読]
【32076】Re:通信を繰り返ししすぎるとプログラムが... よろずや 05/12/5(月) 21:57 発言[未読]
【32082】Re:通信を繰り返ししすぎるとプログラムが... よっちゃん 05/12/6(火) 3:33 質問[未読]
【32083】Re:通信を繰り返ししすぎるとプログラムが... よっちゃん 05/12/6(火) 3:34 発言[未読]
【32089】Re:通信を繰り返ししすぎるとプログラムが... こたつねこ 05/12/6(火) 11:18 発言[未読]
【32085】Re:通信を繰り返ししすぎるとプログラム... やっちん 05/12/6(火) 8:06 発言[未読]
【32086】Re:通信を繰り返ししすぎるとプログラムが... やっちん 05/12/6(火) 8:37 発言[未読]
【32090】Re:通信を繰り返ししすぎるとプログラムが... やっちん 05/12/6(火) 12:25 発言[未読]
【32119】Re:通信を繰り返ししすぎるとプログラムが... よっちゃん 05/12/6(火) 16:35 発言[未読]
【32120】Re:通信を繰り返ししすぎるとプログラムが... よっちゃん 05/12/6(火) 16:37 発言[未読]
【32131】Re:通信を繰り返ししすぎるとプログラムが... こたつねこ 05/12/6(火) 20:35 発言[未読]
【32139】Re:通信を繰り返ししすぎるとプログラムが... よろずや 05/12/6(火) 22:52 回答[未読]
【32169】Re:通信を繰り返ししすぎるとプログラムが... よっちゃん 05/12/8(木) 0:49 お礼[未読]

【32053】通信を繰り返ししすぎるとプログラムが壊...
質問  よっちゃん  - 05/12/5(月) 15:35 -

引用なし
パスワード
    関数で値を割り出すプログラムです。他のアプリとの通信で割り出しているのですが。
forの繰り返しでたくさん関数を作成していると、
エラーでプログラムが出来なくなったり
関数が計算できなくなってエラー表示がでるようになります。
これはプログラム上の構文の書き方のミスではなく繰り返していると
プログラム自体が壊れて通信自体が出来なくなります。
こういう場合、エクセルを終了して立ち上げるか
パソコン自体を再起動すれば元にもどりますが、
いちいち手作業でやっていてはプログラムを組む意味が半減して
しまいますので、こういう風にならないようにプログラムの方で
回避する方法ってあるもんなんでしょうか?
よかったらどなたかご教授ください。

【32055】Re:通信を繰り返ししすぎるとプログラム...
発言  やま  - 05/12/5(月) 16:18 -

引用なし
パスワード
   ▼よっちゃん さん:

>forの繰り返しでたくさん関数を作成していると、
>エラーでプログラムが出来なくなったり
>関数が計算できなくなってエラー表示がでるようになります。
>これはプログラム上の構文の書き方のミスではなく繰り返していると
>プログラム自体が壊れて通信自体が出来なくなります。

構文のミスはないかもしれませんが、プログラムの組み方が悪く無限ループで
ハングしているのだと思います。プログラムが壊れるわけではありません。

【32060】Re:通信を繰り返ししすぎるとプログラム...
質問  よっちゃん  - 05/12/5(月) 17:07 -

引用なし
パスワード
   一応、分けて作業してプログラムの負担を軽くしようと
心得ていますが、なぜか止まってしまいます。
無限ループのせいではないと思いますが、
プログラムを休ませたりしながらやった方が
いいのでしょうか?
いいやり方があったら教えてください。

【32061】Re:通信を繰り返ししすぎるとプログラム...
発言  Jaka  - 05/12/5(月) 17:12 -

引用なし
パスワード
   こんにちは。
戯言かもしれませんが、所々に
DoEvents
を入れてみたらどうでしょうか?

【32074】Re:通信を繰り返ししすぎるとプログラム...
回答  こたつねこ  - 05/12/5(月) 20:57 -

引用なし
パスワード
   よっちゃんさん、こんばんは

>forの繰り返しでたくさん関数を作成していると、
>エラーでプログラムが出来なくなったり
>関数が計算できなくなってエラー表示がでるようになります。
>これはプログラム上の構文の書き方のミスではなく繰り返していると
>プログラム自体が壊れて通信自体が出来なくなります。
>こういう場合、エクセルを終了して立ち上げるか
>パソコン自体を再起動すれば元にもどりますが、
>いちいち手作業でやっていてはプログラムを組む意味が半減して
>しまいますので、こういう風にならないようにプログラムの方で
>回避する方法ってあるもんなんでしょうか?
というか、普通そういう風にコードを組みます。
コードの組み方そのものに問題があるのだと思いますが
どのような処理で、現在どのようなコードを組んでいる
かも分からないので、回答のしようがないと思います。^^;

だたの推測ですが、
>他のアプリとの通信で割り出しているのですが。
で同期が取れていない状態ではないかとも思いますが・・・

【32076】Re:通信を繰り返ししすぎるとプログラム...
発言  よろずや  - 05/12/5(月) 21:57 -

引用なし
パスワード
   >forの繰り返しでたくさん関数を作成していると、

関数を作成とは?

どんなことをやっているのか具体的に書いてください。

【32082】Re:通信を繰り返ししすぎるとプログラム...
質問  よっちゃん  - 05/12/6(火) 3:33 -

引用なし
パスワード
   sub 値を割り出す

If Worksheets(3).Cells(4, 9) = 88 Then Exit Sub

Select Case Worksheets(3).Cells(4, 9)

Case 0 To 87


Select Case Worksheets(3).Cells(4, 9)
Case 0
a = 1
Case 1 To 86
a = Worksheets(3).Cells(1, 10)

End Select
For x = 下 To 上
Flg = False
Worksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"
Application.OnTime Now + TimeValue("00:00:1"), "値に変換"

Do While False = Flg
DoEvents
Loop

a = a + 1
Next x


For z = 下 To 上
Flg = False
Worksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"
Application.OnTime Now + TimeValue("00:00:1"), "値に変換"

Do While False = Flg
DoEvents
Loop

a = a + 1
Next x

For x = 下 To 上
Flg = False
Worksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"
Application.OnTime Now + TimeValue("00:00:1"), "値に変換"

Do While False = Flg
DoEvents
Loop

a = a + 1
Next x


For x = 下 To 上
Flg = False
Worksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"
Application.OnTime Now + TimeValue("00:00:1"), "値に変換"

Do While False = Flg
DoEvents
Loop

a = a + 1
Next x

Worksheets(3).Cells(2, 9) = 上 + 1
Worksheets(3).Cells(3, 9) = 上 + 100
Worksheets(3).Cells(4, 9) = Worksheets(3).Cells(4, 9) + 1
Select Case Worksheets(3).Cells(4, 9)
 Case 10, 20, 30, 40, 50, 60, 70, 80
 Worksheets(3).Cells(4, 9) = Worksheets(3).Cells(4, 9) & "再起"
 End Select

DoEvents

数 = 0


Worksheets(3).Cells(1, 10) = Worksheets(3).UsedRange.Rows.Count + 1
Workbooks(1).Save

値を割り出す

End Sub

Sub 値に変換()
Worksheets(3).Cells(a, 1) = Worksheets(3).Cells(a, 1)
Flg = True

End Sub

【32083】Re:通信を繰り返ししすぎるとプログラム...
発言  よっちゃん  - 05/12/6(火) 3:34 -

引用なし
パスワード
   主要ではないところは割愛していますが、
このプログラムでは定期的に通信できなくなるのでわざわざ他の
ソフトで作成したファイルを実行して
エクセル自体をクローズしたあと立ち上げています。
それでもエクセル自体たちあげればなおる場合はこれで
大丈夫ですが、パソコンを再起動させないといけないときは
アウトです。再起動した瞬間立ち上がるファイルを
私は作れませんので。しかも、2ユーザーつかっているので
選択しないとけないからです。
パソコン自体を再起動しないようにすめばこの方法でなんとか
ものすごく遅いですが、意図した結果を得られます。
ちなみにコードに"再起"とかいる箇所でエクセルをいったん閉じ
ほかのプログラムファイルで立ち上げています。。

【32085】Re:通信を繰り返ししすぎるとプログラム...
発言  やっちん  - 05/12/6(火) 8:06 -

引用なし
パスワード
   ▼よっちゃん さん:
こんにちは。
プログラムはインデントを付けた方が読みやすくなりますよ。


>For z = 下 To 上
>Flg = False
>Worksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"
>Application.OnTime Now + TimeValue("00:00:1"), "値に変換"
>
>Do While False = Flg
>DoEvents
>Loop
>
>a = a + 1
>Next x

For と Next の変数が異なってますがあってますか?
間に省略された部分があるのでしょうか・・・。

【32086】Re:通信を繰り返ししすぎるとプログラム...
発言  やっちん  - 05/12/6(火) 8:37 -

引用なし
パスワード
   ▼よっちゃん さん:
こんにちは。
間違ってたらごめんなさい。

>Worksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"
これが関数で

>Application.OnTime Now + TimeValue("00:00:1"), "値に変換"
"値に変換"が呼ばれると通信が起こるのですか?

ほぼ1秒毎に呼ばれますが関数の処理が間に合ってるのでしょうか。
多重でも問題ないということであれば忘れてください。

【32089】Re:通信を繰り返ししすぎるとプログラム...
発言  こたつねこ  - 05/12/6(火) 11:18 -

引用なし
パスワード
   よっちゃんさん、みなさんこんにちは

>主要ではないところは割愛していますが、
>このプログラムでは定期的に通信できなくなるのでわざわざ他の
>ソフトで作成したファイルを実行して
>エクセル自体をクローズしたあと立ち上げています。
この意味がよく理解できませんが

たとえば
>Worksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"
この部分で通信を行っている関数を貼り付けているのか、
別Bookの通信を行っている関数を貼り付けたセルを参照
しているのか分かりませんが、
こういう使い方をすれば他のアプリから正常に値を取得
出来ていない場合でも次のステートメントが実行されて
しまいます。
他のアプリから、値が取得できているのかのチェック処
理を設け正常に値が取得できない場合の処理とかも見当
たりませんし・・・<省略部分にあればごめんなさい。
そのために、何らかの不具合が発生しているのではあり
ませんか?

同期を取る方法に変更するとか、チェック処理を追加す
れば何とかなるのでは?と思いますが

【32090】Re:通信を繰り返ししすぎるとプログラム...
発言  やっちん  - 05/12/6(火) 12:25 -

引用なし
パスワード
   >>Worksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"
>これが関数で
>
>>Application.OnTime Now + TimeValue("00:00:1"), "値に変換"
>"値に変換"が呼ばれると通信が起こるのですか?

式を設定後値が返ってくる間、1秒待つ仕組みだったんですね。
通信の起こるタイミングを間違って認識していました。すいません。

ただ、こたつねこさんもおっしゃってるように
値が取得できているかどうかの保証はないですね。

【32119】Re:通信を繰り返ししすぎるとプログラム...
発言  よっちゃん  - 05/12/6(火) 16:35 -

引用なし
パスワード
   返信ありがとうございます

For x = 下 To 上
Flg = False
Worksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"
Application.OnTime Now + TimeValue("00:00:1"), "値に変換"

Do While False = Flg
DoEvents
Loop

のWorksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"
でます数式をいれてます。
そのあとtimevalueで1秒間まった後
値を変換して
値の変換側で

Sub 値に変換()
Worksheets(3).Cells(a, 1) = Worksheets(3).Cells(a, 1)
Flg = True

フラグをtrueにすることによりtimevalueのあとの
do until loopを抜けることにより動機をとっているつもりですが?
この方法だとだめですかね。

forのzにたいするnext x についてはただの構文ミスです。
ここに書くとき数式の×とかぶるのでzに書き直したときに
next のxを書き直すことを忘れていました。

【32120】Re:通信を繰り返ししすぎるとプログラム...
発言  よっちゃん  - 05/12/6(火) 16:37 -

引用なし
パスワード
   値を取得が取得できているか確認する方法はあるものでしょうか?
ただ、これは値が取得できない数式も入力してますので、最初から
無理なのもありますが、、

【32131】Re:通信を繰り返ししすぎるとプログラム...
発言  こたつねこ  - 05/12/6(火) 20:35 -

引用なし
パスワード
   よっちゃんさん、こんばんは

>フラグをtrueにすることによりtimevalueのあとの
>do until loopを抜けることにより動機をとっているつもりですが?
ただ単に時間待ちさせただけの処理は同期を取っているとは
言わないと思いますが・・・

>この方法だとだめですかね。
正常動作していないのですから今のままでは駄目なのだと
思いますが・・・

>値を取得が取得できているか確認する方法はあるものでしょうか?
その関数の戻り値とかの仕様はどの様になっているのでしょう?
その仕様に合わせて確認する方法もありますが・・・

>ただ、これは値が取得できない数式も入力してますので、最初から
>無理なのもありますが、、
この意味が良く分かりませんが、そのまま取ると仕様自体に
問題があるのではありませんか?

現在提示されている情報では肝心な部分の情報量が少なすぎ
て回答する事自体が難しいと思います。

【32139】Re:通信を繰り返ししすぎるとプログラム...
回答  よろずや  - 05/12/6(火) 22:52 -

引用なし
パスワード
   >Worksheets(3).Cells(a, 1).Formula = "xxxx'" & z & ".xxx'!xxxx"

DDE通信をしてるのでしょうか?

DDERequest メソッドを使いましょう。

【32169】Re:通信を繰り返ししすぎるとプログラム...
お礼  よっちゃん  - 05/12/8(木) 0:49 -

引用なし
パスワード
   いい方法が見つからないのと、
他の方法が見つかったので結果的に解決しました。
答えてくださったみなさんありがとうございました。

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