| 
    
     |  | はじめまして。テキストボックスから検索値を入力して、 抽出するようにしたいのですが、オブジェクトが必要ですとでて
 フォームを表示することすら出来ません。
 本に載っているデータを変えただけなのですが、うまくいきません。
 大変長文で申し訳ないのですが、お教え頂けませんでしょうか?
 よろしくお願いいたします。(2つのフォームが順番に出るようになっています。)
 frm Main↓
 Dim HyoujiSheetName As String  ' 表示するワークシートの名前
 ' "住所録"または"抽出結果"
 Dim TourokuKensuu As Long    ' 住所録の登録件数
 
 
 '
 ' [抽出条件を設定]ボタンがクリックされた場合の処理
 '
 Private Sub cmdSettei_Click()
 ' 作成した抽出条件設定用のフォームを表示
 frmJyouken.Show vbModeless
 End Sub
 
 
 ' スクロールバーのつまみの位置が変更された場合の処理
 '
 ' ただし、つまみがドラッグされている場合はScrollイベントが発生し、
 ' ドラッグが終了した時点でChangeイベントが発生する
 '
 Private Sub srlMove_Change()
 
 ' スクロールバーが保持している表示データ番号(Valueプロパティ)の
 ' データをフォームに表示
 Hyouji HyoujiSheetName, srlMove.Value
 
 ' 何件目を表示しているかを更新
 lblHyoujiKensuu.Caption = srlMove.Value & "件目を表示中"
 
 End Sub
 
 
 '
 ' スクロールバーのつまみがドラッグされた場合の処理
 '
 ' ドラッグを終了するとChangeイベントが発生する
 '
 Private Sub srlMove_Scroll()
 
 ' このマクロでは、Changeの場合と同じ処理を行っている
 ' 複雑な計算が含まれる場合や画像を表示する場合などは、
 ' Scrollイベントでは行わず、Changeイベントのみで
 ' 行うようにするとよい
 Hyouji HyoujiSheetName, srlMove.Value
 lblHyoujiKensuu.Caption = srlMove.Value & "件目を表示中"
 
 End Sub
 
 
 '
 '[条件を満たすデータを抽出] ボタンがクリックされた場合の処理
 '
 Private Sub tglCyuusyutsu_Click()
 
 Dim Kensuu As Long
 
 ' [条件を満たすデータを抽出]ボタンが押し込まれた場合の処理
 '(抽出表示モードが設定された)
 ' ValueプロパティがTrueの場合は押し込まれた状態、
 ' Falseの場合は出っ張った状態
 If tglCyuusyutsu.Value = True Then
 
 ' 抽出プロシージャを呼び出し、抽出件数を変数に代入
 Kensuu = Cyuusyutsu()
 
 ' 抽出件数によって処理を変える
 
 If Kensuu = 0 Then
 
 ' 抽出されたデータがなかったので、メッセージを表示
 MsgBox "抽出条件を満たすデータは見つかりませんでした。"
 
 ' 抽出モードを強制的に解除
 tglCyuusyutsu.Value = False
 
 Exit Sub
 
 Else
 
 ' 抽出されたデータが1件以上ある場合、
 ' シート[抽出結果]を表示するワークシートにする
 ' シート[住所録]も[抽出結果]も同じように項目が配置された
 ' ワークシートなので、フォームとマクロは共通のままで
 ' 表示対象のワークシートを切り替える
 HyoujiSheetName = "抽出結果"
 
 ' シート[住所録]と[抽出結果]では、データの件数が異なるので
 ' 表示切り替え用のスクロールバーの値を設定し直す
 ScrollBarSet Kensuu
 
 ' シート[抽出結果]の1件目を表示する
 ' 件数から実際に表示する行番号への変換はHyoujiプロシージャ内で行う
 Hyouji HyoujiSheetName, 1
 
 ' シート[抽出結果]を表示する(確認用)
 Worksheets("抽出結果").Select
 Exit Sub
 
 End If
 
 End If
 
 '
 ' [条件を満たすデータを抽出]ボタンが出っ張った場合の処理
 '(抽出表示モードが解除された)
 '
 
 ' 表示対象をシート[住所録]に変更
 HyoujiSheetName = "住所録"
 
 ' 表示切り替え用のスクロールバーの値を設定
 ScrollBarSet TourokuKensuu
 
 ' シート[住所録]の1件目を表示
 Hyouji HyoujiSheetName, 1
 
 ' シート[住所録]を表示する(確認用)
 Worksheets("住所録").Select
 
 End Sub
 
 
 '
 ' ユーザーフォームの表示直前に行われる処理
 '
 Private Sub UserForm_Initialize()
 
 ' シート[住所録]に書き込まれているデータの件数をチェック
 
 
 HyoujiSheetName = "住所録"
 Hyouji HyoujiSheetName, 1
 ScrollBarSet TourokuKensuu
 cmdSettei.SetFocus
 
 ' 抽出条件を指定するフォームにあるコンボボックスに選択肢と
 ' あらかじめ選ばれている選択肢を指定
 ' frmJyoukenのUserForm_Initializeで行わないのは、
 ' 以前の検索状態を保持するため
 '
 frmJyouken.cmbTosyoJyouken.RowSource = "抽出条件!I3:I5"
 frmJyouken.cmbTosyoJyouken.ListIndex = 0
 
 frmJyouken.cmbTitleJyouken.RowSource = "抽出条件!I3:I5"
 frmJyouken.cmbTitleJyouken.ListIndex = 0
 
 frmJyouken.cmbTyosyaJyouken.RowSource = "抽出条件!I3:I5"
 frmJyouken.cmbTyosyaJyouken.ListIndex = 0
 
 frmJyouken.cmbSyuppansyaJyouken.RowSource = "抽出条件!I3:I5"
 frmJyouken.cmbSyuppansyaJyouken.ListIndex = 0
 
 frmJyouken.cmbBunyaJyouken.RowSource = "抽出条件!I3:I5"
 frmJyouken.cmbBunyaJyouken.ListIndex = 0
 
 frmJyouken.cmbBunruiJyouken.RowSource = "抽出条件!I3:I5"
 frmJyouken.cmbBunruiJyouken.ListIndex = 0
 
 frmJyouken.cmbTanabanJyouken.RowSource = "抽出条件!I3:I5"
 frmJyouken.cmbTanabanJyouken.ListIndex = 0
 
 End Sub
 
 
 '
 ' マクロの終了処理
 '
 '
 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 
 ' frmJyoukenは隠したままで閉じていないため、Endステートメントで
 ' 表示されているすべてのユーザーフォームを閉じる
 ' Unload frmJyouken と記述してもよい
 
 End
 
 End Sub
 
 
 '
 ' 引数で指定されたワークシートに何件のデータが登録されているかを
 ' 返すFunctionプロシージャ
 '
 '  引 数:SheetName(String型)    データ数を調べたいワークシートの名前
 '  戻り値:MaxTourokuKensuu(Long型) データの件数
 '
 Function MaxTourokuKensuu(SheetName As String) As Long
 
 Dim Gyou As Long
 
 Gyou = Worksheets(SheetName).Cells(1, 1).End(xlDown).Row
 
 If Gyou = 65536 Then
 MaxTourokuKensuu = 0
 Else
 MaxTourokuKensuu = Gyou - 1
 End If
 
 End Function
 
 
 '
 ' 引数で指定されたワークシートにあるデータ番号(TourokuNo)のデータを
 ' 読み込み、ユーザーフォームに表示する
 '
 '  引 数:SheetName(String型)  ワークシートの名前
 '      TourokuNo(Long型)   表示するデータ番号
 '                  ※行番号ではないことに注意
 '
 Sub Hyouji(SheetName As String, TourokuNo As Long)
 
 ' 変数を介さずコントロールに直接セルの値を代入
 ' TourokuNo + 1は、データ番号から行番号に変換している
 txtTosyo.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 1).Text
 ' 各コントロールにセルから読み込んだ値を代入
 txtTitle.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 2).Text
 txtTyosya.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 3).Text
 txtSyuppansya.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 4).Text
 txtBunya.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 5).Text
 txtBunrui.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 6).Text
 txtTnanaban.Text = Worksheets(SheetName).Cells(TourokuNo + 1, 7).Text
 
 End Sub
 
 
 '
 ' 条件を満たすデータをシート[抽出結果]にコピーし、抽出件数を返すFunctionプロシージャ
 '
 '  引 数:なし
 '      ただしシート[抽出条件]のセルA1〜D2を参照する
 '  戻り値:Cyuusyutsu(Long型) 抽出したデータの件数
 '
 Function Cyuusyutsu() As Long
 
 ' シート[抽出結果]をクリアする
 Worksheets("抽出結果").Range("A1:G65536").Clear
 
 ' Worksheets("〜").Range(Cells(y1,x1),Cells(y2,x2)).〜という記述は
 ' できないので、Worksheetsを選択する。以降、Worksheetsの選択が不要となり
 ' Range(Cells(y1,x1),Cells(y2,x2)).〜と記述できる
 Worksheets("住所録").Select
 
 ' AdvancedFilterは、指定した範囲内から抽出条件を満たすものを
 ' 指定範囲に抽出する
 Range(Cells(1, 1), Cells(TourokuKensuu + 1, 7)).AdvancedFilter _
 xlFilterCopy, _
 Worksheets("抽出条件").Range("A1:G2"), _
 Worksheets("抽出結果").Range("A1:G65536")
 
 '抽出したデータの件数を戻り値にする
 Cyuusyutsu = MaxTourokuKensuu("抽出結果")
 
 End Function
 
 
 ' 表示切り替え用のスクロールバーにデータの最小件数(1)、最大件数
 ' などを設定する
 '
 '  引 数:MaxKensuu(Long型) データの最大件数
 '
 Sub ScrollBarSet(MaxKensuu As Long)
 
 ' スクロールバーの最大値はデータの最大件数に連動する
 srlMove.Max = MaxKensuu
 
 ' 最小値は常に1
 srlMove.Min = 1
 
 ' Valueプロパティはつまみの位置によって変わる
 ' 現在の表示データはこの値を使用する
 srlMove.Value = 1
 
 ' ProportionalThumb = Trueとすると、データの件数によってつまみの
 ' 大きさが変化する。Falseにすると、つまみの大きさは固定となる
 srlMove.ProportionalThumb = True
 
 ' 左右の三角ボタンなどをクリックすると、Valueプロパティの値を
 ' いくつずつ増減するかを指定する
 srlMove.SmallChange = 1
 srlMove.LargeChange = CLng((srlMove.Max - srlMove.Min) / 10) + 1
 
 ' ラベルに最大件数と現在の表示データの位置を表示
 lblMaxKensuu.Caption = MaxKensuu & "件"
 lblHyoujiKensuu.Caption = srlMove.Value & "件目を表示中"
 
 End Sub
 
 |  |