- ベストアンサー
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ステートメントはそもそもプロパティーの設定に使うべきであって、 そのような使い方は間違っている。等々
- みんなの回答 (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)
かなりアクロバティックですが 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)
自分自身というようなプロパティを持っていないオブジェクトでは、 例のように「Form1.Text」を渡す以外に省略記法みたいなのはないと思います。
- kamohura_01
- ベストアンサー率54% (6/11)
googlegoogleさんが、記載しているコードでエラーは出ませんが、何か問題があるのでしょうか?