• ベストアンサー

With~EndWithの省略部分と引数指定について

Private Sub Form_Load() With Form1.Text1   .Text = "2"   .Alignment = 2 'CENTER   Call subF(Form1.Text1, 5, 2) End With End Sub Private Sub subF(ByRef TextBox As TextBox, ByVal lngMAX As Long, ByVal lngMIN As Long)   TextBox.MaxLength = lngMAX - lngMIN End Sub With~End Withの中で指定しているオブジェクト(例の場合「Form1.Text」)のそれ自身をパラメータとして渡したい場合、 どのように記述すれば良いでしょうか? Meを指定しましたが当然エラーになります。イメージはMeに近いと思うですが。。。 どうか宜しくお願いします。 期待していない回答(1) With Form1   .Text1.Text = "2"   .Text1.Alignment = 2 'CENTER   Call subF(.Text1, 5, 2) End With 期待していない回答(2) 戻り値をMaxLengthの関数にすればよい。等々 With Form1.Text1   .Text = "2"   .Alignment = 2 'CENTER .MaxLength = functionF(5, 2) End With 期待していない回答(3) withステートメントはそもそもプロパティーの設定に使うべきであって、 そのような使い方は間違っている。等々

質問者が選んだベストアンサー

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.4

もしやりたいことが、コントロール名を変更したなどの際に With XXXX   ~~~~~~~   Call subF(XXXX, 5, 2) End With のXXXX 部分をすべて書き直す必要があるのを避けたい。 ということであれば、以下の方法が考えられます。 'テキストボックスへの参照を格納するコントロール変数 Dim tmpTextBox As TextBox '参照するテキストボックスを設定する Set tmpTextBox = Form1.Text1 'コントロール名が変更になった場合、合わせて変更する '以下すべてtmpTextBox経由でコントロールを操作する With tmpTextBox   .Text = "2"   .Alignment = 2 'CENTER   Call subF(tmpTextBox, 5, 2) End With

その他の回答 (3)

  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.3

かなりアクロバティックですが With Form1.Text1   .Text = "2"   .Alignment = 2 'CENTER   Call subF(.Parent.Controls(.Name), 5, 2) End With とする方法があります。意味があるかどうかかなり微妙な表記ですけど(笑) 要は「Form1("Text1")」や「Form1.Controls("Text1")」と一緒です。 ※ もしText1がコントロール配列の場合は困りますが。。。 またWithブロックを入れ子にする(期待していない回答(1)の発展形) With Form1  With .Text1   .Text = "2"   .Alignment = 2 'CENTER  End With  Call subF(.Text1, 5, 2) End With というのもありますが 可読性が良くないですね。 >期待していない回答(3) 悪気は無いのかもしれませんが これはちょっと余計でしたね。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

自分自身というようなプロパティを持っていないオブジェクトでは、 例のように「Form1.Text」を渡す以外に省略記法みたいなのはないと思います。

回答No.1

googlegoogleさんが、記載しているコードでエラーは出ませんが、何か問題があるのでしょうか?

関連するQ&A