Access VBA質問箱 IV

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

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


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

【12235】Re:レコードの検索
質問    - 13/1/8(火) 12:36 -

引用なし
パスワード
   ▼かるびの さん:

ご回答ありがとうございます。
なかなか理解するのに時間がかかり、返信が遅くなって申し訳ありません。
ですが、まだ理解できてないようです

Private Sub コマンド1_Click()
Dim myRec As DAO.Recordset

Set myRec = Forms!フォームA.RecordsetClone
myRec.FindFirst "日付 =#" & 指定年度.Value & "# " And "コード =" & 指定コード.Value & ""


If myRec.NoMatch Then
MsgBox ("ない")
Else
Forms!フォームA.Bookmark = myRec.Bookmark
End If
End Sub

と書いたのですが、myRec.FindFirst〜のところで
実行時エラー424オブジェクトが必要です
と出ました。

まだまだ理解できてないようです
ご指摘お願いします
・ツリー全体表示

【12234】レポート
質問  Sam  - 13/1/8(火) 10:26 -

引用なし
パスワード
   はじめまして。
Accsess2000のレポートで出席リストを作っていますが、重複する人の表示方法について行き詰っています。
良い案があればご教授お願いします。

テーブルは複数あります。
・セミナーA出席者
・セミナーB出席者
・セミナーC出席者
・セミナーD出席者

セミナーAの出席者リストを作り、同時にセミナーB、C、Dに出席した人も
分かるように印したいです。

イメージとしては、

セミナーA出席リスト

    B C D
1氏名 □ □ □
2氏名 □ □ □
3氏名 □ □ □

B、C、Dに出席した人はチェックボックスにチェックを入れる、
もしくは 氏名の横に○を表示する等

このようなリストを作ることは可能でしょうか?
・ツリー全体表示

【12233】Re:レコードの検索
回答  かるびの  - 12/12/29(土) 1:44 -

引用なし
パスワード
    第1に、FindFirstメソッドの引数の書き方がまずいですね。

>.FindFirst [指定年度] & [指定コード] = Me!日付コード

 まず、Me!に続くのは、フォーム上のコントロールの名前でなければなりません。
 日付コードはクエリのフィールド名であって、コントロール名ではありません。


 次に、.FindFirstメソッドの引数は、文字列でなければなりません。
 上記コードでは、引数に条件式が指定されています。
条件式は、それが評価されると、True又はFalseが返るわけですが、
True又はFalseという値は文字列ではありません。


 さらに、.FindFirstメソッドの引数は、条件式を文字列として指定します。
 文字列とするのだから、ダブルコーテーションで括られている必要があります。
   rs.FindFirst "地区ID = 123"
 
 条件式は、通常、「フィールド名=値」という形をとります。 
 ただ、値のところの書き方は少しやっかいです。
 フィールドが数値型ならば、
例えば「会員ID = 4567」のように何も括りませんが、
テキスト型ならば、例えば「都道府県 = "長野県"」のように
ダブルコーテーションで括り、
日付型ならば、例えば「受注日 = #2012/12/29#」のようにシャープで括ります。

 文字列としてダブルコーテーションで括られたものの中で、
さらにダブルコーテーションで括る必要がある場合、
内側のダブルコーテーションは、ダブルコーテーションの二重使いとします。
   "市町村 = ""栄村"" "

 条件式の値として、コントロールの値を使う場合、
コントロール名を文字列に含ませてはいけません。
コントロール名はダブルコーテーションの外に出す必要があります。
例えば、「誕生日」が日付型のフィールド名、
「txt生年月日」がテキストボックス名だとすると、
    "誕生日=#" & txt生年月日.Value & "# "
とします。
 なお、コントロールのValueプロパティは、
これを省略する書き方する人が大部分ですが、
私は、特に初級者は、省略してはいけないと思います。
省略しないことにより、オブジェクトとプロパティの関係を
より意識することになりますし、
数か月後にコードを見直したとき、「.Value」が付いていれば、
それが変数ではなく、オブジェクトだということが一目でわかります。


 フィールドのデータ型により条件式「フィールド名=値」における値の書き方が
異なるわけですが、問題は、「日付コード」フィールドが何型のフィールドなのかということです。
これは自分で考えてみてください。
ヒントは、&演算子です。


 第2に、FindFirstメソッドを実行しただけでは、
その結果はフォームには表示されません。
 FindFirstメソッドは、見つかったレコードを
レコードセットにおけるカレントレコードにするだけです。
 FindFirstメソッドの結果をフォームに反映させるためには、
フォームのカレントレコードが
レコードセットのカレントレコードとなるようにする、
つまり、フォームとレコードセットを同期させる
という操作が必要になります。
 これについては、BookMarkプロパティを調べてみてください。


 第3に、蛇足ですが、年とコードから検索したいという場合、
普通は、日付コードのようなフィールドを設けることはしません。
普通は、FindFirstメソッドの引数たる条件式に複数の条件式を入れ込みます。
   rs.FindFirst "都道府県 = ""長野県"" AND 受注日 = #2012/12/29# "
・ツリー全体表示

【12232】レコードの検索
質問    - 12/12/28(金) 11:11 -

引用なし
パスワード
   こんにちは
初歩的なことかもしれませんが教えてください

フォームからレコードの検索をしたいのですが、
一レコードごとにコードを持っているのですが、重複しています。
なぜなら会社の決まりで年度初めにもう一度1に戻るからです。

なので検索の方法として年とコードの二つから検索したいです。
フォームにはテキストボックスが二つあり
それぞれ
「指定年度」
「指定コード」というテキストボックスと
コマンド1というボタンがあります

検索をかけたいクエリに新しく
日付コード:year([日付])&[コード]
という新しいフィールドを作り、

Private Sub コマンド1_Click()
If (Not IsNull(Me!指定年度)) And (Not IsNull(Me!指定コード)) Then
With Me.Recordset

.FindFirst [指定年度] & [指定コード] = Me!日付コード


End With
End If

End Sub

というコードを書いたのですがさっぱり動きません
正しいコードを教えていただけませんでしょうか?
・ツリー全体表示

【12231】Re:二つのテーブルからすべてのデータを...
回答  かるびの  - 12/12/28(金) 2:12 -

引用なし
パスワード
    ユニオンクエリは、テーブルを縦にくっつけるだけですから、
出荷品名がりんごであるレコードは、月間出荷抽出テーブルに2レコード、
売上品名がりんごであるレコードは、月間売上テーブルに1レコードあるとすると、
両テーブルのユニオンクエリにおいて出荷品名がりんごであるレコードは、
2+1=3レコードとなります。

>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1001         りんご      2012/10/10  7   618000
>1001  2012/10/04  りんご    2
>1001  2012/10/10  りんご    5
のようになるのは、必然です。


 得たい結果をクエリで得るのは、なかなか困難だと思います。

 得たい結果である
>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1001  2012/10/04  りんご    2   2012/10/10  7   618000
というレコードは、両テーブルを内部結合させたものです。

 他方、
>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1005         ライチ       2012/10/31  1    87100
というレコードは、両テーブルを右外部結合させたものです。

>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1007  2012/10/08  さくらんぼ  2
というレコードは、両テーブルを左外部結合させたものです。

 問題なのは、このレコードです。
>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1001  2012/10/10  りんご    5

 両テーブルを結合させると、内部結合でも、左外部結合でも、右外部結合でも、
製番1001は、
>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1001  2012/10/04  りんご    2   2012/10/10  7   618000
>1001  2012/10/10  りんご    5   2012/10/10  7   618000 
となります。

 したがって、
>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1001  2012/10/10  りんご    5
のレコードは、両テーブルを結合させることなく、
月間出荷抽出テーブルだけから引っ張ってきたレコードです。

 つまり、得たい結果は、テーブルの結合の仕方が混在したものなのです。

 結局、クエリだけでやるなら、
   左外部結合のクエリ、
   右外部結合のクエリ、
   月間出荷抽出テーブルだけから引っ張ってくるクエリ、
   月間売上抽出テーブルだけから引っ張ってくるクエリ、
を作り、それらによるユニオンクエリを作ります。
その際、うまく抽出条件を設定し、重複しないようにする必要があります。
ただ、この抽出条件の設定は、集計クエリやサブクエリを駆使する必要がありそうであり、
かなり面倒くさそうです。


 ちなみ、レポートに表示させるのであれば、
レコードソースを、
両テーブルを左外部結合したクエリと、右外部結合したクエリとによる
ユニオンクエリとした上で、
レポートの「重複データ非表示」プロパティを「はい」に設定すれば、
御希望のことは可能ではないかと思います。
・ツリー全体表示

【12230】二つのテーブルからすべてのデータを表示
質問  M_S  - 12/12/26(水) 15:36 -

引用なし
パスワード
   二つのテーブルがあります。
月間出荷抽出テーブル
製番  出荷日   出荷品名  出荷数
1001  2012/10/04  りんご    2
1002  2012/10/05  みかん    2
1003  2012/10/06  キュウイ   2
1004  2012/10/07  マンゴー   1
1007  2012/10/08  さくらんぼ  2
1008  2012/10/09  いちご    2
1001  2012/10/10  りんご    5
1010  2012/10/11  みかん    1
1003  2012/10/12  キュウイ   1
5002  2012/10/13  さくらんぼ  2

月間売上抽出テーブル
製番  売上日   売上品名  売上数   売上金額
1001  2012/10/10  りんご    7     618000
1002  2012/10/10  みかん    1     279000
1003  2012/10/15  キュウイ   1     618000
1004  2012/10/31  マンゴー   1     279000
1005  2012/10/31  ライチ    1      87100
5006  2012/10/31  バナナ    1     500000

この二つのテーブルからユニオンクエリーを作成し
SELECT 製番,出荷日,出荷品名,出荷数,"" AS 売上数,"" AS 売上金額 FROM 月間出荷抽出
UNION SELECT 製番,"" AS 出荷日,売上品名 AS 出荷品名,"" AS 出荷数,売上日,売上数,売上金額 FROM 月間売上抽出
GROUP BY 製番;

結果
製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
1001         りんご      2012/10/10  7   618000
1001  2012/10/04  りんご    2
1001  2012/10/10  りんご    5
1002         みかん      2012/10/10  1   279000
1002  2012/10/05  みかん    2
1003         キュウイ     2012/10/15  1   618000
1003  2012/10/06  キュウイ   2
1003  2012/10/12  キュウイ   1
1004         マンゴー     2012/10/31  1   279000
1004  2012/10/07  マンゴー   1
1005         ライチ      2012/10/31  1    87100
1007  2012/10/08  さくらんぼ  2
1008  2012/10/09  いちご    2
1010  2012/10/11  みかん    1
5002  2012/10/13  さくらんぼ  2
5006         バナナ      2012/10/31   1   500000

となってしまいます。
製番でまとめたいのです。GROUP BY 製番;の使い方がまちがいですか。ご教授願います。なお製番と品名に関連性はなく、製番は受注順となります。

製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
1001  2012/10/04  りんご    2   2012/10/10  7   618000
1001  2012/10/10  りんご    5
1002  2012/10/05  みかん    2   2012/10/10  1   279000
1003  2012/10/06  キュウイ   2   2012/10/15  1   618000
1004  2012/10/07  マンゴー   1   2012/10/31  1   279000
1005         ライチ       2012/10/31  1    87100
1007  2012/10/08  さくらんぼ  2
1008  2012/10/09  いちご    2
1010  2012/10/11  みかん    1
5002  2012/10/13  さくらんぼ  2
5006         バナナ       2012/10/31   1   500000

みたいにしたいのですが。
・ツリー全体表示

【12229】Re:背景スタイルの切り替え
お礼  ティナ  - 12/12/25(火) 9:27 -

引用なし
パスワード
   ▼かるびの さん:

返信ありがとうございます!!
しかし、やりたいのは…帳票フォームです。
やはり、レコード毎となると条件付き書式しかないのですね。

でも、ラベルも可視プロパティで設定できるんですね!
1つ勉強になりました〜。

ありがとうございました。
・ツリー全体表示

【12228】Re:背景スタイルの切り替え
回答  かるびの  - 12/12/25(火) 2:36 -

引用なし
パスワード
   >テキストボックスAが1の場合、テキストボックスBは、背景スタイル普通。
>テキストボックスAが2の場合、テキストボックスBは、背景スタイル透明。
>というふうに、条件をつけたいのですが、
>可能でしょうか?

 単票フォームであれば可能です。

 テキストボックスAの値に応じて、
テキストボックスBのBackStyleプロパティの値を変えてやります。
 
 これをどのイベントで行うのかは、フォームの仕様次第ですね。


 なお、テキストボックスを隠したいなら、BackStyleプロパティを使うよりも、
テキストボックスのVisibleプロパティをFalseにしてやる方がより直接的です。
 ラベルを隠すなら、ラベルのVisibleプロパティをFalseに設定します。


 帳票フォームの場合、
レコードごとにテキストボックスなどの見た目を変えたいというなら、
条件付き書式しかないですね。
 またラベルに条件付き書式は使えません(2003の場合)。
・ツリー全体表示

【12227】背景スタイルの切り替え
質問  ティナ  - 12/12/24(月) 12:11 -

引用なし
パスワード
   初めてお世話になります。

テキストボックスAが1の場合、テキストボックスBは、背景スタイル普通。
テキストボックスAが2の場合、テキストボックスBは、背景スタイル透明。
というふうに、条件をつけたいのですが、
可能でしょうか?

意図は、背景スタイルを普通にすることによって、
必要のない場合(テキストボックスA=1の場合)は、多数のテキストボックスを隠したいのです。
1つ1つ条件付き書式で設定することも可能ですが、ラベル等もすべて隠したいので。できる方法があれば、お教え願いたいです。

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

【12225】クエリで連番の追加t更新
質問  tomp  - 12/12/7(金) 8:45 -

引用なし
パスワード
   はじめまして、tompと申します。

早速、質問ですが現在、日付、ID(オートナンバー)、備考1のテーブルが有ります。日付で抽出後、仮テーブルに日付と備考1を追加するクエリを作っていますがこの仮テーブルには連番フィールドがあります。
毎回レコード分の連番を入れて尚且つ合計で連番が30になるまで入れたいのです。この際、日付と備考1は空欄で構いません。

判りにくい文章ですみませんがご教授お願いいたします。
・ツリー全体表示

【12224】Re:或るドライブのcsvを削除するには
お礼    - 12/12/4(火) 18:03 -

引用なし
パスワード
   ▼に さん:
自己レスです。
マクロのアクションにプロシージャーを開くを選択、
プロシージャー名にCSV削除()を記述したら出来ました。
失礼しました。  
・ツリー全体表示

【12223】或るドライブのcsvを削除するには
質問    - 12/12/4(火) 16:26 -

引用なし
パスワード
   こんにちは。
普通にAccessのマクロ1でクエリを走らせたあと、或るドライブのcsvを削除したいです。
その場合、Module1に
Sub CSV削除()
Dim CsvName As String
  CsvName = "C:\dl_cal.csv"
  Kill CsvName
End Sub

と書けばいいでしょうか、
もし、いいとして、マクロ1にどう組み込めばいいでしょうか。
ご教示下さい。
・ツリー全体表示

【12221】Re:レポートの自動拡張に合わせて線を引...
お礼  tamateboko  - 12/11/23(金) 10:55 -

引用なし
パスワード
   ▼hatena さん:
動きました!!!
すごーい!感動です。ありがとうございます。
何度も丁寧に説明いただきありがとうございました。
・ツリー全体表示

【12220】Re:レポートの自動拡張に合わせて線を引...
回答  hatena  - 12/11/22(木) 19:40 -

引用なし
パスワード
   >  Me.Line (0, Bottom)-(Me.Width, Bottom) '横罫線
>  LineBottom = 0
>
>にしてみたのですが、同じエラーが出ます。

あっ、それもミスってました。すみません。


Me.Line (0, LineBottom)-(Me.Width, LineBottom) '横罫線

としてください。
・ツリー全体表示

【12219】Re:レポートの自動拡張に合わせて線を引...
質問  tamateboko  - 12/11/22(木) 11:06 -

引用なし
パスワード
   ▼hatena さん:
丁寧なご説明ありがとうございます。

  Me.Line (0, Bottom)-(Me.Width, Bottom) '横罫線
  LineBottom = 0

にしてみたのですが、同じエラーが出ます。

Private Sub Report_Page()に入った時にエラーが出た後、
(0, Bottom)のBottomのところが反転しています。
Bottom コンパイルエラーで調べてみたのですが、わからなくて。

何の設定が足りないのでしょうか。何度もすみません。
・ツリー全体表示

【12218】Re:レポートの自動拡張に合わせて線を引...
回答  hatena  - 12/11/21(水) 18:48 -

引用なし
パスワード
   >3点です。
>
>14400の方法で縦線は引けましたが、一つ一つのテキストボックスの高さを取得、比較して縦線を引く方法もありました。どちらも連続した縦線がひけるのですが、この2つは、どう使い分けるものなのでしょうか。

[AC95]の方はそのページのプレビューの画像を見てもらえばわかりますが、テキストボックスの最大高さに合わせて罫線を引きます。ですので、テキストボックスとセクションの上下に余白があれば罫線は途切れます。上下に余白がなければ、罫線は連続します。
連続していいのなら、[ACC2002]の方がシンプルなのでいいでしょう。これはセクションの最大値の高さで罫線を引くものですが、セクションの高さを超える部分は表示されないので結局セクションの高さいっぱいに引くことになります。
 
>Me.Line (0, Bottom)-(Me.Width, Bottom) '横罫線
>LineTop = 0
>で変数が定義されていないというエラーが出ました。何が足りないのでしょうか。
>またここで何をしているという意味なんでしょう。

LineTop を LineBottom に変更してください。
手元のコードをもとに編集した時に、変更し忘れたのもです。

>Line1を非可視にして、
>  LineBottom = Me.Top - Me.Printer.TopMargin + Me.Line1.Top
>とは、何をしているのでしょうか。

Me.Top でカレントレコードの上位置を取得できます。ただし、印字範囲を基準とした高さなので、それに余白設定の上余白(Me.Printer.TopMarginで取得)を加算します。印刷時拡張のテキストボックスの下に配置した直線はテキストボックスの拡張に押し出されて下に移動します。ですので、その上位置を取得すれば、セクションの高さが取得できますので、それを加算します。
これによってカレントレコードの最下部の位置が計算できます。
それをLineBottom変数に格納しておいて、ページフォーマット時に Lineメソッドでその位置に横罫線を描画します。
・ツリー全体表示

【12217】Re:レポートの自動拡張に合わせて線を引...
質問  tamateboko  - 12/11/21(水) 18:02 -

引用なし
パスワード
   ▼hatena さん:
ありがとうございます。

おしえていただいたサイトは見ていたのですが、わからなかったので投稿しました。またレスの内容も調べてはみたんですが、初心者なので理解するのに時間ばかりかかってしまい、本来の仕事が進まなかったんで・・・もう少し教えてください。

3点です。

14400の方法で縦線は引けましたが、一つ一つのテキストボックスの高さを取得、比較して縦線を引く方法もありました。どちらも連続した縦線がひけるのですが、この2つは、どう使い分けるものなのでしょうか。
 
Me.Line (0, Bottom)-(Me.Width, Bottom) '横罫線
LineTop = 0
で変数が定義されていないというエラーが出ました。何が足りないのでしょうか。
またここで何をしているという意味なんでしょう。

Line1を非可視にして、
  LineBottom = Me.Top - Me.Printer.TopMargin + Me.Line1.Top
とは、何をしているのでしょうか。

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

【12216】Re:レポートの自動拡張に合わせて線を引...
回答  hatena  - 12/11/21(水) 16:15 -

引用なし
パスワード
   縦線は、連続していていいのなら、下記の方法がいいでしょう。

[ACC2002] レポートのセクションのサイズに比例して縦線が伸びない
support.microsoft.com/default.aspx?scid=kb;ja;286247&Product=accJPN

各レコード毎で途切れるのなら、下記を参考に。

[AC95] 印刷時拡張を設定したレポートで横罫線をそろえる方法
support.microsoft.com/default.aspx?scid=kb;ja;404907&wa=wsignin1.0


ページの最後に横罫線を引く場合は、
詳細セクションの最下部に直線コントロールを配置して、名前を Line1、可視をいいえにします。
下記のようなVBAになります。
上記の [ACC2002] レポートのセクションのサイズに比例して縦線が伸びない
のコードも組み込んであります。

レポートモジュール
Option Compare Database
Option Explicit
Dim LineBottom As Integer

'ページフォーマット時
Private Sub Report_Page()
  
  Me.Line (0, Bottom)-(Me.Width, Bottom) '横罫線
  LineTop = 0

End Sub

'詳細の印刷時
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)

  Me.ScaleMode = 1
  Me.ForeColor = 0

  '直線を繰り返し引きます。
  '単位は 567 twip = 1 cm です。
  Me.Line (0 * 567, 0) - (0 * 567, 14400)
  Me.Line (1 * 567, 0) - (1 * 567, 14400)
  Me.Line (1.9 * 567, 0) - (1.9 * 567, 14400)
  
  LineBottom = Me.Top - Me.Printer.TopMargin + Me.Line1.Top'

End Sub
・ツリー全体表示

【12215】レポートの自動拡張に合わせて線を引くに...
質問  tamateboko  - 12/11/21(水) 12:47 -

引用なし
パスワード
   access2010です。
レポートでテキストboxを印刷自動拡張にしているので、縦罫線をそれに合わせて伸ばし、横線は各ページの最初と
最後だけひきたいのですが、方法を教えてください。
これでものサイトに来る前にいろいろ探したのですが、どう応用してよいかわからず、悩んだ末に投稿しました。

□が一文字分としてみてください。|が引きたい縦線です。

1レコード2行です。
Me.txt1|Me.txt2||Me.txt4|Me.txt6|Me.txt8|Me.txt9 
____|Me.txt3||Me.txt5|Me.txt7|____|Me.txt10

          ↓
□|□□□|□□□□□|□□□□|□□□□□□□□□|□□□
_|□□□|□□□□□|□□□□|_________|□□□

□の縦と横幅が1cmとした場合で教えていただけないでしょうか。
Me.txt2は□が3つあるので、横3cm 縦1cmの 一つのテキストボックスという意味です。

ほぼ全てのテキストボックスが自動拡張です。
自動拡張が一ヶ所しかない例は見ましたが、その例はテキストボックスの高さと行間で
1行の高さを出していましたが、私の場合は
最大に伸びたテキストボックスに合わせて、各行の高さが変わるわけで、
1行の高さを取得する方法も検索しても欲しい情報がつかめずです。

横線は最初と最後だけひきたいのですが
横線はヘッダー部は今、罫線で線を引いています。ですが各ページの最期だけ
引くという方法が調べてもどう応用していいかわからなくて・・・・
よろしくお願いします。
・ツリー全体表示

【12214】Re:禁止文字がわからない
回答  comakomako  - 12/11/21(水) 9:28 -

引用なし
パスワード
   すみません。無視してください。何度やってもService Temporarily Unavailableになってしまい、投稿できなかたったので、何が悪いのか確認してたら、アップされてしまっており、削除パスワードも入力したはずのものが受け付けてくれないので、多分何度も繰り返しているうちに打ち間違えをしてしまったかもしれません。
・ツリー全体表示

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