Excel VBA質問箱 IV

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

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


2205 / 76734 ←次へ | 前へ→

【80173】Re:VBA Do Loop Untilでエラー
発言  γ  - 18/10/6(土) 11:44 -

引用なし
パスワード
   時間がとれたので内容を見てみました。
下記の例で、エラーとなりますね。
そもそもですが、Loop処理の中で再帰呼び出しは不可避なんでしょうか?
何をしようとされているか説明が無いのでよくわかりませんが。

理由は不明ですが、
記法によってエラーが避けられるならそれに従うのがよろしいかと。

Sub test()
  [H1:H5].Value = Application.Transpose(Array(1, 2, 3, 5, 1)) 'データ設定
  Call 支(1, False, 1)  'エラーとならない
End Sub

Sub test2()
  [H1:H5].Value = Application.Transpose(Array(1, 2, 3, 5, 1)) 'データ設定
  Call 支2(1, False, 1)  '「式が複雑すぎます」というエラーとなる
End Sub

Function 支(ByRef currentRow As Long, ByVal flag As Boolean, ByVal 列 As Byte)
  Dim myLevel As Byte
  Dim I_Flag As Boolean

  With ActiveSheet
    myLevel = Val(.Range("H" & currentRow))
    Do Until myLevel > Val(.Range("H" & currentRow))
      
      ' ここで作業
      
      currentRow = currentRow + 1
      If myLevel < Val(.Range("H" & currentRow)) Then Call 支(currentRow, I_Flag, 列)
    Loop
  End With
End Function

Function 支2(ByRef currentRow As Long, ByVal flag As Boolean, ByVal 列 As Byte)
  Dim myLevel As Byte
  Dim I_Flag As Boolean

  With ActiveSheet
    myLevel = Val(.Range("H" & currentRow))
    Do
      
      ' ここで作業
      
      currentRow = currentRow + 1
      If myLevel < Val(.Range("H" & currentRow)) Then Call 支2(currentRow, I_Flag, 列)
    Loop Until myLevel > Val(.Range("H" & currentRow))
  End With
End Function
7 hits

【80163】VBA Do Loop Untilでエラー まよい人 18/10/2(火) 15:16 質問[未読]
【80164】Re:VBA Do Loop Untilでエラー γ 18/10/2(火) 20:55 発言[未読]
【80169】Re:VBA Do Loop Untilでエラー まよい人 18/10/4(木) 15:54 お礼[未読]
【80171】Re:VBA Do Loop Untilでエラー γ 18/10/4(木) 19:23 発言[未読]
【80173】Re:VBA Do Loop Untilでエラー γ 18/10/6(土) 11:44 発言[未読]
【80175】Re:VBA Do Loop Untilでエラー γ 18/10/6(土) 17:22 発言[未読]

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