Page 70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼For 〜next を使った、テキストボックス値の変数へ格納方法について 教育関係者 02/10/18(金) 17:18 ┣Re:For 〜next を使った、テキストボックス値の変数へ格納方法について イケガミ 02/10/19(土) 9:10 ┗Re:Q1の回答 イケガミ 02/10/19(土) 9:12 ┣Re:Q1の回答 こうちゃん 02/10/21(月) 9:12 ┗Re:Q1の回答 教育関係者 02/10/21(月) 11:03 ┗Re:Q1の回答 こうちゃん 02/10/21(月) 13:04 ┗Re:Q1の回答 教育関係者 02/10/21(月) 15:57 ─────────────────────────────────────── ■題名 : For 〜next を使った、テキストボックス値の変数へ格納方法について ■名前 : 教育関係者 ■日付 : 02/10/18(金) 17:18 -------------------------------------------------------------------------
申し訳ございません。 『標準モジュール』上に ************************************************************************* Public kamoku(1 To 90) As String '各科目の変数はkakomu(1)からkamoku(90) Public tanni(1 To 90) As String '各科目の変数はtanni(1)からtanni(90) Public hyouka(1 To 90) As String '各科目の変数はhyouka(1)からhyouka(90) ************************************************************************* という 科目を格納する変数を1〜90という90個設定、 単位を格納する変数を1〜90という90個設定、 評価を格納する変数を1〜90という90個設定しております。 そして『成績入力画面フォーム』上に 科目を選択するテキストボックスの名前が、科目成績(1)〜科目成績(90)と90個 単位を選択するテキストボックスの名前が、単位成績(1)〜単位成績(90)と90個 評価を選択するテキストボックスの名前が、評価成績(1)〜評価成績(90)と90個 ありまして、 各値を、For 〜 Next を使用して それぞれ下のようにテキストボックスの値を変数に格納しようと考えました。 ***************************************************************** Private Sub 完了btn成績選択_Click() Dim i As Integer For i = 1 To 90 kamoku(i) = 科目成績(i).Value tanni(i) = 単位成績(i).Value hyouka(i) = 評価成績(i).Value Next i ****************************************************************** ところが、完了というボタンを押して コマンドを実行させようとしましたらば、 『科目成績』の部分が白抜きになって ”Sub または Function が定義されていません。” と表示されてしまいました。 試しに 科目を選択するテキストボックスの名前を、科目成績1〜科目成績90と変更 単位を選択するテキストボックスの名前を、単位成績1〜単位成績90と変更 評価を選択するテキストボックスの名前を、評価成績1〜評価成績90と変更し、 ***************************************************************** Private Sub 完了btn成績選択_Click() kamoku(1) = 科目成績1.Value tanni(1) = 単位成績1.Value hyouka(1) = 評価成績1.Value kamoku(2) = 科目成績2.Value tanni(2) = 単位成績2.Value hyouka(2) = 評価成績2.Value kamoku(3) = 科目成績3.Value tanni(3) = 単位成績3.Value hyouka(3) = 評価成績3.Value ・・・・・・・・・・・ kamoku(90) = 科目成績90.Value tanni(90) = 単位成績90.Value hyouka(90) = 評価成績90.Value ****************************************************************** としましたらばうまく格納されました。 そこで2点質問させていただきたいのですが、 Q1、フォーム上でテキストボックスの名前に ()を使用することはできないのでしょうか? 最初の記述の誤りを教えていただきたいのですが・・・。 Q2、()を使用できないとして 科目成績1のように数字部分を変数iとして For 〜 Nextを使用するにはどのように記述すればよいのでしょうか? ***************************************************************** Private Sub 完了btn成績選択_Click() Dim i As Integer For i = 1 To 90 kamoku(i) = 科目成績i.Value tanni(i) = 単位成績i.Value hyouka(i) = 評価成績i.Value Next i ****************************************************************** というわけにもいかないようで、 プログラムの初歩がわからず苦しんでおります。 できるだけ、これからのためにも For 〜 Next や Do 〜 Loop などを使って、プログラムの幅を広げていきたいと考えております。 何卒、ご教授の程よろしくお願い申し上げます。 |
For i = 1 To 90 kamoku(i) = Me.Controls("科目成績" & i).Value tanni(i) = Me.Controls("単位成績" & i).Value hyouka(i) = Me.Controls("評価成績" & i).Value Next i でいいと思います。 |
先ほどのは、Q2の回答ですね。 > Q1、フォーム上でテキストボックスの名前に > ()を使用することはできないのでしょうか? > 最初の記述の誤りを教えていただきたいのですが・・・。 コントロール名に()を使うこともできはしますが、基本的に記号は、 アンダーバー(_)以外は使わない方がいいと思います。 |
教育関係者さん、こんにちは イケガミさん、横レスごめんなさい。 老婆心ながら、勘違いするといけないので、横レスします。 VBAではコントロール配列はつかえません。 ()を使うとコントロール名の一部となります。 |
イケガミ様 こうちゃん様 お礼の返信送れてしまいまして申し訳ございませんでした。 ご教授いただきましてありがとうございました。 For〜Next などを使うことに慣れておりませんでしたので 今まで無駄な記述が多かったので、とても勉強になりました ありがとうございます。 一点こうちゃん様の記述への質問です。 VBAではコントロール配列はつかえません。 ()を使うとコントロール名の一部となります。 との内容でございますが、 そして『成績入力画面フォーム』上に 科目を選択するテキストボックスの名前が、科目成績(1)〜科目成績(90)と90個 単位を選択するテキストボックスの名前が、単位成績(1)〜単位成績(90)と90個 評価を選択するテキストボックスの名前が、評価成績(1)〜評価成績(90)と90個 と設定して、 各値を、For 〜 Next を使用して それぞれテキストボックスの値を変数に格納しようとすることは不可能でしょうか? ひとつ残りました疑問にお答えいただけますと 幸いでございます。 よろしくお願い申し上げます。 失礼いたします。 |
教育関係者さん、こんにちは >一点こうちゃん様の記述への質問です。 >VBAではコントロール配列はつかえません。 >()を使うとコントロール名の一部となります。 >との内容でございますが、 > > >そして『成績入力画面フォーム』上に >科目を選択するテキストボックスの名前が、科目成績(1)〜科目成績(90)と90個 >単位を選択するテキストボックスの名前が、単位成績(1)〜単位成績(90)と90個 >評価を選択するテキストボックスの名前が、評価成績(1)〜評価成績(90)と90個 >と設定して、 > >各値を、For 〜 Next を使用して >それぞれテキストボックスの値を変数に格納しようとすることは不可能でしょうか? ですから、イケガミさんの回答のようにすれば可能です。 私が横レスを入れたのは、教育関係者さんがイケガミさんの回答を、配列を扱っていると勘違いするといけないので、あえてつけたレスです。 イケガミさんの回答引用 --------------------------------------- For i = 1 To 90 kamoku(i) = Me.Controls("科目成績" & i).Value tanni(i) = Me.Controls("単位成績" & i).Value hyouka(i) = Me.Controls("評価成績" & i).Value Next i --------------------------------------- 例えば、"(" や ")" を使うなら kamoku(i) = Me.Controls("科目成績(" & i & ")").Value の形になります。 この場合のコントロール名(テキストボックス名)は ”科目成績(1)" のように"( )"も数字も文字列として扱われます。・・・ってことです。 配列のように"科目成績"のコントロール名に(+インデックス番号+)という意味ではありません。 ですから「文字列連結演算子の&を使ってiを擬似的に配列のインデックスのようにあつかっている」のです。 もしVBのようにコントロール配列が可能なら Me.科目成績(i).Value のように記述します。その違いを認識するようにしてください。 |
こうちゃん様 イケガミ様 私の理解不足、知識不足で、 同じことを質問してしまいまして申し訳ございませんでした。 また、ご丁寧なご教授ありがとうございました。 おかげさまで理解できませんでした部分が理解できました。 うまく活用して管理しやすいプログラムを作りたいと思います。 本当にありがとうございました。 失礼いたします。 |