<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 |
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 |
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のサンプルコード]/
広告-[通販人気商品の足跡]