[[20030617205850]] 『オブジェクト変数がわかりまへん』(おいぼれ弥太郎) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オブジェクト変数がわかりまへん』(おいぼれ弥太郎)

 Dim i As Integer
 Dim idx As Integer
 Const tetbox_id As String = "Forms.TextBox.1"
 Const lbel_id As String = "Forms.Label.1"
 Private lbel() As MSForms.Label
 Private tetbox() As MSForms.TEXTBOX

__________________________________________________

 Private Sub CommandButton1_Click()
    idx = 0
    i = 5
    Do
        idx = idx + 1
        ReDim Preserve lbel(1 To idx)
        ReDim Preserve tetbox(1 To idx)
        Set tetbox(idx) = Controls(tetbox_id, , True)

        With tetbox(idx)
            .Text = ""
        End With

        Set lbel(idx) = Controls(lbel_id, , True)
        With lbel(idx)
            If idx = i - 2 Then
                GoTo coot
            End If
            .Visible = False
        End With
 coot:
    Loop While idx < i

 End Sub

__________________________________________________

 まあ、おおむねこんな案配のコードなんですけど Set で機嫌を損ねまんねん。どないかなりまへんか?


 MSForms.Label、MSForms.TEXTBOX はまだなんとかなるとして、
 Controlsが何なのか説明がないとレスはつかないと思いますが。
(kazu)

『オブジェクト変数の続き』(おいぼれ弥太郎)

 数多くあるMultiPageの1頁の一部を入力処理終了後、TextBox,CeckBox,OptionButtonおよびLabelを初期化して次の入力を待つ場合、その頁単位でコードを記述せなあきまへんのやろか。? オブジェクト変数とかを利用して各頁共通のコードを作成すればもっとスリムなコードになると思いまんねんけど無理なんでっしゃろかなぁ、やっぱし...


 kazeさんの質問にあるけど、Controls(id,,true) って何を参考にしたの?
 はっきりいって気になります。
 これがうまい具合にオブジェクトを返してくれると、
 上のコードでうまくいきそうな気もしますが、正直なところ、
 ReDim のところが何のための処理かよくわかりません(汗)。

 UserForm1 に MultiPage を5枚つくって、
 1枚目に TextBox1 Label1 CommandButton1
 2枚目に TextBox2 Label2
 3枚目に TextBox3 Label3
 4枚目に TextBox4 Label4
 5枚目に TextBox5 Label5
 という構成で考えてみました。
 Excel2002でやってますので、他のバージョンで動かなかったらゴメンナサイ(汗)。

 ユーザーフォームのコード

 Private Sub CommandButton1_Click()
    iniObj
 End Sub

 Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = 1 To 5
        Set P(i).txt = UserForm1("TextBox" & i)
        Set P(i).lbl = UserForm1("Label" & i)
    Next i
 End Sub

 標準モジュールのコード

 Type mPage
    txt As Control 'ここは As MSForms.TextBox も可
    lbl As Control 'ここは As MSForms.Label も可
 End Type
 Public P(1 To 5) As mPage

 Sub iniObj()
    Dim i As Integer
    For i = 1 To 5
        P(i).txt = "Initial-D"
        P(i).lbl.Visible = False
    Next i
 End Sub

 正直、As MSForms がいいのか、As Control がいいのか、As Object がいいのか
 よくわか`ていません。 みんな動くので(汗)。

 (ramrun)

『オブジェクト変数の続き2』(おいぼれ弥太郎)
 ramrunさんおおきに。ところで肝心なこと忘れてましたわ。ー超初心者ちゅう事をー
 controlsのことでっか? いいええな、もひとつのQ&Aの「3242」をご覧頂いたら分かりますけど、あそこで教えてもろうたもんがなんとのう使えそうな気がして記述しただけであって、確たる知識があったわけではおまへんねんで。
 ところで、貴殿のコードを早速コピーして動かしてみました。が、「オブジェクト変数またはwithブロックが設定されていません」と出てきまんねん。これが分かりまへん
。VBAをさわりかけて何ヶ月かたちますけど未だに理解でけしまへん。因みに2000をつこてますけどどないでっしゃろ。さっきも言うたように超初心者ちゅうことを御念頭にアドバイスを願えましたら幸甚なんでッけど...

 こちら事務局です。
 このエクセル質問ボードは従来の掲示板とは根本的に違います。
 一つのテーマを1つの項目に書き込む方式です。
 毎回新規で新しい項目を作らないようにしてください。
 基本的に[続き]とか[その2]は許可していません。
 [初めての方へ]を一度見てください。
 (kazu)

 もうひとつのQ&Aってどこのこと?
 旧掲示板には3千番台無いし。

 標準モジュールのiniObjを実行するわけではおまへん。
 ユーザーフォームを実行しなはれ。

 と、いま思いつくのはこんな程度。
 違ったらゴメンサナイ。

 超初心者といえど、難しいことをしたがっているのはアナタです。
 そこはご理解ください。

 (ramrun)

 もうひとつはここに統合された前の記事(つまりもの文書上の方)をさしている
 と思います。
 (kazu)

 はいはい、出来ました、お見事!
 ramunさん、貴殿の御懸念通り一生懸命iniobjを実行して頭抱えてましたわ、ええ。慚愧の念に耐えないちゅうのはこういうことを言いまんねんなぁ、ほんまに。
 それはともかく、お陰様でMultiPageのコードもずいぶん簡略化できそうで、明日から書き換えにやりがいを感じますわ。
 あぁ、それから、これからも超初心者の愚問をぶつけていく所存でおりますので、その節はこれに懲りずに宜しくご教授下さるようお願い致します。

 (kazu) 様
 ろくに説明も読まずに投稿して大変ご迷惑をおかけしました。
以後気をつけますのでご容赦下さい。
 


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.