画像付きのインターフェイスを作る

このエントリーをはてなブックマークに追加  



最後に、画像付きのインターフェイスを作ってみましょう。ここでは簡単な閲覧しかしませんが、応用すればデータの登録や修正ダイアログ ボックスとして活用することもできます。ちょっとだけ元データを変えてみます。



[商品マスター] シートには、上のように「単価」と「画像」を追加します。



[売上データ] シートは、上のように「売上コード」を追加しました。
作成する UserForm は下のように設計します。



左上が画像を表示する Image1 です。その下の ScrollBar1 を操作すると [売上データ] シートのデータを次々と表示します。各データはテキスト ボックスに表示します。名前は上から順に TextBox1 〜 TextBox8 です。TextBox7 には「受注数」と「単価」を乗じた金額を計算して表示します。唯一あるコマンドボタンは CommandButton1 です。UserForm を閉じるために使います。

まず、UserForm を開くときに [売上データ] シートに登録されている件数をカウントして、ScrollBar1 の Min プロパティと Max プロパティを設定します。件数のカウントにはワークシート関数の COUNTA 関数です。A 列全体をカウントしているのでタイトル行も含まれてしまいます。設定するときは「-1」します。

Private Sub UserForm_Initialize()
    With ScrollBar1
        .Min = 1
        .Max = WorksheetFunction.CountA(Worksheets("売上データ").Range("A:A")) - 1
        .Value = 1
    End With
End Sub

この UserForm は、スクロール バーの値が変化したときにすべてのデータを更新します。ScrollBar1 の Value プロパティを調べて、もし「2」だったら [売上データ] シートの 2 番目のデータ、つまり 3 行目ですね。こんなときは、Cells より高速な Offset プロパティを使うと便利です。基点を [売上データ] シートのセル A1 とすれば、3 行目データの「売上コード」は .Offset(2,0)、「商品コード」は .Offset(2,1) となります。

Private Sub ScrollBar1_Change()
    Dim c As Long, PicFile As String
    c = ScrollBar1.Value
    With Worksheets("売上データ").Range("A1")
        ''売上コード
        TextBox1 = .Offset(c, 0)
        ''商品コード
        TextBox2 = .Offset(c, 1)
        ''商品名
        TextBox3 = WorksheetFunction.VLookup(.Offset(c, 1), _
                                          Worksheets("商品マスター").Range("A1:B8"), 2)
        ''納品日
        TextBox4 = Format(.Offset(c, 3), "m月d日")
        ''受注数
        TextBox5 = .Offset(c, 2)
        ''単価
        TextBox6 = WorksheetFunction.VLookup(.Offset(c, 1), _
                                           Worksheets("商品マスター").Range("A1:C8"), 3)
        ''金額
        TextBox7 = Format(Val(TextBox5.Text) * Val(TextBox6.Text), "\\#,##")
        ''画像
        TextBox8 = WorksheetFunction.VLookup(.Offset(c, 1), _
                                           Worksheets("商品マスター").Range("A1:D8"), 4)
        
        If TextBox8.Text <> "" Then
            If Dir(TextBox8.Text) <> "" Then Image1.Picture = LoadPicture(TextBox8.Text)
        End If
    End With
End Sub

「商品名」や「単価」は、「リレーショナル データベースのように使う」で解説した VLOOKUP 関数を使います。金額には「\」記号や 3 桁ごとの「,」を表示したいので、Format 関数で整形しました。

最後にコマンドボタンのプロシージャです。

Private Sub CommandButton1_Click() ''[閉じる]ボタン
    Unload Me
End Sub



こんな感じです。

このトピックで解説したブックは、下からダウンロードできます。実際にコードをご覧になりたい方はどうぞ。UserForm は VBE から表示してください。また、画像のパスは私の環境に合わせてあります。画像を表示するときは [商品マスター] シートの「画像」パスを適時書き換えてください。 なお、ダウンロードファイルは LZH 形式で圧縮しています。圧縮していない BOOK 形式のファイルをご希望の方はメールにてご連絡ください。

サンプルのダウンロード「db_sample.lzh(14,859byte)」 (中身はExcel 2000 で作成した db_sample.xls です)


このエントリーをはてなブックマークに追加