<Excel UserForm で データ・フォームの機能を真似てみる>
こんにちは、三流プログラマーKen3です。 4月新たな環境になった人達は落ち着きましたか? *まだ新入社員君達はHPやメルマガみて遊ぶ余裕は無いか(笑) なんて定型の挨拶はこのくらいにして、 ~~~~~~~~~~~~~~~~~~ 今回は、 ユーザーフォームの作成で、 データ・フォームの機能を真似て作ってみたいと思います。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba063.lzh に保存されてます。 test061-book.xlsを開いて、穴を探して見て下さい。 *こんな処理ができてない、あんな処理も・・・など出てきますよ(笑)/* * 1.今回のキッカケ */
掲示板 http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi に貰った質問、 >投稿日 : 2003/04/03(Thu) 15:43 >投稿者 : sattoch >タイトル : またできないことが > >こんにちは。やっと閉じることが出来ました。 >それで、もう一つお尋ねしたいことができました。 >入力して、たとえば「追加」のボタンをつくって >それをクリックすれば入力したものがシートにうつされて >また入力フォームがきれいになって、そこに入力してまた >「追加」ボタンを押すとそれがシートにうつされて・・・ >となるようにするのは難しいでしょうか。 --- [No.61 Excel Form 閉じる方法 Unload Me] http://www.ken3.org/backno/backno_vba13.html#61 で、 Unload Meでユーザーフォームを閉じる方法を解説しました。 今回は、 Excelのメニューでデータ・フォームとやると標準で入力フォームが出ます。 この機能を少しまねてみたいと思います。 機能のボタンを見ると 新規 削除 元に戻す 前を検索 次を検索 検索条件 閉じる それと、1 / 3 (n / MAX)と件数表示 あとはスクロールバーですね。/* * 2.まずは、1 / 3 (n / MAX)と件数を管理 */
シートのイメージは _____A列___________B列_______C列____________D_______________________E_______ 1行 画像タイトル ファイル名 コメント 画像ベースディレクトリ→ D:\temp\ 2行 サンタ 001.gif ケーキ写真 3行 お正月 012.jpg XXXXXXXXXX です。 まずは、1 / 3 (n / MAX)と件数をフォームに表示したいので、 ラベルコントロールを追加します。 コントロール名は、labCounterにしました。 さてと、まずはデータの行数を数えないとね。 グローバル変数にnMAX As Integerを追加して変数で管理しますか。 Dim yCNT As Integer '行カウンター Dim nMAX As Integer '最終行を覚えておくカウンター No.63で追加 フォームが開いた時に実行されるイベント、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _Initializeで数えます。
Private Sub UserForm_Initialize() 'ディレクトリが入って無い時、ブックのパスを代入 If Len(Sheets("DATA").Range("E1")) = 0 Then Sheets("DATA").Range("E1") = ThisWorkbook.Path & "\" End If '初期処理 yCNT = 2 '初期値の2行目を代入 'データの数を数えます No.63で追加 nMAX = 0 '0で初期化 While Len(Cells(2 + nMAX, "A")) <> 0 '2行目からA列にデータあるかチェック nMAX = nMAX + 1 'カウンタを増やす Wend Debug.Print "_Initialize nMAX=" & nMAX 'デバックで数値を表示 'セルの値をフォームのテキストボックスに代入する Call SheetToForm '画像ファイルを表示する Call PUTPicture End Sub |
Sub SheetToForm() 'セルの値をフォームのテキストボックスに代入する txtTITLE = Sheets("DATA").Cells(yCNT, "A") txtFILENAME = Sheets("DATA").Cells(yCNT, "B") txtMEMO = Sheets("DATA").Cells(yCNT, "C") Rows(yCNT).Select '行を選択 vba049で追加 LabCounter = (yCNT - 1) & "/" & nMAX 'ラベルに現在行を追加 vba063で追加 End Sub |
Private Sub btnADDNEW_Click() '新規のボタン 'フォームの値をクリアする txtTITLE = "" txtFILENAME = "" txtMEMO = "" imgBOX.Picture = LoadPicture("") '画像を消す(私は忘れた(笑)) '選択位置を変更 nMAX = nMAX + 1 '新規追加されたので、Max行数を増やす yCNT = nMAX + 1 '行カウンタはタイトル行があるので+1する Rows(yCNT).Select '行を選択(空白だけど) LabCounter = "新規データ" 'ラベルに新規データと文字を入れる End Sub |
Private Sub btnUPDATE_Click() 'データセットの確認 If MsgBox("データを更新します", vbYesNo, "確認") = vbYes Then '単純にフォームからデータをシートへ転記する Sheets("DATA").Cells(yCNT, "A") = txtTITLE Sheets("DATA").Cells(yCNT, "B") = txtFILENAME Sheets("DATA").Cells(yCNT, "C") = txtMEMO End If End Sub |
Sub btnDEL_Click() '削除を確認する If MsgBox("データを削除します?", vbYesNo, "確認") = vbYes Then Rows(yCNT).Select '現在行を選択 Selection.Delete Shift:=xlUp '選択されている行を削除する If nMAX <> 1 Then nMAX = nMAX - 1 '行頭以外なら最大行数を−1する Call SheetToForm '削除後にデータを表示 End If End Sub |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]