Excel VBA質問箱 IV

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

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


6094 / 13645 ツリー ←次へ | 前へ→

【47246】Whileを記述しているのにWhileがないというエラーになる 翠川 水面 07/3/6(火) 10:37 質問[未読]
【47248】Re:Whileを記述しているのにWhileがないと... Blue 07/3/6(火) 10:44 回答[未読]
【47250】Re:Whileを記述しているのにWhileがないと... 翠川 水面 07/3/6(火) 10:47 お礼[未読]
【47251】Re:Whileを記述しているのにWhileがないと... Blue 07/3/6(火) 10:47 発言[未読]
【47249】Re:Whileを記述しているのにWhileがないと... Jaka 07/3/6(火) 10:47 発言[未読]
【47258】Re:Whileを記述しているのにWhileがないと... Kein 07/3/6(火) 17:15 発言[未読]

【47246】Whileを記述しているのにWhileがないとい...
質問  翠川 水面  - 07/3/6(火) 10:37 -

引用なし
パスワード
   下記のコードで「Wendに対するWhileがありません」というエラーが出るのは何故でしょうか。ちなみにかわりにDo Loopを用いても同じようにだめでした。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Integer

i = 0

While ActiveCell.Offset(i, -1).Value <> ""

If ActiveCell.Offset(i, 0).Locked = False Then
ActiveCell.Offset(i, 0).Select
Else
i = i + 1

Wend

End Sub

【47248】Re:Whileを記述しているのにWhileがない...
回答  Blue  - 07/3/6(火) 10:44 -

引用なし
パスワード
   ▼翠川 水面 さん:
>下記のコードで「Wendに対するWhileがありません」というエラーが出るのは何故でしょうか。ちなみにかわりにDo Loopを用いても同じようにだめでした。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>
>Dim i As Integer
>
>i = 0
>
>While ActiveCell.Offset(i, -1).Value <> ""
>
>If ActiveCell.Offset(i, 0).Locked = False Then
>ActiveCell.Offset(i, 0).Select
>Else
>i = i + 1
End If
>
>Wend
>
>End Sub

【47249】Re:Whileを記述しているのにWhileがない...
発言  Jaka  - 07/3/6(火) 10:47 -

引用なし
パスワード
   単にIFに対する End IF が、ないから....。

【47250】Re:Whileを記述しているのにWhileがない...
お礼  翠川 水面  - 07/3/6(火) 10:47 -

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

申し訳ありませんでした。

エラーメッセージだけをおっていてはいけないということなのですね。

肝に銘じます。

【47251】Re:Whileを記述しているのにWhileがない...
発言  Blue  - 07/3/6(火) 10:47 -

引用なし
パスワード
   ちなみにこのような単純なミスをしないためにも、ブロックごとに
インデントすることを薦めます。

今回の場合


While XXXXX
  If XXXXXXX Then
    XXXXXXX
  Else
    XXXXXXX ' ※
Wend

となっているので、※とWendのところがおかしいのがわかりやすいです。

【47258】Re:Whileを記述しているのにWhileがない...
発言  Kein  - 07/3/6(火) 17:15 -

引用なし
パスワード
   End If を補う件については良いとして、余計なお世話かもしれませんが

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i As Integer

  i = 0
  With ActiveCell
   If .Column = 1 Then Exit Sub
   While .Offset(i, -1).Value <> ""
     If .Offset(i, 0).Locked = False Then
       .Offset(i, 0).Select
     Else
       i = i + 1
     End If
   Wend
  End With
End Sub

などとしておけば、間違ってA列のセルに入力したときの処理を止められます。

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