[三流君] −−> [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でした。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.122を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・