[[20040129030855]] 『ユーザーフォームを使用して』(出来心) ページの最後に飛ぶ

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

 

『ユーザーフォームを使用して』(出来心)

ユーザーフォームを使用して社員の情報カードを作成しました。

入力フォーム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)


無知ですみません。
トップのフォームに社員用の新規書き込みのOptionButtonと編集・閲覧・削除のOptionButtonを作成し、たまたま入力のほうは出来たので編集のほうに全てをまとめた結果そこで止まってしまいました。

社員番号は誰が何番だか記憶が追いつかないので名前のほうが早いかと簡単に考えて行動した結果です。

新規の入力フォームには登録と追加で作成したのですが、たとえば後日情報の内容が変更になった場合に編集するフォームのようなもので、一度書き込んだものをその入力フォームに呼び出して同じ行に上書きさせるなんて出来ないものかと…そこで知能がフリーズしました。

上記の書き込みのようにフォームは作成したのですが…本を呼んでも書き込んであるセルからテキストボックスの文字列を検索し入力フォームに表示させるのは???
更に呼び出した同じセルに上書きさせるには???
削除は???って感じです。

たとえば社員番号をコンボボックスで使用し、テキストボックスに氏名を表示させ、選択が正しければその次の動作をチェックボックスで指定しコマンドボタンで動作するように出来ますか?

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)


ただいま勉強しています。有難うございます。
理解してから前進しようと思います。マクロって便利ですよね
わからないうちは関数やVLOOKUP関数や数式を多様してましたが
結構取っ掛かりが怖かったもので…
If文やSelect Case文は理解できたのですが…なんとなく…
offsetとFindとValuesの勉強をします。
また分からない事があったら教えてください。
有難うございました。(出来心)


コメント返信:

[ 一覧(最新更新順) ]


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