tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル変数名を使ってオブジェクト名の指定を変更
記事No3999
投稿日: 2006/07/17(Mon) 20:20
投稿者MOKO
ExcelVBAからVB2005にソフトを作り替えようとしております。
フォーム上にあるテキストボックスのオブジェクト名の指定を変数名を使って可変させたいと思っております。
計算内容は、各商品の数量と金額の合計を出すだけです。
下記、プログラムはVBAの時に使っていたモノです。
これをVB2005で似たように動作させたいのですがうまく出来ません。

各テキストボックスは、下図の様に表になっております。
ans_A1、kazu_A1、kingaku_A1
ans_A2、kazu_A2、kingaku_A2
ans_B1、kazu_B1、kingaku_B1
ans_B2、kazu_B2、kingaku_B2
最後の_A1の部分のみを変更して、コマンドボタンごとにセットした値を使ってテキストボックスのオブジェクト名を可変するにようにしたいのですがうまくいきません。
ご教授の程宜しく御願いします。

Option Explicit
Dim my_set As String
Dim my_ans As String
Dim my_kazu As String
Dim my_kingaku As String

Private Sub CommandButton1_Click()
    my_set = "_A1"
    Call code
End Sub

Private Sub CommandButton2_Click()
    my_set = "_B1"
    Call code
End Sub

Private Sub code()
'合計=数量×金額 の計算
        Me.Controls("my_ans" & my_set).Value = Me.Controls("my_kazu" & my_set).Value * Me.Controls("my_kingaku" & my_set).Value
End Sub

[ツリー表示へ]
タイトルRe: 変数名を使ってオブジェクト名の指定を変更
記事No4000
投稿日: 2006/07/17(Mon) 20:42
投稿者YAS
次のようにすれば動作はします。が,このようなやり方はたぶん推奨されないと思います。
答えておいてなんですが,「使わないほうがよい」とみんなに言われるコードです。

参考:http://jeanne.wankuma.com/tips/form/findcontrol.html

※他のサイトで申し訳ありません。VBレスキューのVB.NETTipsも探したのですが... 見つかりませんでした。


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button1.Click
        Call code("_A1")
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button2.Click
        Call code("_B1")
    End Sub

    Private Sub code(ByVal s As String)
        Me.Controls("ans" & s).Text = CStr(CInt(Me.Controls("kazu" & s).Text) * _
                                           CInt(Me.Controls("kingaku" & s).Text))
    End Sub

[ツリー表示へ]
タイトルRe^2: 変数名を使ってオブジェクト名の指定を変更
記事No4004
投稿日: 2006/07/18(Tue) 00:19
投稿者MOKO
リンク先も参照してみました。あまり好ましくないんですね・・・。
紹介頂いたプログラムも動作確認できました。
こうすれば、とりあえず目的の内容は出来そうです。
表自体が10行ぐらいあるので紹介頂いたのをFOR〜NEXTで処理した方が楽かなぁと思ったのですが、
「使わない方がよい」と記載してましたので、別の方法を模索した方が良いのか悩みます。
とりあえず、Me.Controls自体が機能する事が分かっただけでも勉強になりました。
大変、有り難うございました。

[ツリー表示へ]