Excel VBA質問箱 IV

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

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


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

【77682】無限ループから他のマクルへの分岐 茶―坊 15/11/28(土) 21:00 質問[未読]
【77684】Re:無限ループから他のマクルへの分岐 β 15/11/28(土) 22:54 発言[未読]
【77690】Re:無限ループから他のマクルへの分岐 β 15/11/29(日) 22:34 発言[未読]
【77691】Re:無限ループから他のマクロへの分岐 茶ー坊 15/11/30(月) 0:49 お礼[未読]

【77682】無限ループから他のマクルへの分岐
質問  茶―坊  - 15/11/28(土) 21:00 -

引用なし
パスワード
   マクロ初心者です
 Sub macro1()

  for i=1 to 10

   Caluculate(再計算)

  ****************

  if i=10 then i=1

  next

 End Sub

極端な例ですが こんなループから
    **********
のところで他の Ctrl+Aとかで 他のマクロに分岐したいのですが 
車がある速度で走っているときの 刻々の 走行距離を表示し
途中で速度を変えたりするマクロを実行したいのですが
 如何でしょうか、よろしくお願いいたします

【77684】Re:無限ループから他のマクルへの分岐
発言  β  - 15/11/28(土) 22:54 -

引用なし
パスワード
   ▼茶―坊 さん:

いまいち要件が分からないのですが、たとえば以下のコードは
最初 Proc1 が実行されます。
で、→キーをおすと Proc2 の実行に変わります。
←キーをおすと Proc1 の実行になります。
何度でも切り替えはできますが、Shiftキーを押すことで終了します。
Shiftキーは長めに押してください。

Private Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long

Sub Test()
  Dim rtn As Long
  Dim flag As Boolean
  
  flag = True
  
  Do
  
    rtn = GetAsyncKeyState(vbKeyShift)
    rtn = rtn And &H80000000
    If rtn <> 0 Then Exit Do
    rtn = GetAsyncKeyState(vbKeyRight)
    rtn = rtn And &H80000000
    If rtn <> 0 Then flag = False
    rtn = GetAsyncKeyState(vbKeyLeft)
    rtn = rtn And &H80000000
    If rtn <> 0 Then flag = True
    
    If flag Then
      Proc1
    Else
      Proc2
    End If
    
    DoEvents
    
  Loop
  
  Range("A1").Value = "終了"
  
End Sub

Sub Proc1()
  Range("A1").Value = 1
End Sub

Sub Proc2()
  Range("A1").Value = 2
End Sub

【77690】Re:無限ループから他のマクルへの分岐
発言  β  - 15/11/29(日) 22:34 -

引用なし
パスワード
   ▼茶―坊 さん:

γさんの回答を拝見して、あぁ、そうだと。
何も、βがアップしたような、とってつけたようなコード処理は不要でしたね。

以下のようなコードにして、ChangeStatusに たとえば ショートカットキー a、
StopLoop に ショートカットキー z を割り振っておけば、Ctrl/a で Proc1 と Proc2 の切り替え。
Ctrl/z で終了になりますね。

Dim flag As Boolean
Dim DoLoop As Boolean

Sub test()
  DoLoop = True
  flag = True
  Do
    If flag Then
      proc1
    Else
      Proc2
    End If
    
    DoEvents
    
  Loop While DoLoop
  
  Range("A1").Value = "終了"
  
End Sub

Sub proc1()
  Range("A1").Value = 1
End Sub

Sub Proc2()
  Range("A1").Value = 2
End Sub

Sub ChangeStatus() 'Ctrl/a
  flag = Not flag
End Sub

Sub StopLoop()
  DoLoop = False 'Ctrl/z
End Sub

【77691】Re:無限ループから他のマクロへの分岐
お礼  茶ー坊  - 15/11/30(月) 0:49 -

引用なし
パスワード
   ▼β さん:
有難うございました 書かれていることの内容はまだ完全には理解できてませんが
思い通りに動いてくれました now()関数を セルに書いておいて このマクロを走らせると 刻々と時刻が動いてくれました そう上で Proc1 Proc2 StopLoop で終了しました ・・・・ 素早いご回答ありがとうございました。

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