- ベストアンサー
エクセル:ユーザーフォーム
いつもお世話になってます。 http://www.moug.net/tech/exvba/0090042.htm を参考にユーザーフォームを作っているのですが、 テキストボックスを増やしたり減らしたりしているうちに ”前へ”、”次へ”ボタンをクリックしたときに表示される項目が 正しく表示されなくなってしまいました。(セルがずれる) ControlSourceプロパティー設定?というのを良く理解してないのですが、 正しく表示させるようにするにはどうしたらいいでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 そのコードは150行以上もあるかと思いますが、作った本人か、その責任者か、Mougに聞いていただいたほうがよいのではないかと思います。公開コードとして、掲示しているわけですから、それなりに管理されたものだと思います。 ただ、ちょっとみた範囲では、以下のところでエラーが出るはずですが。 Private Sub cmdTouroku_Click() × .Cells(intRowNum, 9).Value = Me.txtTantou.Value ↓ .Cells(lngRowNum, 9).Value = Me.txtTantou.Value >テキストボックスを増やしたり減らしたりしているうちに ここに書かれてあるテキストボックスは、名前を変更してありますから、名前に関しては、コードと一致していないと、イベントが働きません。作った時に、その都度、名前を変更しないと分らなくなります。 >ControlSourceプロパティー設定というのを良く理解してないのですが、 それは、テキストボックスのControlSource のことです。そのソース先アドレスです。 Ctrl.ControlSource = _ "[" & BOOK_NAME & "]" & .Name & "!" & .Cells(RowNum, i).Address コントロールとは、Userform を含め、その上に乗るパーツのことを指します。 失礼かもしれませんが、私は、そういうご質問のレベルでは、あまりカスタマイズなどしないほうがよいような気がしています。見た目は簡単ですが、経験的に、そういうものを作れるレベルは、それなりのキャリアが必要です。また、それを読み解く力も同等のものがないと出来ません。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >後から付け足したテキストボックスに後番列のセルの内容が表示されるようなのでどうしたらいいのか 原因はわかりました。 ここのコードの問題にもなるのですが、 Private Sub SetCtrlSource(RowNum As Long) >If Ctrl.Name Like "txt*" Then > i = i + 1 > Ctrl.ControlSource = _ > "[" & BOOK_NAME & "]" & .Name & "!" & .Cells(RowNum, i).Address >End If ここには、書かれていませんが、Control の Index の順番なのです。つまり、並び順ですね。マウスでドラッグ、テキストボックスを入れ替えて、順序どおりの位置に直すしかないような気がします。Index を替えるわけにはいきませんからね。わけがわからないようでしたら、最初から順番にテキストボックスを作って、名前を替えていったほうが早いかもしれません。 この問題は、強いていうなら、テキストボックスを削除して加えたのが問題というしかないけれども、元のコードを書いた人が、Excelで、こういうことがあることを想定していなかったのだろうと思います。実際に、私は、そういう作り方をしません。前回書いたように、TextBox1, TextBox2, ... とします。 >理想のフォームが自分で作れないってもどかしい気分です。 それは、別の意味で私も同じです。私の場合、Excelに従属するから故の問題ということもあります。
- Wendy02
- ベストアンサー率57% (3570/6232)
追伸: #1「私は、そういうご質問のレベルでは、あまりカスタマイズなどしないほうがよいような気がしています。」 ちょっと誤解を受けやすい発言です。Userform内のコントロール名を替える習慣というのはAccess にはあるのですが、Excel側では、あまり奨励されているわけではありません。それは単体で操作することが多いからで、せいぜい、接尾辞の数字ぐらいです。 また、私自身の場合は、ControlSource を直接操作するということをしないで、一旦、配列変数の中で、操作して、TextBox に入れるということをします。(若干スピードが速いはずです。)つまり、ControlSource は、読み手に、直接理解しやすいという反面、手数・行数が多くなります。結果、ミスの発生が多くなるということなのです。
お礼
ご回答ありがとうございます。 >そういうご質問のレベルでは、あまりカスタマイズなどしないほうがよいような気がしています。 そうですよね。確かに勉強不足だと思います。 理想のフォームが自分で作れないってもどかしい気分です。 >作った時に、その都度、名前を変更しないと分らなくなります。 名前は変更しました。後から付け足したテキストボックスに後番列のセルの内容が表示されるようなので どうしたらいいのか(列=テキストボックスを指定してやらないといけない?)と思ったのですが…。 もっと勉強します、ありがとうございました。