■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#717-0Withステートメントについてとほほ1999-08-11(水) 11:18
     #719-0RE#717:WithステートメントについてZero1999-08-11(水) 12:21
     #728-0RE#719:Withステートメントについて(お礼)とほほ1999-08-11(水) 17:43
     #729-0RE#717:Withステートメントについて?とほほ1999-08-11(水) 17:51
     #731-0RE#729:Withステートメントについて?ちゃっぴぃ1999-08-11(水) 18:19
     #730-0RE#729:Withステートメントについて?Zero1999-08-11(水) 18:19
     #733-0RE#730:Withステートメントについて?とほほ1999-08-11(水) 18:25
     #735-0RE#730:Withステートメントについて?ちゃっぴぃ1999-08-11(水) 18:40
     #736-0RE#730:Withステートメントについて2魔界の仮面弁士1999-08-11(水) 19:26
#717-0
Withステートメントについて
みなさん、こんにちわ。

Withステートメントを、「End With」の記述無しで抜けても良いのでしょうか?

# With Label
#     .Caption="123"
#     if ×××=〇〇〇 Then
#        Exit Sub '極端な例ですが、この様に抜けてもOK(影響なし)?
#     End If
# End With
#719-0
RE#717:Withステートメントについて
> Withステートメントを、「End With」の記述無しで抜けても良いのでしょうか?
> 
> # With Label
> #     .Caption="123"
> #     if ×××=〇〇〇 Then
> #        Exit Sub '極端な例ですが、この様に抜けてもOK(影響なし)?
> #     End If
> # End With

だめです。
「こんな失敗しました」の方に、Kataさんの失敗談があります。
#728-0
RE#719:Withステートメントについて(お礼)
> > Withステートメントを、「End With」の記述無しで抜けても良いのでしょうか?
> だめです。
> 「こんな失敗しました」の方に、Kataさんの失敗談があります。

なるほどありました。ありがとうございました。m(_ _)m
#729-0
RE#717:Withステートメントについて?
> Withステートメントを、「End With」の記述無しで抜けても良いのでしょうか?
> 
> # With Label
> #     .Caption="123"
> #     if ×××=〇〇〇 Then
> #        Exit Sub '極端な例ですが、この様に抜けてもOK(影響なし)?
> #     End If
> # End With

何度もすいません。「Exit Sub」の場合は抜けても良いのではないでしょうか?
(「Exit Sub」の前に「End With」は、記述出来ないですよねぇ...???)
#731-0
RE#729:Withステートメントについて?
> > Withステートメントを、「End With」の記述無しで抜けても良いのでしょうか?
> > 
> > # With Label
> > #     .Caption="123"
> > #     if ×××=〇〇〇 Then
> > #        Exit Sub '極端な例ですが、この様に抜けてもOK(影響なし)?
> > #     End If
> > # End With
> 
> 何度もすいません。「Exit Sub」の場合は抜けても良いのではないでしょうか?
> (「Exit Sub」の前に「End With」は、記述出来ないですよねぇ...???)

良いと思います。
私は当たった事無いです。

−−−−−−−−−−−−−−−−
Go!Go!V友! ○(⌒o ⌒)。
V友応援会 お茶くみ ちゃっぴぃ
#730-0
RE#729:Withステートメントについて?
> 何度もすいません。「Exit Sub」の場合は抜けても良いのではないでしょうか?
> (「Exit Sub」の前に「End With」は、記述出来ないですよねぇ...???)

もちろん、

    With Label
        .Caption="123"
        if ×××=〇〇〇 Then
           End With '<-- ここ
           Exit Sub
        End If
    End With

こんな風にはかけませんが、オンラインヘルプにあるように、「End With ステートメントを呼び出
さずに With 制御構造外のステートメントを呼び出すことはできない」のですから、With制御構造
内で、Ifステートメントなどを使う事がそもそもいけないのでは?
つまり、「Withステートメントを通ったら、End Withステートメントを*必ず*通らなければならな
いし、その間に別の制御構造が入ってはならない」と言う事です。

ですから、あえて書き直すなら

    With Label
        .Caption="123"
    End With
    if ×××=〇〇〇 Then
       Exit Sub
    End If

のように、Ifステートメントによる制御構造自体を、Withの外に出すしかないです。
#733-0
RE#730:Withステートメントについて?
Zeroさん、ちゃっぴぃさん、色々とご意見ありがとうございました。

そーですね。 「End With」を必ず通る様、心掛ける事が本来のルールですね。

有難うございました。
#735-0
RE#730:Withステートメントについて?
> > 何度もすいません。「Exit Sub」の場合は抜けても良いのではないでしょうか?
> > (「Exit Sub」の前に「End With」は、記述出来ないですよねぇ...???)
> 
> もちろん、
> 
>     With Label
>         .Caption="123"
>         if ×××=〇〇〇 Then
>            End With '<-- ここ
>            Exit Sub
>         End If
>     End With
> 
> こんな風にはかけませんが、オンラインヘルプにあるように、「End With ステートメントを呼び出
> さずに With 制御構造外のステートメントを呼び出すことはできない」のですから、With制御構造
> 内で、Ifステートメントなどを使う事がそもそもいけないのでは?
> つまり、「Withステートメントを通ったら、End Withステートメントを*必ず*通らなければならな
> いし、その間に別の制御構造が入ってはならない」と言う事です。
> 
> ですから、あえて書き直すなら
> 
>     With Label
>         .Caption="123"
>     End With
>     if ×××=〇〇〇 Then
>        Exit Sub
>     End If
> 
> のように、Ifステートメントによる制御構造自体を、Withの外に出すしかないです。

マニュアルの読み方間違ってました。
Zeroさんの言われる事が正しいですね。
失礼しました。
私、結構このまずいコーディングしてる気配。(苦笑)
まだ一度も、「こんな失敗」の様なエラーは出てませんけど。

それとちょっと疑問なのですが、必ずEnd Withを通らないといけないという事は
On Error GoTo XXXX を使用しているSub等ではWithは使えないのでしょうか?
With以下でランタイムエラーが発生してしまうとEnd Withは通りませんし。
うーん。私は結構安易にWithを使ってたんだなぁ。(→。←)

−−−−−−−−−−−−−−−−
Go!Go!V友! ○(⌒o ⌒)。
V友応援会 お茶くみ ちゃっぴぃ
#736-0
RE#730:Withステートメントについて2
> オンラインヘルプにあるように、「End With ステートメントを呼び出さずに
>  With 制御構造外のステートメントを呼び出すことはできない」のですから、
このあたりの表現がわかりにくいということからか、
最近のヘルプだと、言い回しを換えて来たようですね。(^^;

「制御構造内(外)」という表現を止めて、「Withブロックへの(からの)ジャンプ」という表現に
変化しているようです。

MSDN Library 1999年 07月リリース版 日本語マニュアルより引用:VBS Withステートメント
≫ With ブロックの中に別の With ブロックを配置すると、With ステートメントをネストできます。
≫ ただし、外側の With ブロックのメンバは内側の With ブロックに対してはマスクされているので、
≫ 内側の With ブロックのオブジェクト参照を外側の With ブロックに含まれている
≫ オブジェクトのメンバに渡すときは、完全に修飾しなければなりません。
≫ 
≫ 重要  With ブロックへのジャンプも With ブロックからのジャンプも行わないでください。
≫ With ブロックのステートメントは実行されますが、With ステートメントまたは
≫ End With ステートメントが実行されません。その結果、エラーや予想外の動作が
≫ 発生することがあります。
このページと関連する記事:
#16726-0Withブロックについて2000-02-23(水) 23:12
#33835-0RE#33831:EXEファイルでエラーが発生して悩んでいます。2000-11-21(火) 16:09
#22705-0Withステートメントに関して2001-08-27(月) 18:08
#24321-0コモンダイアグラムのキャンセル2000-06-27(火) 12:37
#7922-0実行について2000-05-04(木) 20:01
#615-0Withステートメントについて1999-08-05(木) 11:12
#37878-0for の抜け方2001-01-29(月) 11:38
#16908-0withステートメントについて2001-07-14(土) 20:00
#8292-0if文について2000-05-26(金) 16:37
#3430-0Withステートメントで処理速度を上げる方法1999-10-29(金) 10:22
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)