Access VBA質問箱 IV

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

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


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

【7061】Re:フォームからコンボボックスを使用した...
質問  わん  - 06/1/11(水) 12:00 -

引用なし
パスワード
   引き続き質問です。

>Left関数 を使用するよりも、Year関数の方が無難かもしれません。
↑とありますが私もYear関数、Month関数、Day関数に馴れようと思っていたのですが、

例えば【6877】での私の質問のお答えの時のように、

SELECT Year([日付]) AS 年,
テーブルI.名前,
テーブルI.結果1,
テーブルI.結果2,
DLookUp("結果1","テーブルI","Year([日付]) = " &
Year([日付])-1 & "AND 名前 = '" & [名前] & "'") AS 前年結果1,
DLookUp("結果2","テーブルI","Year([日付]) = " &
Year([日付])-1 & "AND 名前 = '" & [名前] & "'") AS 前年結果2
FROM テーブルI;

こういう場合は年だけでの対応になりますよね?
この時に年月まで対応したい場合は、
どのようにしたら良いのでしょうか?

宜しくお願いします。
・ツリー全体表示

【7060】Re:クエリの抽出条件(Where句)について
質問   E-MAIL  - 06/1/11(水) 12:00 -

引用なし
パスワード
   回答ありがとうございます。

>このクエリをどのように使うのかが解りませんが、

説明不足で申し訳ありませんでした。

クエリの使用方法については、最終的にエクセルへ出力したいと思っています。
(エクセルへのエクスポート時にもエラーがでて困っています・・。本日質問
をしています。質問【エクセルへのエクスポート】)

>パラメータクエリにするのはいかがでしょか
パラメータクエリですと、入力の手間が多いため他の方法としたいと考えています。
既存のクエリに対し、Where句だけをVBで設定する方法は無いのでしょうか?
・ツリー全体表示

【7059】Re:ヘルプで「クォーテーション」
回答  たん  - 06/1/11(水) 11:56 -

引用なし
パスワード
   >ヘルプで「クォーテーション」で検索しても

Accessのヘルプで、「質問」から「クォーテーション」して下さい。

一番先頭に「文字列内でのクォーテーション」があります。
(少なくとも、私のAC2000にはあります。)

こっちで探すというのもあるけど。
http://www.microsoft.com/japan/msdn/library/default.asp
・ツリー全体表示

【7058】Re:フォームからテーブル操作について
発言  小僧  - 06/1/11(水) 11:55 -

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

>リストボックスを>ダブルクリックした時にファイルが開いてしまいます。
>リストボックスに表示されているレコードをダブルクリック
>した時に目的のファイルを開くようにしたいのですが

ちょっと当方には意味が解りかねるのですが、
レコードが選択されていない場合は実行したくない、という事でしょうか?

もしそのようでしたら、リストボックスの ItemsSelected.Count の数を調べて
条件分岐させてみてはいかがでしょうか。
・ツリー全体表示

【7057】Re:フォームからコンボボックスを使用した...
質問  わん  - 06/1/11(水) 11:47 -

引用なし
パスワード
   小僧さん、こんにちは。

>コンボボックスのプロパティに「列数」という項目があります。
>値集合ソースを 2 列返すように変更して、列数を 2 にする事で実現できると思われます。

↑ここに関しては質問する前に変更して見たのですが表示されなかったのです。
どんな問題があると推測できますか?

宜しくお願いします。
・ツリー全体表示

【7056】Re:ヘルプで「クォーテーション」
質問  わん  - 06/1/11(水) 11:42 -

引用なし
パスワード
   たんさん、こんにちは。
おひさしぶりです。

今回の質問でたんさんからコメントが来る様な気がしていました(^^)。
宜しくお願いします。

ヘルプで「クォーテーション」で検索しても
“他の単語を検索して下さい”と出てきてしまうのですが・・・。

WinXP、Access2000.
・ツリー全体表示

【7055】Re:クエリの抽出条件(Where句)について
発言  小僧  - 06/1/11(水) 11:35 -

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

>クエリの名称は:実績データ一覧
>抽出条件となるフィールドは:氏名と作業年月日

このクエリをどのように使うのかが解りませんが、
パラメータクエリにするのはいかがでしょうか。

実績データ一覧 の氏名欄に [氏名を入力]
       作業年月日欄に [日付を入力]

としてクエリを実行すると、入力を求められると思います。


このパラメータはフォームの値を持ってくる事も可能ですので、

[Forms]![フォーム名]![txt氏名]
CDate([Forms]![フォーム名]![txt作業年月日])

のようなパラメータを付ける事も可能です。


VBA から操作する際にも ADO 、DAO 共にパラーメータを付加してから
クエリを開く事もできます。
・ツリー全体表示

【7054】エクセルへのエクスポート
質問   E-MAIL  - 06/1/11(水) 11:04 -

引用なし
パスワード
   下記の様なコードでエクセルへのエクスポートを実施しようとしていますが、
パラメータが少ないというエラーがでて困っています。

エラー番号:3061
エラー内容:パラメータが少ない。1を指定して下さい。

出力するデータは、クエリの結果で抽出条件は、フォーム[F_帳票]のテキストBox
としています。
抽出条件をどの様にコードしたらよいのか分かりません。
ヘルプを見ても検討がつかないので宜しくお願いします。

下記のコードは、他のホームページのサンプルファイルを参考に作成しました。

Private Sub コマンド192_Click()

  Dim Sdate As Date
  Dim Edate As Date
  Dim name As String
  Dim myfile As String
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim objEXE As Object
  
  Set db = CurrentDb
  
'抽出条件チェック(条件が未入力の場合ERR_94へ)
On Error GoTo ERR_94
'抽出条件SET
  Sdate = Me.txt4
  Edate = Me.txt5
  name = Me.cmb1

If Not Me.cmb1 = "全員" Then
'抽出条件確認メッセージ
  If vbOK = MsgBox("抽出条件は" & Chr(13) _
    & "【個人課題実施期間】" & Sdate & "〜" & Edate & Chr(13) _
    & "【抽出対象者】" & name & " 氏でいいですか?", vbInformation + vbOKCancel, "確認") Then

    MsgBox "出力先はC:\負荷進捗管理\エクセル になります。" & Chr(13) _
    & "ファイル名: 実績データ一覧+抽出者氏名 です。", vbinfomation + vbOKOnly, "確認"
    '出力元クエリ名
    Set rs = db.OpenRecordset("test")
    'Excel利用可能
    Set objEXE = Excel.Application
    'エクセルファイルのパス指定
    objEXE.Workbooks.Open ("C:\負荷進捗管理\エクセル\実績データ一覧.xls")
    'Sheet名指定
    objEXE.Worksheets("Sheet1").Select
    '出力先の基点セル
    objEXE.Cells(2, 2).CopyFromRecordset rs
    objEXE.Quit
    
    Set rs = Nothing
    Set db = Nothing
    
  Else
  End If
Else
    Else
  End If
End If
'********************************************
'ERR_94エラー処理
ERR_94:
  If Err.Number = 94 Then
      MsgBox "抽出条件を設定してください。" & Chr(13) _
      & "【個人課題実施期間】【抽出対象者】が抽出条件となります。", vbOKOnly
  End If
End Sub
・ツリー全体表示

【7053】Re:フォームからコンボボックスを使用した...
回答  小僧  - 06/1/11(水) 11:02 -

引用なし
パスワード
   まず、Left関数等の戻り値についてです。

Sub test1()
Dim a As Long
  a = 12345
  Debug.Print VarType(Left(a, 2))
End Sub

上記コードを実行すると、イミディエトウィンドウに 8 が返ると思います。
(8 は文字列型という意味です。詳しくはVarTypeのヘルプを参照して下さい。)

12345 という数値の上 2桁を切り取ると、数値型→文字列型に変換されます。

Left(日付型,4) の返り値は2005 という値であっても
数値型でなく、文字列型として扱われています。

-----------------------------------------------------------------------

もう1点、VBA上で暗黙の型変換が行われてしまう事です。

Sub test2()
Dim a As String
Dim b As String
Dim c As Long
Dim d As Long

  a = "2"
  b = "5"
  c = 2
  d = 5
  
  Debug.Print "A:" & a + b
  Debug.Print "B:" & a * b
  Debug.Print "C:" & c + d
  Debug.Print "D:" & c * d
End Sub

A の結果は文字列型の「2」「5」を足しているので「25」
(通常は文字列型の連結には「&」を使いますが…)

C、Dの結果は普通の数値型の計算なので「7」「10」

B の結果は文字列型同士は掛け算出来ないため、
暗黙の型変換が行われ数値型と同じ結果を返しています。

------------------------------------------------------------------------
以上の2点から、

Left(日付型,4) = '2005'
Left(日付型,4) = 2005

どちらの場合でも VBA 上は同じ様に解釈してくれる、という事になります。

ですが「VBAが勝手に判断してくれるから大丈夫」と過信してコードを作成するのは危険ですので、

Left(日付型,4) = '2005'
CLng(Left(日付型,4)) = 2005

のように出来る限りデータ型については意識された方が無難だと思います。


-------------------------------------------------------------------------

蛇足になりますが、日付型の表記は OS の設定依存です。

わん さん もWindows を使用されていると思われますが、

コントロールパネル → [地域と言語のオプション] → [カスタマイズ] →
[日付] タブに [短い日付の形式] という欄があると思います。

上の方にあるカレンダーの種類を西暦(英語)にすると、
この [短い日付の形式] に mm/dd/yyyy などが選べる様になります。

(日本では馴染みがありませんが、英語圏ですとこの表記が標準の模様です。)

こちらの設定によっては、Left(日付型,4) が 2005 を返さずに
01/1 を返してしまう恐れも出てきてしまいます。
Left関数 を使用するよりも、Year関数の方が無難かもしれません。

(Year関数は西暦でなくグレゴリオ暦を使うと狂ってしまいますが(笑))
・ツリー全体表示

【7052】Re:ヘルプで「クォーテーション」
回答  たん  - 06/1/11(水) 10:38 -

引用なし
パスワード
   >もう1つはあまりに基本的なこと過ぎて質問するのもお恥ずかしいのですが、
>『&』、『""』、『''』についてです。

こちらも、ヘルプで「クォーテーション」で確認しましょう。
・ツリー全体表示

【7051】Re:フォームからコンボボックスを使用した...
回答  小僧  - 06/1/11(水) 10:11 -

引用なし
パスワード
   ▼わん さん:

>小僧さん、こんばんは。

おはようございます。遅い時間までご苦労様です。


>集合値ソース;SELECT (t_A.名前ID) FROM t_A GROUP BY (t_A.名前ID);

>コンボックス内の表示が数字だけではなく
>文字(名前)も表示されるようにはできないのでしょうか?

コンボボックスのプロパティに「列数」という項目があります。
値集合ソースを 2 列返すように変更して、列数を 2 にする事で実現できると思われます。
また「列幅」も変更すると見栄えも良くなりますね。
詳しくは「列数」「列幅」の所で F1 キーでヘルプを起動して確認されてみて下さい。


>もう1つはあまりに基本的なこと過ぎて質問するのもお恥ずかしいのですが、
>『&』、『""』、『''』についてです。

まず、たん さんの仰られているヘルプの確認と、
過去ログ[#5151]あたりを確認して基本的な使い方を覚えましょう。


…上記の基本に加えて、更にややこしい問題があります…。
 
・ツリー全体表示

【7050】Re:フォームからテーブル操作について
質問  inu  - 06/1/11(水) 9:48 -

引用なし
パスワード
   小僧さんありがとうございます。おかげさまで
効率の良いコードがかけました。

Shell関数についてですが
Shell("C:\xxx\xxx\xxx.doc", 1)
というので良いのでしょうか?これだとリストボックスを
ダブルクリックした時にファイルが開いてしまいます。
リストボックスに表示されているレコードをダブルクリック
した時に目的のファイルを開くようにしたいのですが
可能でしょうか?よろしくお願いします。
・ツリー全体表示

【7049】Re:ヘルプで「抽出条件の指定」
回答  たん  - 06/1/11(水) 8:18 -

引用なし
パスワード
   ヘルプで「抽出条件の指定」を全部読みましょう。

基本は、抽出条件内で、変数やフォーム上のコントロールを参照する場合は、
文字列式の中で & 結合の形にして、文字列式の外に出す。
・ツリー全体表示

【7048】Re:フォームからコンボボックスを使用した...
発言  わん  - 06/1/11(水) 4:49 -

引用なし
パスワード
   小僧さん、こんばんは。

いつもいつも、お世話になります。
出張に行っていたもので遅くなりました。

なんとかできました。
↓のようになりました。
Me.Filter = "Left(日付, 4) = '" & Me.年 & "' AND mid(日付,6,2) = '" & Me.月 & "'
       AND right(日付,2) = '" & Me.日 & "' AND 名前ID = " & Me.名前 & ""

コントロールソースについても理解できました。
有難うございます。

そこで今回のことに関連して2つ教えて頂きたい事があります。
1つは今回のようにコンボボックスにIDで選択する時に、
コンボックス内の表示が数字だけではなく
文字(名前)も表示されるようにはできないのでしょうか?

もう1つはあまりに基本的なこと過ぎて質問するのもお恥ずかしいのですが、
『&』、『""』、『''』についてです。
今まで自分なりに色々調べながらやってきたのですが、
意味がよく理解できないのです。
これを機会に理解したいと思うので教えて頂きたいと思います。

今回を含め今まで教えて頂いたことをまとめると以下のように使っていました。

1.Me.Filter ="オートナンバーor数値型= " & Me.○
 
2.Me.Filter ="テキスト型1 = '" & Me.○ & "' "
 
3.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "'"
  
4.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = '" & Me.月 & "'
       AND right(日付型,2) = '" & Me.日 & "' "

5.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = '" & Me.月 & "'
       AND right(日付型,2) = '" & Me.日 & "' AND オートナンバーor数値型= " & Me.○ & ""
 
6.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = " & Me.月 & "
       AND テキスト型1= '" & Me.○ & "' "
 
7.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = '" & Me.月 & "'
       AND テキスト型1= '" & Me.○ & "' "
 
8.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = " & Me.月 & "
       AND テキスト型1= '" & Me.○ & "' AND テキスト型2= '" & Me.△ & "' "
 
9.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = '" & Me.月 & "'  
       AND テキスト型1= '" & Me.○ & "' AND テキスト型2= '" & Me.△ & "' "

私なりに分類すると1.のケース、2〜4のケース、5のケース、6・8のケースです。
今回把握したことを考えると6・8のケースは正しくは6→7、8→9となると思うのですが、
今までは6・8のケースでも正常に動作していました。
これも理解できないことの1つなのですが、
 Q1:『&』が前後につく時とつかない時は何が違うのでしょうか?
 Q2:又、『''』はどういう時に必要なのでしょうか?

いくら調べてもこのことが理解できません。
間抜けな質問かもしれませんが
どうか宜しくお願い致します。
・ツリー全体表示

【7047】クエリの抽出条件(Where句)について
質問   E-MAIL  - 06/1/10(火) 20:59 -

引用なし
パスワード
   既存のクエリに対し、Where句のみを設定する方法ってありますか?
かなり多くのテーブルをリレーションで結合しているので、VB上に
SQL文を書くと複雑でわかり難いため、(初心者なので)抽出条件のみ
VBで出来ないかと悩んでいます。

クエリの名称は:実績データ一覧
抽出条件となるフィールドは:氏名と作業年月日
・ツリー全体表示

【7046】Re:フォームからテーブル操作について
お礼  inu  - 06/1/10(火) 15:51 -

引用なし
パスワード
   ▼小僧 さん:
>▼inu さん:
>
>>なにか効率の良い書き方があればアドバイスして頂けると幸いです
>
>前提条件として、文書管理台帳のフィールド名が
>フォームと同じ順序で並んでいる必要があります。
>
>Option Compare Database
>Option Explicit
>
>Dim CName(1 To 10) As String
>Private Sub Form_Load()
>  CName(1) = "Mgt"
>  CName(2) = "Namea"
>  CName(3) = "RevNum"
>  CName(4) = "Make"
>  CName(5) = "Ena"
>  CName(6) = "Last"
>  CName(7) = "LastDate"
>  CName(8) = "Term"
>  CName(9) = "Abo"
>  CName(10) = "AboDate"
>  Me.フレーム38.value = 1
>End Sub
>
>'-------------------------------------------------------------------
>Private Sub B_DocSearch_Click() '検索ボタン
>Dim strSQL As String
>Dim RS As New ADODB.Recordset
>Dim X As String       'OR のオプション値が1の場合です
>Dim i As Long
>  
>  If Me.フレーム38.value = 1 Then
>    X = "OR"
>  Else
>    X = "AND"
>  End If
>   
>  RS.Open "SELECT * FROM 文書管理台帳", CurrentProject.Connection
>  For i = 1 To 10
>    If Not IsNull(Me.Controls(CName(i))) Then
>      strSQL = strSQL & " " & X & " " & _
>      RS(i - 1).Name & "='" & Me.Controls(CName(i)).value & "'"
>    End If
>  Next
>  RS.Close: Set RS = Nothing
>  If strSQL = "" Then
>    Me.リスト0.RowSource = "文書管理台帳"
>  Else
>    strSQL = Mid(strSQL, InStr(2, strSQL, " ") + 1)
>    Me.リスト0.RowSource = "SELECT * FROM 文書管理台帳 WHERE " & strSQL
>  End If
>  Me.リスト0.Requery
>End Sub
>
>'-------------------------------------------------------------------
>Private Sub B_FormExit_Click() '終了ボタン
>  DoCmd.Close
>End Sub
>
>'-------------------------------------------------------------------
>Private Sub コマンド32_Click() 'クリアボタン
>Dim i As Long
>  For i = 1 To 10
>    Me.Controls(CName(i)).Value = ""
>  Next
>
>  Me.リスト0.RowSource = "SELECT * FROM 文書管理台帳"
>  Me.Requery
>End Sub
>
>'-------------------------------------------------------------------
>Private Sub 印刷プレビュー_Click() '印刷プレビューボタン
>Dim strSource As String
>Dim strWhere As String
>  
>  strSource = Me.リスト0.RowSource
>  If InStr(1, strSource, "WHERE") = 0 Then
>    strWhere = ""
>  Else
>    strWhere = Mid(strSource, InStr(1, strSource, "WHERE") + 6)
>  End If
>  Debug.Print strWhere
>  DoCmd.OpenReport "R_null", acViewPreview, WhereCondition:=strWhere
>End Sub
>
>
>・コントロールの配列化
>   コントロールに規則的な名前を持たせるとループ処理が可能です。
>   今回は規則性がなかったので、FormLoad時に変数に入れてみました。
>
>・クエリを作らない
>   リストボックスの値集合ソースにはテーブル名やクエリ名だけでなく
>   SQL文を直接指定できます。
>
>・レポートは1種類で
>    OpenReportメソッド の WhereCondition を利用してフィルタを掛け、
>    リストボックスに表示されている情報に合わせてレポートを表示させてみました。

小僧さんアドバイスありがとうございます。
小僧さんの下さったヒントを元に試してみますね。
・ツリー全体表示

【7045】Re:フォームからコンボボックスを使用した...
発言  小僧  - 06/1/10(火) 11:15 -

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

>コードは↓のようになっています。
>Private Sub cmd検索_Click()
>  Me.Filter = "Left(年月日, 4) = '" & Me.年 & "' AND mid(年月日,6,2) = '" & Me.月 & "'
>          AND right(年月日,2) = " & Me.日 & "AND 名前 = '" & Me.名前 & "'"
'→追加
   Debug.Print Me.Filter
>  Me.FilterOn = True
>End Sub

まずイミディエトウィンドウで、フィルタの設定条件を確認してみましょう。

怪しいと思われるのが「名前」と「名前ID」どちらにフィルタを掛けているかです。

コントロール名:名前
コントロールソース:名前ID

のような作りでしたら、名前IDにフィルタを掛けてみてください。
またその際、フィールドのデータ型にも気を付けてください。
・ツリー全体表示

【7044】Re:フォームからテーブル操作について
回答  小僧  - 06/1/10(火) 11:09 -

引用なし
パスワード
   ▼inu さん:

>なにか効率の良い書き方があればアドバイスして頂けると幸いです

前提条件として、文書管理台帳のフィールド名が
フォームと同じ順序で並んでいる必要があります。

Option Compare Database
Option Explicit

Dim CName(1 To 10) As String
Private Sub Form_Load()
  CName(1) = "Mgt"
  CName(2) = "Namea"
  CName(3) = "RevNum"
  CName(4) = "Make"
  CName(5) = "Ena"
  CName(6) = "Last"
  CName(7) = "LastDate"
  CName(8) = "Term"
  CName(9) = "Abo"
  CName(10) = "AboDate"
  Me.フレーム38.value = 1
End Sub

'-------------------------------------------------------------------
Private Sub B_DocSearch_Click() '検索ボタン
Dim strSQL As String
Dim RS As New ADODB.Recordset
Dim X As String       'OR のオプション値が1の場合です
Dim i As Long
  
  If Me.フレーム38.value = 1 Then
    X = "OR"
  Else
    X = "AND"
  End If
   
  RS.Open "SELECT * FROM 文書管理台帳", CurrentProject.Connection
  For i = 1 To 10
    If Not IsNull(Me.Controls(CName(i))) Then
      strSQL = strSQL & " " & X & " " & _
      RS(i - 1).Name & "='" & Me.Controls(CName(i)).value & "'"
    End If
  Next
  RS.Close: Set RS = Nothing
  If strSQL = "" Then
    Me.リスト0.RowSource = "文書管理台帳"
  Else
    strSQL = Mid(strSQL, InStr(2, strSQL, " ") + 1)
    Me.リスト0.RowSource = "SELECT * FROM 文書管理台帳 WHERE " & strSQL
  End If
  Me.リスト0.Requery
End Sub

'-------------------------------------------------------------------
Private Sub B_FormExit_Click() '終了ボタン
  DoCmd.Close
End Sub

'-------------------------------------------------------------------
Private Sub コマンド32_Click() 'クリアボタン
Dim i As Long
  For i = 1 To 10
    Me.Controls(CName(i)).Value = ""
  Next

  Me.リスト0.RowSource = "SELECT * FROM 文書管理台帳"
  Me.Requery
End Sub

'-------------------------------------------------------------------
Private Sub 印刷プレビュー_Click() '印刷プレビューボタン
Dim strSource As String
Dim strWhere As String
  
  strSource = Me.リスト0.RowSource
  If InStr(1, strSource, "WHERE") = 0 Then
    strWhere = ""
  Else
    strWhere = Mid(strSource, InStr(1, strSource, "WHERE") + 6)
  End If
  Debug.Print strWhere
  DoCmd.OpenReport "R_null", acViewPreview, WhereCondition:=strWhere
End Sub


・コントロールの配列化
   コントロールに規則的な名前を持たせるとループ処理が可能です。
   今回は規則性がなかったので、FormLoad時に変数に入れてみました。

・クエリを作らない
   リストボックスの値集合ソースにはテーブル名やクエリ名だけでなく
   SQL文を直接指定できます。

・レポートは1種類で
    OpenReportメソッド の WhereCondition を利用してフィルタを掛け、
    リストボックスに表示されている情報に合わせてレポートを表示させてみました。
・ツリー全体表示

【7043】Re:フォームからテーブル操作について
発言  小僧  - 06/1/10(火) 10:57 -

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

まず本題の方からです。

>右クリックすれば「追加」、「変更」といメニューが表示

CommandBar オブジェクトを操作する事になると思います。
当方も扱った事がないので詳しくは回答できませんが、
Office x.x Object Library を参照設定してヘルプ等を参考にされてみて下さい。

>さらにレコードをダブルクリックすると参照先の
>ファイルを開きに行くようなVBAも書きたい

こちらは Shell関数 を用いて実現可能だと思います。
・ツリー全体表示

【7042】Re:フォームからコンボボックスを使用した...
質問  わん  - 06/1/10(火) 1:09 -

引用なし
パスワード
   小僧さん、よろずやさん 
こんばんは。

>>おかしいかどうかは、見てみなきゃ分かりません。
 ということはできるということですね。(^^)

小僧さん、またまたありがとうございます。
>他に何か行っていなければ
>でできると思うのですが…。(Ac2000 にて確認)

では、コードとフォームの設定を写します。

フォームは↓のようになっています。
  ・レコードソース :Aテーブル
  ・コンボボックス:名前(非連結)
    集合値ソース;SELECT (t_A.名前ID) FROM t_A GROUP BY (t_A.名前ID);
  ・コンボボックス:年(非連結)
    集合値ソース;SELECT Left(t_A.年月日,4) FROM t_A GROUP BY Left(t_A.年月日,4);
  ・コンボボックス:月(非連結)
    集合値ソース;SELECT Mid(t_A.年月日,6,2) FROM t_A GROUP BY Mid(t_A.年月日,6,2);
  ・コンボボックス:日(非連結)
    集合値ソース;SELECT right(t_A.年月日,2) FROM t_A GROUP BY right(t_A.年月日,2);
  ・コマンドボタン:検索

コードは↓のようになっています。
Private Sub cmd検索_Click()
  Me.Filter = "Left(年月日, 4) = '" & Me.年 & "' AND mid(年月日,6,2) = '" & Me.月 & "'
          AND right(年月日,2) = " & Me.日 & "AND 名前 = '" & Me.名前 & "'"
  Me.FilterOn = True
End Sub

ご指摘の程、宜しくお願い致します。
・ツリー全体表示

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