アプリ版:「スタンプのみでお礼する」機能のリリースについて

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ステートメントはそもそもプロパティーの設定に使うべきであって、
そのような使い方は間違っている。等々

A 回答 (4件)

もしやりたいことが、コントロール名を変更したなどの際に


With XXXX
  ~~~~~~~
  Call subF(XXXX, 5, 2)
End With

のXXXX 部分をすべて書き直す必要があるのを避けたい。
ということであれば、以下の方法が考えられます。

'テキストボックスへの参照を格納するコントロール変数
Dim tmpTextBoxAs TextBox

'参照するテキストボックスを設定する
Set tmpTextBox = Form1.Text1'コントロール名が変更になった場合、合わせて変更する

'以下すべてtmpTextBox経由でコントロールを操作する
With tmpTextBox
  .Text = "2"
  .Alignment = 2 'CENTER
  Call subF(tmpTextBox, 5, 2)
End With
    • good
    • 0

かなりアクロバティックですが



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)

悪気は無いのかもしれませんが
これはちょっと余計でしたね。
    • good
    • 1

自分自身というようなプロパティを持っていないオブジェクトでは、


例のように「Form1.Text」を渡す以外に省略記法みたいなのはないと思います。
    • good
    • 2

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A