- ベストアンサー
【エクセルVBA】新規・変更フォームについて
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
さてさてこれが新しいフォームかな まずコンボボックスの値の追加は前回教えた通りで問題ないでしょ。 新規の場合は各コントロールの値を取得して、指定のセルの書きこめばいい。 ただし以下の点を注意しないといけないよ。 ・すでに同じ名前(情報)が存在していた場合はどうするの? ・登録完了後コンボボックスに追加してあげる必要は?ついでにソートは? 変更の場合だけど氏名をキーとして各情報を取得してくるみたいだね。 これもコンボボックスのイベントを追加してあげて、氏名をキーにループで回して検索するってのが主な流れになると思う。 でも氏名っていうのは同姓同名が存在する可能性があるからキーとしては不適切なんだ。 だから今回のコントロールで言えば、住所か電話番号がキー(ユニークって意味)としては適切だと思う。 (まぁ住所と電話番号でも同居人なんて場合があるからこれでも実は不十分) でも住所とか電話番号なんか選択させても、普通分からないよね? だからこういう時は必ずIDみたいなものを用意してあげないと、1人に絞り込むことができなくなってしまうよ。 この辺りは仕様的な話だから、ちょっと考えてみてね。 ついでに言うとここまでやると削除機能も欲しくなるんじゃないかな~。
その他の回答 (1)
- x-1919
- ベストアンサー率52% (91/173)
新規のときはそれでも良いと思う。 変更のときにユーザーが操作する手順がよくわからない。 A. このフォームを開いて [変更] に切り替えた後、変更対象のデータをどのように選択してフォーム上に呼び出すのか。 B. 何らかの別のシーン(シート上とか、別のフォームとか)で変更対象のデータを選択してから何か(ボタンを押すとか)をすると、このフォームが呼び出され、選択済みのデータがフォーム上に呼び出される、とか。 B のパターンならフォーム上に [新規] [変更] を切り替える機能は必要なく、フォームが呼び出されたときにはすでに、新規 or 変更のどちらなのかが決まっているはず。 私なら、、、 シート上やツールバーに [新規] [変更] のボタンを配置する。 新規モードなら空のフォームを表示し、データ入力後にフォーム上の [登録] ボタンを押すと、データの最終行の後ろに追記をする。 変更モードならフォームを呼び出す際にフォームに対して変更対象データの情報(行番号 or 行を認識できる一意の値と各項目の値たち)をフォームに投げる。(フォームにはあらかじめそれらを受け取れるプロパティを作っておく) [登録] ボタンを押すと、最初に受け取っておいた行番号 or 行を認識できる一意の値をもとに、シート上のデータを書き換える。 こんな感じで作る。 視覚的に新規 or 変更を見分けやすくしたい場合は、フォームが呼び出されたときにフォームの背景色を切り替えるなどすればよい。
お礼
対応が少し遅くなりますがお許しください
補足
ラジオボタン選択時に窓をアクティブにするかどうかをえらんだらどうかな?と思っていたのです。 これ作成と運用が難しいかなぁ・・・。 おっしゃる方式だと 必要な時にフォームを出すのでいい気もしますね・・・。
お礼
対応が少し遅くなりますがお許しください
補足
名前にIDは付いています。 前回の相談の時に付けておきました! 同姓同名問題は解決すると思います。 ただ、IDなんて覚えてないから 呼び出しのときに住所を表示させる方がいいかもしれません。