Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


327 / 500 ページ ←次へ | 前へ→

【6676】コンボボックスでの検索方法(5)
質問  チャラ  - 05/10/29(土) 23:47 -

引用なし
パスワード
   <つづき3>

(4) フォームのクラスモジュール
------------------------------------------------------------------------------------------------
フォーム[FrmMain]
------------------------------------------------------------------------------------------------
Option Compare Database
Option Explicit

'-----------------------------------------------------------------------------------------------
'プロパティ値保存用オブジェクト変数
'-----------------------------------------------------------------------------------------------
Private mAutoFilterSetting As dbsProject1.ClsAutoFilterSetting

'-----------------------------------------------------------------------------------------------
'プロパティの値を取得 - オートフィルタ設定
'-----------------------------------------------------------------------------------------------
Public Property Get AutoFilterSetting() As dbsProject1.ClsAutoFilterSetting
Set AutoFilterSetting = mAutoFilterSetting
End Property

'-----------------------------------------------------------------------------------------------
'プロパティに値を設定 - オートフィルタ設定
'-----------------------------------------------------------------------------------------------
Public Property Set AutoFilterSetting(ByVal pAutoFilterSetting As dbsProject1.ClsAutoFilterSetting)
Set mAutoFilterSetting = pAutoFilterSetting
End Property

'-----------------------------------------------------------------------------------------------
'フォーム - 読み込み時イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub Form_Load()
Set mAutoFilterSetting = New dbsProject1.ClsAutoFilterSetting
Me.AutoFilterSetting.PropertyInitialize _
MainForm:=Me _
, DisplayForm:=Me.SfmFrmSub.Form _
, rstRecordSource:=Me.SfmFrmSub.Form.RecordsetClone
End Sub

'-----------------------------------------------------------------------------------------------
'フォーム - 閉じる時イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub Form_Close()
Set mAutoFilterSetting = Nothing
End Sub

'-----------------------------------------------------------------------------------------------
'条件指定用コントロールのフォーカス取得後
'-----------------------------------------------------------------------------------------------
Private Function EvtFilterControl_OnGotFocus() As Long
Me.AutoFilterSetting.EvtFilterControlGotFocus FilterControl:=Me.ActiveControl
End Function

'-----------------------------------------------------------------------------------------------
'条件指定用コントロールの更新後処理
'-----------------------------------------------------------------------------------------------
Private Function EvtFilterControl_AfterUpdate() As Long
Me.AutoFilterSetting.EvtFilterControlAfterUpdate FilterControl:=Me.ActiveControl
End Function

------------------------------------------------------------------------------------------------
フォーム[FrmAutoFilterOption]
------------------------------------------------------------------------------------------------
Option Compare Database
Option Explicit

'-----------------------------------------------------------------------------------------------
'プロパティ値保存用定数
'-----------------------------------------------------------------------------------------------
Private Const cFilterCompareRowSourceType As String = "Value List"
Private Const cFilterCompareRowSource As String _
= ";;" _
& "と等しい;=;" _
& "と等しくない;<>;"

'-----------------------------------------------------------------------------------------------
'プロパティ値保存用オブジェクト変数
'-----------------------------------------------------------------------------------------------
Private mAutoFilterSetting As dbsProject1.ClsAutoFilterSetting

'-----------------------------------------------------------------------------------------------
'プロパティの値を取得 - オートフィルタ設定
'-----------------------------------------------------------------------------------------------
Public Property Get AutoFilterSetting() As dbsProject1.ClsAutoFilterSetting
Set AutoFilterSetting = mAutoFilterSetting
End Property

'-----------------------------------------------------------------------------------------------
'プロパティに値を設定 - オートフィルタ設定
'-----------------------------------------------------------------------------------------------
Public Property Set AutoFilterSetting(ByVal pAutoFilterSetting As dbsProject1.ClsAutoFilterSetting)
Set mAutoFilterSetting = pAutoFilterSetting
End Property

'-----------------------------------------------------------------------------------------------
'フォーム - 開く時イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub Form_Open(Cancel As Integer)

'他のフォームから呼び出されていない場合
If IsNull(Me.OpenArgs) Then
Let Cancel = True
End If
End Sub

'-----------------------------------------------------------------------------------------------
'フォーム - 読み込み時イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub Form_Load()

'オブジェクト変数
Dim clsElement As dbsProject1.ClsAutoFilterControlSetting

'初期設定
Set mAutoFilterSetting = Application.Forms(Me.OpenArgs).AutoFilterSetting
Set clsElement = Me.AutoFilterSetting.Items(Index:=Me.AutoFilterSetting.CurrentFilterControl.Name)

'オプショングループのラベルに対象フィールド名を設定
Let Me.FraFilterOption.Controls(0).Caption = clsElement.FieldName

'演算子の設定
Select Case clsElement.FilterOperator

'設定が保存されている場合
Case Me.OptAnd.OptionValue, Me.OptOr.OptionValue
Let Me.FraFilterOption.Value = clsElement.FilterOperator

'そうでない場合 - ANDに設定
Case Else
Let Me.FraFilterOption.Value = Me.OptAnd.OptionValue
End Select

'値(条件1)指定用コンボボックスの設定
Let Me.CmbValues1.RowSource _
= Me.AutoFilterSetting.GetRowSource( _
FilterControlName:=clsElement.FilterControlName, AddListOption:=False)
If Not (IsNull(clsElement.FilterValues1)) Then
Let Me.CmbValues1.Value = clsElement.FilterValues1
End If

'値(条件2)指定用コンボボックスの値集合ソース(2)
Let Me.CmbValues2.RowSource _
= Me.AutoFilterSetting.GetRowSource( _
FilterControlName:=clsElement.FilterControlName, AddListOption:=False)
If Not (IsNull(clsElement.FilterValues2)) Then
Let Me.CmbValues2.Value = clsElement.FilterValues2
End If

'比較方法指定用コンボボックスの設定(1)
With Me.CmbCompare1
.ColumnCount = 2
.RowSourceType = cFilterCompareRowSourceType
.RowSource = cFilterCompareRowSource
.ColumnWidths = Format(.Width, "0\;") & "0;"
.Value = .ItemData(clsElement.FilterCompare1)
End With

'比較方法指定用コンボボックスの設定(1)
With Me.CmbCompare2
.ColumnCount = 2
.RowSourceType = cFilterCompareRowSourceType
.RowSource = cFilterCompareRowSource
.ColumnWidths = Format(.Width, "0\;") & "0;"
.Value = .ItemData(clsElement.FilterCompare2)
End With

'オブジェクト変数の解放
Set clsElement = Nothing
End Sub

'-----------------------------------------------------------------------------------------------
'フォーム - 閉じる時イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub Form_Close()
Set mAutoFilterSetting = Nothing
End Sub

'-----------------------------------------------------------------------------------------------
'オプショングループ [条件] - 更新後処理イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub FraFilterOption_AfterUpdate()

'演算子の設定を更新
With Me.AutoFilterSetting
.Item(.CurrentFilterControl.Name).FilterOperator = Me.FraFilterOption.Value
End With
End Sub

'-----------------------------------------------------------------------------------------------
'コンボボックス [値(条件1)] - 更新後処理イベントプロシージャ
'-----------------------------------------------------------------------------------------------
Private Sub CmbValues1_AfterUpdate()

'値(条件1)の設定を更新
With Me.AutoFilterSetting
.Item(.CurrentFilterControl.Name).FilterValues1 = Me.CmbValues1.Value
End With
End Sub
・ツリー全体表示

【6675】コンボボックスでの検索方法(4)
質問  チャラ  - 05/10/29(土) 23:41 -

引用なし
パスワード
   '--------------------------------------------------------------------------
'値集合ソースの取得
'-------------------------------------------------------------------------
Public Function GetRowSource( _
ByVal FilterControlName As String, ByVal AddListOption As Boolean) As String

'オブジェクト変数
Dim clsElement As dbsProject1.ClsAutoFilterControlSetting

'その他の変数
Dim strRowSource As String
Dim strFilter As String

'オプションリストを追加する場合
If AddListOption Then
Let strRowSource _
= "SELECT '(すべて)', 0 FROM " & Me.TableName & VBA.vbNewLine _
& "UNION SELECT '(オプション)', 1 FROM " & Me.TableName & VBA.vbNewLine _
& "UNION "
End If

'SELECT選択列リストからWHERE句まで生成
For Each clsElement In Me.Items

'フォーカスを取得しているコントロールの場合
If clsElement.FilterControlName = FilterControlName Then
Let strRowSource _
= strRowSource _
& "SELECT DISTINCT " & clsElement.FieldName & ", 2 FROM " & Me.TableName & VBA.vbNewLine

'それ以外のコントロールでフィルタ文字列が存在する場合
ElseIf Not (Len(clsElement.Filter) = 0) Then
Let strFilter = strFilter & " AND " & clsElement.Filter
End If
Next
If Not (Len(strFilter) = 0) Then
Let strFilter = "WHERE " & Mid(strFilter, Len(" AND ") + 1) & VBA.vbNewLine
End If

'ORDER BY句を追加
Let strRowSource = strRowSource & strFilter & "ORDER BY 2, 1 " & VBA.vbNewLine

'戻り値の設定 - 値集合ソース
Let GetRowSource = strRowSource
End Function

'--------------------------------------------------------------------------
'フィルタ文字列の取得
'--------------------------------------------------------------------------
Public Function GetFilter(ByVal FilterControlName As String) As String

'オブジェクト変数
Dim clsElement As dbsProject1.ClsAutoFilterControlSetting

'その他の変数
Dim strFilter As String

'フィルタ文字列の結合
For Each clsElement In Me.Items
If Not (Len(clsElement.Filter) = 0) Then
Let strFilter = strFilter & " AND " & clsElement.Filter
End If
Next
Let strFilter = Mid(strFilter, Len(" AND ") + 1)

'戻り値の設定 - フィルタ文字列
Let GetFilter = strFilter
End Function

'--------------------------------------------------------------------------
'条件指定用コントロールのフォーカス取得後
'--------------------------------------------------------------------------
Public Function EvtFilterControlGotFocus(ByVal FilterControl As Access.Control) As Long

'フォーカスを取得しているコントロールの設定
Set Me.CurrentFilterControl = FilterControl
Let Me.CurrentFilterControl.RowSource _
= Me.GetRowSource(FilterControlName:=Me.CurrentFilterControl.Name, AddListOption:=True)
Let FilterControl.RowSource = Me.CurrentFilterControl.RowSource
End Function

'--------------------------------------------------------------------------
'条件指定用コントロールの更新後処理
'--------------------------------------------------------------------------
Public Function EvtFilterControlAfterUpdate(ByVal FilterControl As Access.Control) As Long

Dim clsElement As dbsProject1.ClsAutoFilterControlSetting
Set clsElement = Me.Items(Index:=FilterControl.Name)
Set Me.CurrentFilterControl = FilterControl

'リストの選択内容で処理を分岐
Select Case Me.CurrentFilterControl.ListIndex

'(すべて)または非選択
Case Is < 1

'フィルタ文字列と値のクリア
Let clsElement.Filter = ""
Let clsElement.FilterValues1 = Null
Let clsElement.FilterValues2 = Null

'(オプション)
Case Is = 1

'オートフィルタオプションダイアログを開く
DoCmd.OpenForm FormName:=cAutoFilterOptionDialogName, OpenArgs:=Me.MainForm.Name

'その他の項目
Case Else

'フィルタ文字列の設定
Let clsElement.Filter _
= Application.BuildCriteria( _
Field:=clsElement.FieldName _
, FieldType:=clsElement.FieldType _
, Expression:="=" & Me.CurrentFilterControl.Value)

'値および比較方法の再設定
Let clsElement.FilterValues1 = Me.CurrentFilterControl.Value
Let clsElement.FilterValues2 = Null
Let clsElement.FilterCompare1 = 1 '[と等しい]
Let clsElement.FilterCompare2 = 0 '[空欄]
End Select

'結果表示用フォームにフィルタ適用
Let Me.DisplayForm.Filter = Me.GetFilter(FilterControlName:=Me.CurrentFilterControl.Name)
Let Me.DisplayForm.FilterOn = True
End Function
・ツリー全体表示

【6674】コンボボックスでの検索方法(3)
質問  チャラ  - 05/10/29(土) 23:38 -

引用なし
パスワード
   <つづき2>
---------------------------------------------------------------------------
クラスモジュール[ClsAutoFilterSetting]
---------------------------------------------------------------------------
Option Compare Database
Option Explicit

'--------------------------------------------------------------------------
'プロパティ値保存用定数
'--------------------------------------------------------------------------
Private Const cAutoFilterOptionDialogName As String = "FrmAutoFilterOption"
Private Const cProcedureNameOnGotFocus As String = "=EvtFilterControl_OnGotFocus()"
Private Const cProcedureNameAfterUpdate As String = "=EvtFilterControl_AfterUpdate()"

'--------------------------------------------------------------------------
'プロパティ値保存用オブジェクト変数
'--------------------------------------------------------------------------
Private mAutoFilterControlSettingCollection As VBA.Collection

'--------------------------------------------------------------------------
'プロパティ値保存用変数
'--------------------------------------------------------------------------
Private mCurrentFilterControl As Access.Control 'フォーカスを取得しているコントロール
Private mDisplayForm As Access.Form '結果表示用フォーム
Private mMainForm As Access.Form '条件指定用フォーム
Private mRowSourcePreFix As String 'オプションリスト文字列

'--------------------------------------------------------------------------
'クラス作成時イベントプロシージャ
'-------------------------------------------------------------------------
Private Sub Class_Initialize()
   Set mAutoFilterControlSettingCollection = New VBA.Collection
End Sub

'--------------------------------------------------------------------------
'クラス終了時イベントプロシージャ
'--------------------------------------------------------------------------
Private Sub Class_Terminate()
   Set mAutoFilterControlSettingCollection = Nothing
End Sub

'--------------------------------------------------------------------------
'プロパティの値を取得 - フォーカスを取得しているコントロール
'--------------------------------------------------------------------------
Public Property Get CurrentFilterControl() As Access.Control
   Set CurrentFilterControl = mCurrentFilterControl
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - フォーカスを取得しているコントロール
'--------------------------------------------------------------------------
Public Property Set CurrentFilterControl(ByVal pCurrentFilterControl As Access.Control)
   Set mCurrentFilterControl = pCurrentFilterControl
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - 条件指定用フォーム
'--------------------------------------------------------------------------
Public Property Get MainForm() As Access.Form
   Set MainForm = mMainForm
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - 条件指定用フォーム
'--------------------------------------------------------------------------
Public Property Set MainForm(ByVal pMainForm As Access.Form)
   Set mMainForm = pMainForm
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - 結果表示用フォーム
'--------------------------------------------------------------------------
Public Property Get DisplayForm() As Access.Form
   Set DisplayForm = mDisplayForm
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - 結果表示用フォーム
'--------------------------------------------------------------------------
Public Property Set DisplayForm(ByVal pDisplayForm As Access.Form)
   Set mDisplayForm = pDisplayForm
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - テーブル名 [読み取り専用]
'--------------------------------------------------------------------------
Public Property Get TableName() As String
   Let TableName = Me.DisplayForm.Form.RecordSource
End Property

'--------------------------------------------------------------------------
'コレクションに要素を追加
'------------------------------------------------------------------------
Public Function Append( _
      ByVal FilterControlName As String _
      , ByVal FieldName As String _
  , ByVal FieldType As Long) As dbsProject1.ClsAutoFilterControlSetting
  Dim clsElement As dbsProject1.ClsAutoFilterControlSetting
  Set clsElement = New dbsProject1.ClsAutoFilterControlSetting
  With clsElement
   .FilterControlName = FilterControlName
   .FieldName = FieldName
   .FieldType = FieldType
  End With
 mAutoFilterControlSettingCollection.Add Item:=clsElement, Key:=FilterControlName
Set Append = clsElement
Set clsElement = Nothing
End Function

'--------------------------------------------------------------------------
'コレクションの要素を取得(1)
'-------------------------------------------------------------------------
Public Function Items() As VBA.Collection
Set Items = mAutoFilterControlSettingCollection
End Function

'--------------------------------------------------------------------------
'コレクションの要素を取得(2)
'--------------------------------------------------------------------------
Public Function Item(ByVal Index As Variant) As dbsProject1.ClsAutoFilterControlSetting
Set Item = Me.Items(Index:=Index)
End Function

'--------------------------------------------------------------------------
'プロパティの初期化
'-------------------------------------------------------------------------
Public Function PropertyInitialize( _
ByVal MainForm As Access.Form _
, ByVal DisplayForm As Access.Form _
, ByVal rstRecordSource As DAO.Recordset) As Long

'オブジェクト変数
Dim ctl As Access.Control

'プロパティの設定(1)
Set Me.MainForm = MainForm
Set Me.DisplayForm = DisplayForm

'プロパティの設定(2)
For Each ctl In Me.MainForm.Section(acHeader).Controls
If Not (Len(ctl.Tag) = 0) Then
Select Case ctl.ControlType
Case acComboBox, acListBox
Me.Append _
FilterControlName:=ctl.Name, FieldName:=ctl.Tag _
, FieldType:=rstRecordSource.Fields(ctl.Tag).Type
Let ctl.OnGotFocus = cProcedureNameOnGotFocus
Let ctl.AfterUpdate = cProcedureNameAfterUpdate
End Select
End If
Next
End Function
・ツリー全体表示

【6673】Re:レコード件数の取得について
回答  小僧  - 05/10/29(土) 23:30 -

引用なし
パスワード
   ▼NK さん:
こんばんは。

>Me.Form.Filter = "区分 = 'A'"

メインフォームにフィルタを掛けているようなのですが…。

Private Sub cmdフィルタ_Click()
'要参照 Microsoft DAO x.x Object Library
Dim RS As DAO.Recordset
  Me.埋め込み0.Form.Filter = "区分 = 'A'"
  Me.埋め込み0.Form.FilterOn = True
  
  Set RS = Me.埋め込み0.Form.RecordsetClone
    RS.MoveLast
    Me.テキスト1 = RS.RecordCount
  RS.Close: Set RS = Nothing
End Sub

参考になりましたら幸いです。
・ツリー全体表示

【6672】コンボボックスでの検索方法(2)
質問  チャラ  - 05/10/29(土) 23:05 -

引用なし
パスワード
   <つづき>

次に教えてもらったコードを書き込みました。

(3) クラスモジュール
---------------------------------------------------------------------------クラスモジュール[ClsAutoFilterControlSetting]
---------------------------------------------------------------------------
Option Compare Database
Option Explicit

'--------------------------------------------------------------------------
'プロパティ値保存用変数(1)
'--------------------------------------------------------------------------
Private mFilterControlName As String 'コントロールの名前
Private mFieldName As String '対応するフィールドの名前
Private mFieldType As Long '対応するフィールドのデータ型
Private mFilter As String '対応するフィールドに対する抽出条件

'--------------------------------------------------------------------------
'プロパティ値保存用変数(2)
'--------------------------------------------------------------------------
Private mFilterValues1 As Variant '値(条件1)
Private mFilterValues2 As Variant '値(条件2)
Private mFilterCompare1 As Long '比較方法(条件1)
Private mFilterCompare2 As Long '比較方法(条件2)
Private mFilterOperator As Long '演算子

'--------------------------------------------------------------------------
'プロパティの値を取得 - コントロールの名前
'--------------------------------------------------------------------------
Public Property Get FilterControlName() As String
   Let FilterControlName = mFilterControlName
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - コントロールの名前
'--------------------------------------------------------------------------
Public Property Let FilterControlName(ByVal pFilterControlName As String)
   Let mFilterControlName = pFilterControlName
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - 対応するフィールドの名前
'--------------------------------------------------------------------------
Public Property Get FieldName() As String
   Let FieldName = mFieldName
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - 対応するフィールドの名前
'--------------------------------------------------------------------------
Public Property Let FieldName(ByVal pFieldName As String)
   Let mFieldName = pFieldName
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - 対応するフィールドのデータ型
'--------------------------------------------------------------------------
Public Property Get FieldType() As Long
   Let FieldType = mFieldType
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - 対応するフィールドのデータ型
'--------------------------------------------------------------------------
Public Property Let FieldType(ByVal pFieldType As Long)
   Let mFieldType = pFieldType
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - 対応するフィールドに対する抽出条件
'--------------------------------------------------------------------------
Public Property Get Filter() As String
   Let Filter = mFilter
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - 対応するフィールドに対する抽出条件
'--------------------------------------------------------------------------
Public Property Let Filter(ByVal pFilter As String)
   Let mFilter = pFilter
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - 値(条件1)
'--------------------------------------------------------------------------
Public Property Get FilterValues1() As Variant
   Let FilterValues1 = mFilterValues1
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - 値(条件1)
'--------------------------------------------------------------------------
Public Property Let FilterValues1(ByVal pFilterValues1 As Variant)
   Let mFilterValues1 = pFilterValues1
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - 値(条件2)
'--------------------------------------------------------------------------
Public Property Get FilterValues2() As Variant
   Let FilterValues2 = mFilterValues2
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - 値(条件2)
'--------------------------------------------------------------------------
Public Property Let FilterValues2(ByVal pFilterValues2 As Variant)
   Let mFilterValues2 = pFilterValues2
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - 比較方法(条件1)
'--------------------------------------------------------------------------
Public Property Get FilterCompare1() As Long
   Let FilterCompare1 = mFilterCompare1
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - 比較方法(条件1)
'--------------------------------------------------------------------------
Public Property Let FilterCompare1(ByVal pFilterCompare1 As Long)
   Let mFilterCompare1 = pFilterCompare1
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - 比較方法(条件2)
'--------------------------------------------------------------------------
Public Property Get FilterCompare2() As Long
   Let FilterCompare2 = mFilterCompare2
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - 比較方法(条件2)
'--------------------------------------------------------------------------
Public Property Let FilterCompare2(ByVal pFilterCompare2 As Long)
   Let mFilterCompare2 = pFilterCompare2
End Property

'--------------------------------------------------------------------------
'プロパティの値を取得 - 演算子
'--------------------------------------------------------------------------
Public Property Get FilterOperator() As Long
   Let FilterOperator = mFilterOperator
End Property

'--------------------------------------------------------------------------
'プロパティに値を設定 - 演算子
'--------------------------------------------------------------------------
Public Property Let FilterOperator(ByVal pFilterOperator As Long)
   Let mFilterOperator = pFilterOperator
End Property
・ツリー全体表示

【6671】Re:レコード数を制御して、Excelへ吐き出し
発言  小僧  - 05/10/29(土) 23:04 -

引用なし
パスワード
   ▼Saiyama さん:
こんばんは。

>No.1→設定した行間はそのまま
>No.22、43→設定した行間は元の状態に戻ってしまいました。

この事象が再現できません。

関係ないかもしれませんが、雛形を使う時には

>  On Error Resume Next
>    Kill xName
>  On Error GoTo 0

この 3 行も要りませんでしたね。

当方の環境(Ac2002、WinXP)ですと、雛形の書式設定のままデータのみ出力されました。
・ツリー全体表示

【6670】コンボボックスでの検索方法
発言  チャラ  - 05/10/29(土) 22:42 -

引用なし
パスワード
   エクセルのフィルタ機能のようなコンボボックスを作りたいのですが、どうしたらよいか
分かりません。ご指導お願いします。

(1) テーブル
---------------------------------------------------------------------------テーブル[T1]
---------------------------------------------------------------------------
F1 F2 F3
---------------------------------------------------------------------------
1 AAA 2005/01/01
1 AAA 2005/01/02
1 AAA 2005/01/01
1 AAA 2005/01/02
2 AAA 2005/01/01
2 AAA 2005/01/02
2 BBB 2005/01/01
2 BBB 2005/01/02
3 AAA 2005/01/03
3 AAA 2005/01/03
3 BBB 2005/01/03
3 BBB 2005/01/03

F1: 長整数型
F2: テキスト型
F3: 日付時刻型


(2) フォーム(使用するセクションおよびコントロールと初期状態から変更するプロパティ)
---------------------------------------------------------------------------
フォーム[FrmSub]
---------------------------------------------------------------------------
RecordSource/レコードソース: T1
---------------------------------------------------------------------------
詳細
---------------------------------------------------------------------------
テキストボックス[TxtF1] ControlSource/コントロールソース: F1
テキストボックス[TxtF2] ControlSource/コントロールソース: F2
テキストボックス[TxtF3] ControlSource/コントロールソース: F3

---------------------------------------------------------------------------
フォーム[FrmMain]
---------------------------------------------------------------------------
フォームヘッダ
---------------------------------------------------------------------------
コンボボックス[CmbF1] Tag/タグ: F1
コンボボックス[CmbF2] Tag/タグ: F2
コンボボックス[CmbF3] Tag/タグ: F3

---------------------------------------------------------------------------
詳細
---------------------------------------------------------------------------
サブフォームコントロール[SfmFrmSub] SourceObject/ソースオブジェクト: FrmSub
---------------------------------------------------------------------------

フォーム[FrmAutoFilterOption] - [オートフィルタ オプション]ダイアログ
---------------------------------------------------------------------------
オプショングループ[FraFilterOption]

コンボボックス[CmbValues1]
コンボボックス[CmbValues2]

コンボボックス[CmbCompare1]
コンボボックス[CmbCompare2]


オプションボタン[OptAnd] 付属ラベル Caption/標題:AND
オプションボタン[OptOr] 付属ラベル Caption/標題:OR


コマンドボタン[CmdExecute]
コマンドボタン[CmdCancel]

現在、上記のようなフォーム・テーブルがあります。
・ツリー全体表示

【6669】Re:レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/10/29(土) 22:05 -

引用なし
パスワード
   小僧さん
回答をいただき、ありがとうございます。
以下のヒントで修正をしました。
>雛形を使うヒント
>Dim HinaName As String               '追加
>
>  HinaName = "C:\Hina.xls"            '追加
>
>  'Set xlsWkb = xlsApp.Workbooks.Add       '削除
>  Set xlsWkb = xlsApp.Workbooks.Open(HinaName)  '追加
事前にHina.xlsを作って、
そこにNo.1、22、43の行間を設定し、そのまま保存しました。
modulを実行して、更新されたHina.xlsの行間
No.1→設定した行間はそのまま
No.22、43→設定した行間は元の状態に戻ってしまいました。
Hinaの設定情報はなくさない方法はあるのでしょうか?
・ツリー全体表示

【6668】レコード件数の取得について
質問  NK  - 05/10/29(土) 19:36 -

引用なし
パスワード
   いつも参考にさせて頂いております。
題名の件について、どなたかご教授願います。

レコード件数を取得する際、これまでは
 件数格納用変数 = Me.RecordsetClone.RecordCount
とやっていました。

今回は『サブフォームにフィルタをかけた後、その件数を取得する』
という事をやりたいのですが、上記コードではうまく動きません。
エラーにはならないのですが、フィルタ結果180件に対し、1が取得されます。
コードはこんな感じです。

 Me.Form.Filter = "区分 = 'A'"
 Me.Form.FilterOn = True  ←※ここまでは問題なく動いてます
 Me.テキスト1 = Me.RecordsetClone.RecordCount
・ツリー全体表示

【6667】Re:トグルボタンのイベントについて
回答  YU-TANG WEB  - 05/10/29(土) 18:34 -

引用なし
パスワード
   こんばんは、YU-TANG です。

> > イベント プロパティにユーザー定義関数名(Function)を指定できるので
>
> > プロパティシートの任意のイベントに
>
> の部分がよく理解できないのでさらに詳しく教えていただけないでしょうか。

1. フォームのデザインビューで、対象コントロール群を選択する。
2. プロパティシートが表示されていなければ、表示させる。
3. 任意のイベント(たとえば「クリック時」)に Function プロシージャ
  を指定する。

例)
クリック時..........=MyFunc()

あと、よろずやさんからの指摘事項も考慮したほうがよいでしょうね。
Access でコマンドボタンを並べてマインスイーパを作っているとかなら
正規化しようがありませんが、そういう状況はレアだと思うので。
・ツリー全体表示

【6666】Re:トグルボタンのイベントについて
発言  よろずや  - 05/10/29(土) 11:53 -

引用なし
パスワード
   >このトグルボタンが1ヶ月31日に計186個あります。ひとつひとつイベントプロシージャで記述すればよいのですが、まとめてひとつのプロシージャで記述する方法はありますか?

そんなに沢山のコントロールを並べたら不具合が起きそう。

それ以前に、データベースの正規化のお勉強が必要ですね。
・ツリー全体表示

【6665】Re:トグルボタンのイベントについて
質問  ウラヌス  - 05/10/29(土) 7:49 -

引用なし
パスワード
   おはようございます。
早速のアドバイスありがとうございます。
誠にお手数で申し訳ありませんが、

> イベント プロパティにユーザー定義関数名(Function)を指定できるので

> プロパティシートの任意のイベントに

の部分がよく理解できないのでさらに詳しく教えていただけないでしょうか。
よろしくお願いします。
・ツリー全体表示

【6664】Re:トグルボタンのイベントについて
回答  YU-TANG E-MAILWEB  - 05/10/29(土) 4:20 -

引用なし
パスワード
   こんばんは、YU-TANG です。

> まとめてひとつのプロシージャで記述する方法はありますか?

2 種類ほど考えられますが、簡単な方法としては、イベント プロパティに
ユーザー定義関数名(Function)を指定できるので、それを使ってみては。

トグルボタンを全部選んで、プロパティシートの任意のイベントに

=Foo()

と書き込むだけだから、設定自体は 30 秒もあれば終わるでしょう。
・ツリー全体表示

【6663】Re:画面のクリアの方法ですが
お礼  中直 E-MAIL  - 05/10/28(金) 21:05 -

引用なし
パスワード
   ▼小僧 さん:
こんばんは。
もの凄くヒントになりました。
ありがとうございます。
連結のボックスをクリアするなんて論外でした。

これからもよろしくお願いします。


>▼中直 さん:
>こんにちは。
>
>>連結のテキストボックスはクリアできないのでしょうか。
>
>連結フォームのテキストボックスの値を空白にすると、
>テーブルのデータも空白になってしまいますよ ^^;
>
>単票フォームの場合でしたら新規レコードへ移動する方法も
>ありかと思われます。
>
>DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
・ツリー全体表示

【6662】Re:ツールバーの表示について
お礼  ジュン  - 05/10/28(金) 17:53 -

引用なし
パスワード
   ▼たん さん:
>>印刷プレビューを表示している時に 画面の上にツールバーが表示されていますが、その内の「印刷」と「閉じる」のボタンだけをVBAで表示することはできるのでしょうか。
>>もし、できるのであればその方法を教えて頂きたいのです。よろしくお願いします。
>
>というか、デフォルトで存在している状態を加工するのは、デフォルトの状態に戻せなく
>なると大変なので、こういう考えは止めるべきでしょう。
>
>レポートの「ツールバー」プロパティで、F1キーを押し、ヘルプを参照しましょう。
>カスタムツールバーの作成方法が出る筈です。
 早速のご回答ありがとうございます。チャレンジしてみます。
・ツリー全体表示

【6661】Re:画面のクリアの方法ですが
発言  小僧  - 05/10/28(金) 16:20 -

引用なし
パスワード
   ▼中直 さん:
こんにちは。

>連結のテキストボックスはクリアできないのでしょうか。

連結フォームのテキストボックスの値を空白にすると、
テーブルのデータも空白になってしまいますよ ^^;

単票フォームの場合でしたら新規レコードへ移動する方法も
ありかと思われます。

DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
・ツリー全体表示

【6660】Re:ツールバーの表示について
回答  たん  - 05/10/28(金) 16:08 -

引用なし
パスワード
   >印刷プレビューを表示している時に 画面の上にツールバーが表示されていますが、その内の「印刷」と「閉じる」のボタンだけをVBAで表示することはできるのでしょうか。
>もし、できるのであればその方法を教えて頂きたいのです。よろしくお願いします。

というか、デフォルトで存在している状態を加工するのは、デフォルトの状態に戻せなく
なると大変なので、こういう考えは止めるべきでしょう。

レポートの「ツールバー」プロパティで、F1キーを押し、ヘルプを参照しましょう。
カスタムツールバーの作成方法が出る筈です。
・ツリー全体表示

【6659】Re:画面のクリアの方法ですが
お礼  中直 E-MAIL  - 05/10/28(金) 16:04 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。
ありがとうございました。
テキストボックスの内容をクリアする事が出来ました。

連結のテキストボックスはクリアできないのでしょうか。

幼稚な質問ばかりで申し訳ありません。
よろしくお願いします。
・ツリー全体表示

【6658】Re:クエリで質問があります
発言  YU-TANG WEB  - 05/10/28(金) 15:33 -

引用なし
パスワード
   こんにちは、YU-TANG です。

>早速試みてみたのですが、以下の様に式を入れてデータシートビューで
>確認したところリストが一つも挙がってきませんでした。
>何か問題があるのでしょうか。

現状の SQL 文と、関連フィールドのデータ型を提示していただけますか。
もし↑の意味が分からなければ、そう言ってください。
別の説明を試みますので。

>ちなみに、商品の寿命はテーブルでフィールドを設けていません。
>クエリで新たに追加しても宜しいのでしょうか。

はい。
それでよいです。
・ツリー全体表示

【6657】Re:画面のクリアの方法ですが
発言  小僧  - 05/10/28(金) 14:42 -

引用なし
パスワード
   ▼中直 さん:
こんにちは。

>関数のMe.Clear或いはMe.Refreshを使って

ヘルプをご覧になられましたでしょうか。
Clear も Refresh も決して関数ではないと思うのですが…。


>伝票入力画面をクリアしたいのですが

どのような動作を「クリア」というのかが曖昧だと思われます。

フォーム上に見えていたテキストボックスやコマンドボタンそのものを
削除しても「クリア」と言えそうですし、
テキストボックスの値を空白にしたり、
リストボックスで選択された値を何も選択されていない状態にする事も
「クリア」と言えそうですよね。


非連結フォームに配置されたコントロールの値を空白にする例です。

Private Sub クリアボタン_Click()
Dim MyCon As Control

On Error Resume Next
  For Each MyCon In Me.Controls
    MyCon.Value = ""
  Next
End Sub

全然的外れでしたらすみません。
・ツリー全体表示

327 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084690
(SS)C-BOARD v3.8 is Free