[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.122 Excel UserForm ラベルに情報を表示する

Excel UserForm ラベルに情報を表示する

メルマガ発行内容

<Excel UserForm ラベルに情報を表示する>

どうも、三流プログラマーのKen3です。 今回は、 Excelのユーザーフォームに、 ラベルで情報を表示してみます。 今回のサンプルファイルは、 http://www.ken3.org/vba/lzh/vba122.lzh にvba122.xlsが保存されています。

/* * 1. 今回のキッカケ */

前回、質素な(機能的に貧しい)、 ファイル選択のユーザーフォームを作成しました。 作成したユーザーフォームを呼ぶ前に カレントディレクトリをセットして、 ユーザーフォームを呼ぶ、そんな処理でした。
Sub ccc()
    ChDrive "E"      'ドライブの変更
    ChDir "e:\work"  'フォルダーの変更
    UserForm1.Show   'ユーザーフォームを表示する
End Sub
すごい不親切なプログラムで、 リストボックスにファイル名が表示されるが、 ChDrive "E" や ChDir "e:\work" で変更したカレントドライブ・フォルダーを表示してなく、 どこのフォルダー?と一瞬わからない作りです。 ↑選択元フォルダーがよくわからないイメージです。 ~~~~~~~~~~~~~~~~~~

/* * 2.ラベルを貼り、フォルダーを表示する */

そこで、ラベルコントロールをフォームに貼り、 ファイルの選択元のフォルダー名を表示してみたいと思います。 まず、表示用のラベルコントロールをフォームに貼ります。 あとは、フォームの初期化イベントで、 ラベルコントロールの.Captionプロパティに表示したい文字列をセットします。
Private Sub UserForm_Initialize()
    'ラベルにフォルダーを表示する
    Me.Label1.Caption = CurDir() & "\" 'カレントディレクトリをセットする

    'フォームの初期化イベントでリストボックスにデータをセットする
    Dim strWORK As String
    
    Me.ListBox1.Clear  '.Clearで内容を全てクリア
    
    strWORK = Dir("vb*.lzh")  'カレントのVB*.lzhを検索する
    While strWORK <> ""
        '取得したファイル名をリストに追加する、ITEMの追加
        Me.ListBox1.AddItem (strWORK)
        '次のファイル名を取得する
        strWORK = Dir() '引数無しで呼ぶと次のファイル名がセットされる
    Wend

End Sub
意外とあっけなく、 'ラベルにフォルダーを表示する Me.Label1.Caption = CurDir() & "\" 'カレントディレクトリをセットする と .Captionに表示したい文字列をセットするだけでOKでした。 ↑無事、フォルダー名が表示されました。

/* * 3. 1+1で2を作成する。フォルダーの選択関数を流用する */

これで、当初の目的、どこのフォルダーかわからない? は、解消されたけど、 今度は、自分でフォルダーを選択したい、 デフォルトのフォルダーから自由なフォルダーに変えたい、、、 なんて要望が出てきます。 1+1=2じゃないけど、機能を+してみます。 追加する機能は、フォルダーの選択機能です。 フォルダーの選択は、昔作ったヤツを流用(+1機能)します。 フォルダーの選択処理の詳細は、 フォルダーを選択してファイルリストを作成する http://www.ken3.org/vba/vba-folder.html と No.114 VBA で WScript.ShellのSpecialFoldersプロパティを使ってみた http://www.ken3.org/backno/backno_vba23.html#114 を見てください。 'フォルダー選択ダイアログを表示して、リターン値で選択場所を返す 'キャンセルの時は文字列""(空文字列)を返す
Public Function getFOLDER() As String

    Dim objShell  As Object 'Shell
    Dim objFolder As Object 'Shell32.Folder
    Const strTitle = "フォルダを選択してください。"

    'シェルのオブジェクトを作成する
    Set objShell = CreateObject("Shell.Application")

    'フォルダー参照に設定
    Const lngRef = &H1
    'ルートフォルダーをデスクトップに設定
    '5でMy Documents、6でFavoritesなど
    Const fldRoot = &H0

    Set objFolder = _
            objShell.BrowseForFolder(0, _
                strTitle, lngRef, fldRoot)
    
    'フォルダー名を取出し、リターン値をセット
    If objFolder Is Nothing Then 'キャンセルチェック
        getFOLDER = ""  'リターン値に""空文字列をセット
    Else
        If objFolder.ParentFolder Is Nothing Then  '下位を未選択デスクトップ?
            Dim objWShell As Object 'WScript.Shell
            'シェルのオブジェクトを作成する
            Set objWShell = CreateObject("WScript.Shell")
            'デスクトップの場所を返す
            getFOLDER = objWShell.SpecialFolders("Desktop")
            'オブジェクトの開放
            Set objWShell = Nothing
        Else
            getFOLDER = objFolder.Items.Item.Path 'パスをセットする
        End If
    End If

    Set objFolder = Nothing
    Set objShell = Nothing

End Function
と、このgetFOLDER関数を標準モジュールに書いておいて、 フォームにフォルダー選択のボタンを1つ追加します。
Private Sub CommandButton2_Click()
    Dim strFOLDER As String  '選択されたフォルダー名称
    
    strFOLDER = getFOLDER()  'フォルダーの選択関数を呼ぶ
    If strFOLDER = "" Then   '選択結果がキャンセルかチェックする
        Exit Sub   '関数を途中で抜ける
    End If
    'カレントドライブ、ディレクトリを変更する
    ChDrive Left(strFOLDER, 1) '頭のドライブ文字のセット
    ChDir strFOLDER  'フォルダーの変更
    
    'リストボックスの内容を変更する
    'ラベルにフォルダーを表示する
    Me.Label1.Caption = CurDir() & "\" 'カレントディレクトリをセットする

    'フォームの初期化イベントでリストボックスにデータをセットする
    Dim strWORK As String
    
    Me.ListBox1.Clear  '.Clearで内容を全てクリア
    
    strWORK = Dir("vb*.lzh")  'カレントのVB*.lzhを検索する
    While strWORK <> ""
        '取得したファイル名をリストに追加する、ITEMの追加
        Me.ListBox1.AddItem (strWORK)
        '次のファイル名を取得する
        strWORK = Dir() '引数無しで呼ぶと次のファイル名がセットされる
    Wend
End Sub
処理のポイントは、 strFOLDER = getFOLDER() 'フォルダーの選択関数を呼ぶ と、フォルダーの選択関数を呼んでフォルダーを選択させます。 If strFOLDER = "" Then '選択結果がキャンセルかチェックする Exit Sub '関数を途中で抜ける End If で、フォルダー選択がキャンセルか判断して、 選択されていたら、 'カレントドライブ、ディレクトリを変更する ChDrive Left(strFOLDER, 1) '頭のドライブ文字のセット ChDir strFOLDER 'フォルダーの変更 と、 カレントのドライブ、ディレクトリを選択されたフォルダーに変更します。 あとは、ラベルとリストボックスに新しい値をセットします。 ↑無事、フォルダーが変更されました。

/* * 4.終わりの挨拶 */

今回は、 Excelのユーザーフォームで、 ラベルに情報を表示してみました。 .Captionにセットしただけなんだけど。 あとは、固定のフォルダーだとイヤなので、 フォルダー選択の関数を+して、 カレントディレクトリの切り替えを可能としました。 すると、出てくるのが、 今、vb*.lzh固定でやっている、 これを自分でdoc*.lzhやmdb??.lzhなど、 ワイルドカードを入力したりし、パターンを変えたくなって来るよね。 汎用のファイル選択には、まだまだ程遠いかなぁ。 今回のサンプルファイルは、 http://www.ken3.org/vba/lzh/vba122.lzh にvba122.xlsが保存されています。 テストして、遊んでみてください。 何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。


ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

種類別のリンク や 広告など

気になったジャンル↓を選択してください。

人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]

仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [VBAやASPのサンプルコード]/ 広告-[通販人気商品の足跡]



[三流君(TOP ken3.org へ戻る)] / [VBA系TOPへ] / [VBA系バックナンバー目次へ移動]