<Excel UserForm リストボックスを使ってみた>
どうも、三流プログラマーのKen3です。 今回は、 Excelのユーザーフォームで、リストボックスを使ってみます。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba121.lzh にvba121.xlsが保存されています。/* * 1. 今回のキッカケ */
掲示板のやりとりから、 ----- >投稿時間:2003/08/03(Sun) 11:26 >タイトル:Re^4: VBAでの自動解凍 > >現在のコード >Option Explicit >Private Declare Function Unlha Lib "UNLHA32.DLL" (ByVal Cal >lhwnd As Long, ByVal LHACommand As String, ByVal RetBuff As Stri >ng, ByVal RetBuffSize As Long) As Long >Private Sub CommandButton1_Click() >'********* UnLHA32.DLLを使ってLZHファイルを解凍する *** >****** >Dim Ret As String * 255 'UnLHAからの結果を >入れるバッファ(長さ255バイト) >Dim SendStr As String 'コマンド゛文字列 >Dim sourceFile As String '解凍する圧縮ファイル >Dim targetDir As String '解凍先ディレクトリ >Dim Result As Long '戻り値 > >targetDir = "C:\あ\い\" > >If targetDir = "" Then Exit Sub '解凍処理中止。 >ChDir "C:\LZHファイル" >sourceFile = Application.GetOpenFilename("lzhファイル(* >.lzh),*.lzh") > >SendStr = "e " & sourceFile & " " & targetD >ir '(スペースで区切っていることに注意) >Result = Unlha(0, SendStr, Ret, 255) 'UnLHA実行! >If Result = 0 Then MsgBox (Ret) '解凍に >成功したら、結果報告 >End Sub > >なんとか、ここまでたどり着きましたが「LZHファイル」フォルダ >の中にあるlzhファイルの種類と数が多いので上の >「Application.GetOpenFilename〜」では全てのlzhファイルがダイア >ログボックスに表示してしまいます。 >そこで、ファイル名に含まれる文字である程度絞込み、その中からひ >とつを選べるようにしたいのですが、どうすればいいでしょうか。 ----- *.lzhファイルが多いので、 ファイルに含まれる文字で絞り込みたいのかぁ。/* * 2.Application.GetOpenFilenameをテストしてみる。 */
そんなの簡単、vb*.lzhとワイルドカード指定でしょ? と安易に思い、下記のテストを行ってみる。 下記、vb*.lzh指定でダメだったサンプルです・・ なにかありそうだけど・・・
| Sub aaa()
    'ChDir "e:\work"
    Dim strFPTN As String  'ファイルパターン?
    strFPTN = "lzhファイル(vb*.lzh),vb*.lzh"
    Dim strFN As String
    strFN = Application.GetOpenFilename(strFPTN)
    MsgBox strFN
End Sub | 
| Sub bbb()
    'ChDir "e:\work"
    Dim strFPTN As String  'ファイルパターン?
    strFPTN = "lzhファイル(*.lzh), *.lzh"
    strFPTN = strFPTN & ",テキストファイル, *.txt;*.csv"
    Dim strFN As String
    strFN = Application.GetOpenFilename(strFPTN)
    MsgBox strFN
End Sub | 
 ↑ファイルの種類を指定してみた
頭のファイル名の部分は指定できないのかなぁ・・・なんか勘違いありそうだけど。
↑ファイルの種類を指定してみた
頭のファイル名の部分は指定できないのかなぁ・・・なんか勘違いありそうだけど。
 すると、白紙のフォームを作成することが出来ます。
すると、白紙のフォームを作成することが出来ます。
 ツールボックスから
リストボックスコントロールを選択してフォームに貼ります。
ツールボックスから
リストボックスコントロールを選択してフォームに貼ります。
 フォームの初期化時のイベントで、
カレントディレクトリのvb*.lzhをリストボックスに追加してみます。
フォームの初期化時のイベントで、
カレントディレクトリのvb*.lzhをリストボックスに追加してみます。
| Private Sub UserForm_Initialize()
    'フォームの初期化イベントでリストボックスにデータをセットする
    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 | 
 ↑リストボックスへセットした結果
リストボックスの中身を用意できたら、
次は、選択されたデータを判断したいですよね。
ボタンが押されたら、選択されたファイル名を表示してみます。
1つボタンのコントロールを追加して、
そのボタンのクリックイベントに書いてみます。
↑リストボックスへセットした結果
リストボックスの中身を用意できたら、
次は、選択されたデータを判断したいですよね。
ボタンが押されたら、選択されたファイル名を表示してみます。
1つボタンのコントロールを追加して、
そのボタンのクリックイベントに書いてみます。
| Private Sub btn01_Click()
    
    Dim strDATA As String
    
    strDATA = Me.ListBox1.Text  '.Textプロパティの値を代入
    
    MsgBox "選択されたデータは、" & strDATA
End Sub | 
 んっ、何も選択しないと、、まぁ=""で判断できるのかな。
んっ、何も選択しないと、、まぁ=""で判断できるのかな。
| Private Sub btn01_Click()
    Dim strDATA As String
    
    strDATA = Me.ListBox1.Text  '.Textプロパティの値を代入
    If strDATA = "" Then
        MsgBox "データを選択してからボタンを押してね"
    Else
        MsgBox "選択されたデータは、" & strDATA
    End If
End Sub | 
| Sub ccc()
    'ChDrive "E"      'ドライブの変更
    'ChDir "e:\work"  'フォルダーの変更
    UserForm1.Show    'ユーザーフォームを表示する
End Sub | 
| Private Sub btn01_Click()
    
    Dim strDATA As String
    
    strDATA = Me.ListBox1.Text  '.Textプロパティの値を代入
    If strDATA = "" Then
        MsgBox "データを選択してからボタンを押してね"
        Exit Sub
    End If
    
    '********* UnLHA32.DLLを使ってLZHファイルを解凍する *********
    
    Dim Ret As String * 255  'UnLHAからの結果を入れるバッファ(長さ255バイト)
    Dim SendStr As String                'コマンド゛文字列
    Dim sourceFile As String             '解凍する圧縮ファイル
    Dim targetDir As String              '解凍先ディレクトリ
    Dim Result As Long                   '戻り値
    Dim Msg1 As String
    '↓解凍先ディレクトリ
    'targetDir = "e:\work\test\"  '←固定値をセットしてもいいし
    targetDir = CurDir() & "\"    'カレントディレクトリをセットする
    '↓解凍したい.lzhファイル
    sourceFile = CurDir() & "\" & strDATA
    '↑選択されたファイル名を+して、フルパスを作成する
    
    'C:\Documents and Settings\ken3\My Documents
    'みたいに、スペース付のフォルダの予防で”chr(&h22)を付ける
    sourceFile = Chr(&H22) & sourceFile & Chr(&H22)
    targetDir = Chr(&H22) & targetDir & Chr(&H22)
  '"C:\Documents and Settings\ken3\My Documents"とダブルコーテーション付にする
    'ここで、コマンドを作っている
    SendStr = "e " & sourceFile & " " & targetDir
                    '(スペースで区切っていることに注意)
                                                    
    Result = Unlha(0, SendStr, Ret, 255)        'UnLHA実行!
        
    If Result = 0 Then MsgBox (Ret)             '解凍に成功したら、結果報告
    '作業が終了、フォームを閉じる
    Unload Me
End Sub | 
| Private Sub UserForm_Initialize()
    'フォームの初期化イベントでリストボックスにデータをセットする
    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 | 
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
| 気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 | 
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]