また VB ですが、こういう With の使い方はやめましょう...
VB (コーディング ホラー)
Private Sub cmdBrowse_Click()
With flxList
.HighLight = flexHighlightNever
' (1) flxList と関係のない分岐
If bFlag1 = True Then
stSaveText = txtInputBox.Text
End If
.Rows = 1
.Cols = 7
.FixedRows = 1
.FixedCols = 0
' (2) flxList と直接関係のない呼び出し
Call SaveText(stSaveText)
.ColWidth(0) = (.Width \ 6) + 300
.ColWidth(1) = (.Width \ 6) - 300
.ColWidth(2) = (.Width \ 6) - 630
.ColWidth(3) = (.Width \ 6) + 120
.ColWidth(4) = (.Width \ 6) + 630
.ColWidth(5) = (.Width \ 6) - 120
.ColWidth(6) = 0
' (3) ここまで右辺に乱雑に使われると可読性を損なう
txtInputBox.Visible = True
txtInputBox.Left = .Left + 30
txtInputBox.Width = .ColWidth(0) + 30 - cmdBrowse.Width
txtInputBox.Top = .Top + .RowHeight(0) * (.MouseRow - .TopRow + 1) + 30
txtInputBox.Text = .TextMatrix(.MouseRow, .MouseCol)
txtInputBox.SelStart = 0
txtInputBox.SelLength = Len(txtInputBox.Text)
txtInputBox.SetFocus
' (4) ここまで記述が長くなったすえに .Cols なるメンバを出されると可読性を損なう
' For ステートメントは、先頭の 1 行で何をどこまで繰り返すか明確でなければならない
For i = 1 To .Cols
.TextMatrix(.Row, i) = CStr(i)
Next i
End With
End Sub
こういう With ステートメントの使い方は、可読性が良くないです。
With ブロック内は、省略したメンバに関する処理のみを簡潔に記述すべきです。
(1) のような、省略した flxList と関係のない分岐 (制御フロー) の記述は避けるべきです。
そもそも、With ブロック内にある必要はないでしょう。
同様に、(2) のような関数呼び出しも避けるべきでしょう。
微妙ですが、(3) のような乱雑な使い方も NG かなと思います。
右辺値に 1 つ使われる程度なら良いのですが、こう乱発されると気持ち悪いです。
最も VB で多く見かけるパターンが (4) です。
With ブロック内の記述がここまで長くなってしまうと、何が省略されているのか第三者にはわかりにくくなります。
また、For ステートメントとなると致命的に可読性が悪くなります。
本来の For ステートメントは、1 行目で繰り返し内容が把握できなくてはなりません。
Smalltalk のカスケードのように、省略したメンバに関する記述のみにしましょう。
VB (Not コーディング ホラー)
With flxList
.Rows = 1
.Cols = 7
.FixedRows = 1
.FixedCols = 0
End With
With ブロック内で、省略したオブジェクトとは関係のない処理を記述するのであれば、End With で閉めた方がわかりやすいです。
End With で閉めずに長々と続けてしまう言い訳として「処理速度をあげるため」と仰る方がいます。
残念ながら、人間の目からすると大した差ではありません。
それでもというのであれば、Visual Basic を使うのをやめた方が良いかもしれません。
コーディング ホラー記事へのリンク