[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォームを使用して』(出来心)
ユーザーフォームを使用して社員の情報カードを作成しました。
入力フォームTを作成し
氏名 住所 年齢 性別 など…
そこまでは良かったのですが…今度はもう一つのフォームUを作成し
@テキストボックスに 氏名を入力する
Aチェックボックスで 1削除 2編集 3個人表示
Bコマンドボタンで 実行 キャンセル
この場合の動作としてチェックボックスが1の場合はテキストボックスに入力した氏名の行を全て削除させる。 2の場合は別の編集のフォームVを表示し(入力と同じような…)再度そのフォームで書き換えたら OKボタンでその氏名の行を書き直す。 3の場合はフィルターのようにそのテキストボックスに入力した氏名の行のみの表示をさせるのは?
こんな贅沢な機能はやはり無理でしょうか?
アバウトに説明すると、
フォームTで入力した内容をシートTに書き込むまでは出来たのですが…
フォームUのテキストボックスの内容をシートTから探しその内容をフォームVのテキストボックスに表示し訂正した後にコマンドボタンで再度シートTのその行を上書きする。
さらにもう一つの機能としてフォームUのテキストボックスの内容をシートTから探しその氏名の行ごと削除する。それかフォームUのテキストボックスの内容をシートTから探しその氏名の行だけをフィルターの機能のように1行表示させる。この三つの機能をフォームUのチェックボックスで選択する。
更に欲張るとテキストボックスではなく、コンボボックスを使用しそのリスト内容をシートTの氏名の列から参照させることは可能でしょうか…
本屋で何冊本を買ってきても出来ませんでした。
もし分かる方がおりましたら教えていただきたく願います。宜しく御願いします…
>Aチェックボックスで 1削除 2編集 3個人表示 複数選択しないので有れば、OptionButton の方が良くありませんか?
ついでに、「登録」or「追加」のような選択を設ければ フォームも1個にまとめて、簡素化できると思いますが・・
>コンボボックスを使用しそのリスト内容をシートTの氏名の列から >参照させることは可能でしょうか… 容易に可能です。
ところで氏名は重複しませんか? もし重複するようであると、社員番号のようなユニークな番号を使うのがよいのですが・・
(INA)
社員番号は誰が何番だか記憶が追いつかないので名前のほうが早いかと簡単に考えて行動した結果です。
新規の入力フォームには登録と追加で作成したのですが、たとえば後日情報の内容が変更になった場合に編集するフォームのようなもので、一度書き込んだものをその入力フォームに呼び出して同じ行に上書きさせるなんて出来ないものかと…そこで知能がフリーズしました。
上記の書き込みのようにフォームは作成したのですが…本を呼んでも書き込んであるセルからテキストボックスの文字列を検索し入力フォームに表示させるのは???
更に呼び出した同じセルに上書きさせるには???
削除は???って感じです。
たとえば社員番号をコンボボックスで使用し、テキストボックスに氏名を表示させ、選択が正しければその次の動作をチェックボックスで指定しコマンドボタンで動作するように出来ますか?
INAさんすみませんが教えてください。
ある程度、仕様は考えているようですので、「分からない点」についてだけ 説明していこうと思います。
>書き込んであるセルからテキストボックスの文字列を検索し >入力フォームに表示させるのは??? >更に呼び出した同じセルに上書きさせるには??? >削除は???って感じです。
まず手作業の時にどのように操作するかを考えます。 一般機能に、「検索」というのがあります。 これはマクロの自動記録をすると、Findメソッドというものが使われます。
textbox(combobox)の文字をキーワードに、シート上の氏名列を検索して、 見つかったセルに対し、処理をすればよいのです。 使い方は以下のような感じです。
Dim FindData As Range Dim KeyWord As String
KeyWord = TextBox1.Text
Set FindData = Range("A:A").Find(KeyWord, LookIn:=xlValues, LookAt:=xlWhole)
If FindData is Nothing then Msgbox "見つかりませんでした。" Exit Sub End If
'検索して見つかったセルに代入するとき FindData.Value = TextBox1.Text
'検索して見つかったセルの値をTextBox1に表示するとき TextBox1.Text = FindData.Value
'見つかった行を削除 Rows(FindData.Row).delete
'見つかったセルの右横のセルをTextbox2に表示するとき TextBox1.Text = FindData.offset(0,1).Value 'もしくは TextBox1.Text = Cells(FindData.Row , FindData.Column).Value
>たとえば社員番号をコンボボックスで使用し、テキストボックスに氏名を表示させ、 >選択が正しければその次の動作をチェックボックスで指定しコマンドボタンで >動作するように出来ますか?
チェックボックスですか?複数選択はどうなりますか? (INA)
また更に二列目や三列目の場合は
'見つかったセルの右横のセルをTextbox2に表示するとき
TextBox1.Text = FindData.offset(0,1).Value
の(0,1)のところをかえればよいのですか?
それと…
オプションボタンでした…チェックボックスでなく。
お手数おかけいたします。(出来心)
>の(0,1)のところをかえればよいのですか? そうです。適当に変えてご自分で試してみて下さい。 あとはoffset についてヘルプを読んで、 掲載されたコードは、調べてできるかぎり理解して下さい。
ひとまずFindメソッドさえ理解できれば、主となる処理はほとんど出来ると思います。 あとは、使用者の立場からユーザーフォームの様式を考えて、 OptionButton などをIf文やSelect Case文で条件分岐すれば出来ると思います。
(INA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.