Access VBA質問箱 IV

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

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


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

【13087】Re:グループごとに明細列追加
回答  hatena  - 16/10/17(月) 22:46 -

引用なし
パスワード
   >グループごとにページを表示してレポートを作成しています。
>例えばAグループの詳細が3行あったとして
>その続きから7行ほど追加することは可能でしょうか?
>文章で説明しづらいので例を表記いたします。
>例
>1ページ目
>Aグループ
>=========グループヘッダ=============
>============詳細================
> さかな      3
> やさい      7
> にく       5  ←ここまでがレコードにあるデータ
> 合計      15 ←ここからがVBA??で追加したい行
> さかな+やさい 10
> さかな+にく   8
> やさい+にく  12
>============詳細================
>=========グループフッタ==============
>
>上記の例のように対象のグループのレコードが表示し終わると
>その続きから数値等を表記したいのですが
>何か方法はありますでしょうか?
>例では詳細欄にありますがグループフッタでも大丈夫です。
>よろしくお願いします。


グループフッターを表示させてそこにテキストボックスを配置して、
コントロールソースを下記のように設定します。
レコードソースのフィールド名は「品名」「数量」と仮定して回答します。

合計のコントロールソース
=Sum([数量])

さかな+やさいのコントロールソース
=Sum(IIf([品名] In ("さかな","やさい"),[数量],0)

さかな+にくのコントロールソース
=Sum(IIf([品名] In ("さかな","にく"),[数量],0)

やさい+にくのコントロールソース
=Sum(IIf([品名] In ("やさい","にく"),[数量],0)
・ツリー全体表示

【13086】グループごとに明細列追加
質問  オスマン  - 16/10/17(月) 16:48 -

引用なし
パスワード
   こんにちは。

グループごとにページを表示してレポートを作成しています。
例えばAグループの詳細が3行あったとして
その続きから7行ほど追加することは可能でしょうか?
文章で説明しづらいので例を表記いたします。

1ページ目
Aグループ
=========グループヘッダ=============
============詳細================
 さかな      3
 やさい      7
 にく       5  ←ここまでがレコードにあるデータ
 合計      15 ←ここからがVBA??で追加したい行
 さかな+やさい 10
 さかな+にく   8
 やさい+にく  12
============詳細================
=========グループフッタ==============

上記の例のように対象のグループのレコードが表示し終わると
その続きから数値等を表記したいのですが
何か方法はありますでしょうか?
例では詳細欄にありますがグループフッタでも大丈夫です。
よろしくお願いします。
・ツリー全体表示

【13085】Re:テーブル作成クエリのデータ型変換
発言  hatena  - 16/10/12(水) 3:03 -

引用なし
パスワード
   >ご質問の件ですが、
>説明が難しいのですが、
>クエリAに直接書き込めないのでテーブル作成クエリでテーブルAに変換していたのですが、
>クエリAには空白フィールド(Null AS フリガナ、等) を作っています
>何故空白フィールドを作っているかというと、出来た空白フィールドにいろんなデータを手入力するためです
>何故一番最初にデータ入力する(クエリAの元となる)テーブルに情報を入力しないかというと、すべてのレコードに必要な情報ではないからで、むしろいらない場合の方が多いので、最初の入力フォームにたくさんコントロールを置きたくないためです

テーブルにあるフィールドをすべてフォーム上に配置しなければならないということはないので、必用なフィールドのみ配置すればいいのでは。


テーブルに未入力のフィールドが多く存在するのが嫌だという場合は、
入力必須のフィールドのテーブルと、入力がまれにしか無いフィールドのテーブルの2つに分けて、
一対一関係にするという方法もありますが、
それにしても、最初に一回だけ作成すればいいだけで、
運用中に何度もテーブル作成クエリを実行する必用はないと思いますが。

一対一関係のテーブル設計 - hatena chips
ht tp://hatenachips.blog34.fc2.com/blog-entry-29.html
・ツリー全体表示

【13084】Re:印刷設定について
お礼  まゆ  - 16/10/7(金) 15:55 -

引用なし
パスワード
   ▼hatenaさん
ありがとうございます。
なんとかできそうですのでがんばってみます!
・ツリー全体表示

【13083】Re:印刷設定について
回答  hatena  - 16/10/7(金) 15:01 -

引用なし
パスワード
   >「ボタンのフォームをプレビューの子ウィンドウにする」方法ではモジュール「Z」を使用して解決しているようなのですが、
>「プレビューウィンドウをフォームの子ウィンドウにする」方法で適用する方法がわかりませんでした。。。


F_PreviewParentMenu フォームの閉じるボタンのコードを下記に変更してください。

Private Sub cmdClose_Click()
  On Error Resume Next
  SetParent Reports(docName).Hwnd, Application.hWndAccessApp
  DoCmd.Close acReport, DocName
  DoCmd.Close acForm, Me.Name
End Sub
・ツリー全体表示

【13082】Re:印刷設定について
質問  まゆ  - 16/10/6(木) 17:07 -

引用なし
パスワード
   hatenaさん

印刷プレビューボタンですが、

Private Sub Print_Click()
  Dim stDocName As String
  Dim bango As Long

  bango = [ClirntNo]
  stDocName = "R_Summary"

  DoCmd.OpenForm "F_PreviewParentMenu", OpenArgs:="ClirntNo =" & bango
  
End Sub

でうまくいきましたm(_ _)m

しかし、教えていただいたリンク先(ht tp://hatenachips.blog34.fc2.com/blog-entry-398.html)

では解決している「閉じる」ボタンのエラーを解決する方法はどうすればいいのかわからず・・・・

「ボタンのフォームをプレビューの子ウィンドウにする」方法ではモジュール「Z」を使用して解決しているようなのですが、
「プレビューウィンドウをフォームの子ウィンドウにする」方法で適用する方法がわかりませんでした。。。

重ねてで申し訳ございませんが、教えていただければ非常に助かります。
・ツリー全体表示

【13081】Re:印刷設定について
回答  hatena  - 16/10/6(木) 14:11 -

引用なし
パスワード
   >ht tp://hatenachips.blog34.fc2.com/blog-entry-397.html
>
>そこで、この二つを組み合わせて
>「F_Summary」で「印刷プレビュー」をクリックした際に
>「F_PreviewParentMenu」が開き、なおかつ、「ClirntNo」で識別して開けないかと思っております。

リンク先の2分目のサンプル「プレビューウィンドウをフォームの子ウィンドウにする」の方法を使うのですね。

F_PreviewParentMenu を開くときにOpenArgs引数に抽出条件を設定します。

Docmd.OpenForm "F_PreviewParentMenu", OpenArgs:="ClirntNo =" & bango

フォームの方の読み込み時のレポートを開く時にその抽出条件を設定します。

Private Sub Form_Load()
  DoCmd.OpenReport docName, acViewPreview, , Me.OpenArgs
  'レポートの位置とサイズをフォームに合わせて調整
  DoCmd.MoveSize 0, Me.cmdPrint.Height, Me.InsideWidth,

・・・以下略


※リンク先の3番目の方法「ボタンのフォームをプレビューの子ウィンドウにする」でよければ、下記のリンク先の方法を使えば、DoCmd.OpenReport と同じ感覚で使えるのでおすすめです。

印刷プレビューに[印刷][閉じる]ボタンを付加するOpenReport互換関数
ht tp://hatenachips.blog34.fc2.com/blog-entry-398.html
・ツリー全体表示

【13080】印刷設定について
質問  まゆ  - 16/10/6(木) 10:34 -

引用なし
パスワード
   現在
■フォーム「F_Summary」
■フォーム「F_PreviewParentMenu」
■レポート「R_Summary」
があり、

「F_Summary」にて「印刷プレビュー」というボタンをおき、
そのボタンを実行するとフォームで表示されているレコードのみをレポートへ表示させるようにしています。(ClirntNoという顧客ごとの番号で識別しています)

「印刷プレビュー」ボタンはPrintという名前で、実行時以下のVBAを設定しています。
Private Sub Print_Click()
  Dim stDocName As String
    Dim bango As Long

    bango = [ClirntNo]
    stDocName = "R_Summary"

  DoCmd.OpenReport stDocName, acPreview, , "ClirntNo =" & bango
  
End Sub


また、
「F_PreviewParentMenu」は
こちらのホームページを参考にボタンのフォームをプレビューの子ウィンドウにしています。
ht tp://hatenachips.blog34.fc2.com/blog-entry-397.html

そこで、この二つを組み合わせて
「F_Summary」で「印刷プレビュー」をクリックした際に
「F_PreviewParentMenu」が開き、なおかつ、「ClirntNo」で識別して開けないかと思っております。

宜しくお願い致しますm(_ _)m
・ツリー全体表示

【13079】Re:フォーム 複数データを表示
お礼  まゆ  - 16/10/4(火) 16:31 -

引用なし
パスワード
   亀マスターさん

解決致しました。
サブフォームの元フォームを表形式で作成しないとだめだったんですね。。。

テーブルは数が多いですが
各テーブルごとに管理が必要なためこのままでいこうかと思います。

高さの長さは
フォームは大きめにスペースをとり、
レポートは「印刷時拡張」の値を「はい」にして作成してみます。

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

【13078】Re:フォーム 複数データを表示
回答  亀マスター  - 16/10/4(火) 11:41 -

引用なし
パスワード
   >「1画面に全てのデータを表示したい」というよりも、
>1画面ごとに各顧客の全データを表示していきたいです。

それでしたら、やはり私が前回お示しした方法の一つ目(クエリを使わないパターン)でいいかと思います。
繰り返しになりますが、下記もご参考ください。
記事番号:13013
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=13013;id=access


>テーブルは全てで16あります。

メールデータのテーブルがひとつ、口座番号のテーブルがひとつ、連絡先のテーブルがひとつ・・・みたいな感じで、これが16種類あるということでしょうか。
メインになる顧客データのテーブルを元に単票フォームを作り、そこに各データテーブルを元に作成した帳票フォームをサブフォームとして埋め込めばいいでしょう。16種類もあるので、やや大きくなるでしょうが。
メールデータが顧客あたりに複数あり、その数が不定ということですが、前回にも書いたとおり、サブフォームの高さは自動で変わらないので、ある程度の件数を表示できる高さを確保しておき、表示しきれなければ手動でスクロールしてもらうしかありませんね。どうしてもということであればVBAで必要な高さを計算して設定すればいいのですが、やや面倒です。


あと、16種類のデータは、全てがメールアドレスのように顧客ひとつにつき複数あるのでしょうか。1対1で対応するデータであれば、顧客データのテーブルに統合してしまった方がいいのでは。
・ツリー全体表示

【13077】Re:フォーム 複数データを表示
質問  まゆ  - 16/10/4(火) 10:22 -

引用なし
パスワード
   亀マスターさん

「1画面に全てのデータを表示したい」というよりも、
1画面ごとに各顧客の全データを表示していきたいです。

1レコード目
企業○○様全データ

2レコード目
企業△△様全データ




その各企業のデータの中で
メールアドレスともう一データ
企業によって登録されるデータが多かったり少なかったり
または
増えたり減ったり致します。

テーブルは全てで16あります。
・ツリー全体表示

【13076】Re:フォーム 複数データを表示
回答  亀マスター  - 16/10/3(月) 19:37 -

引用なし
パスワード
   >顧客管理表のテーブルを元にメインフォームを作り、メールデータを元にしたサブフォームを埋め込んでみるということなのですが、
>メールデータを元にしたサブフォームはフォームを作成しそちらを埋め込めばいいのでしょうか。

それでいいと思います。
サブフォームに使う方は帳票形式にし、不要であればレコードセレクタや移動ボタンは非表示にしておいた方がいいでしょう。

ただ、これだとメインの顧客が1件ずつしか表示されませんし、サブフォームの方は件数が増えても自動で高さが変わってくれないようですね(レポートだと変わってくれるのですが)。

そうではなく、1画面に全てのデータを表示したいということであれば、Noで2つのテーブルを結合したクエリを作成し、これを元にフォームを作ることになります。
・ツリー全体表示

【13075】Re:テーブル作成クエリのデータ型変換
お礼  ばかすけ  - 16/10/3(月) 18:28 -

引用なし
パスワード
   hatenaさま
ご回答ありがとうございます
ご教示いただいた通りに直したらできました。
基本的な事を間違えてたようですね
たすかりました

ご質問の件ですが、
説明が難しいのですが、
クエリAに直接書き込めないのでテーブル作成クエリでテーブルAに変換していたのですが、
クエリAには空白フィールド(Null AS フリガナ、等) を作っています
何故空白フィールドを作っているかというと、出来た空白フィールドにいろんなデータを手入力するためです
何故一番最初にデータ入力する(クエリAの元となる)テーブルに情報を入力しないかというと、すべてのレコードに必要な情報ではないからで、むしろいらない場合の方が多いので、最初の入力フォームにたくさんコントロールを置きたくないためです

それで、クエリAからテーブル作成クエリで入力用テーブルを作成すると、空白フィールドがバイナリ型になってしまい、それではまずいので
後から変更できたらなと思いましたのです。
わかりにくかったらすみません
・ツリー全体表示

【13074】Re:フォーム 複数データを表示
質問  まゆ  - 16/10/3(月) 15:56 -

引用なし
パスワード
   亀マスターさん
ご返信ありがとうございます。


顧客管理表のテーブルを元にメインフォームを作り、メールデータを元にしたサブフォームを埋め込んでみるということなのですが、
メールデータを元にしたサブフォームはフォームを作成しそちらを埋め込めばいいのでしょうか。
それとも、クエリからでしょうか。
フォームから埋め込むと1件しか表示されず、
クエリから埋め込むと全件表示されてしまいます。。。

レポートも作成はするのですが、
ユーザにフォーム入力もしてほしいため、フォーム画面も作成したいです。
・ツリー全体表示

【13073】Re:フォーム 複数データを表示
回答  亀マスター  - 16/9/30(金) 18:32 -

引用なし
パスワード
   顧客管理表のテーブルを元にメインフォームを作り、メールデータを元にしたサブフォームを埋め込んではどうでしょうか。
「印刷時拡張」の値を「はい」にしておけば(デフォルトで「はい」になってます)、サブレポートの件数に応じて高さが変わるはずです。
ht tp://tsware.jp/tips/tips_072.htm


サブレポートの埋め込みについては、ここで以前に私が回答したスレッドも参考にしてください。
記事番号:13013
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=13013;id=access
・ツリー全体表示

【13072】Re:テーブル作成クエリのデータ型変換
回答  hatena  - 16/9/30(金) 18:18 -

引用なし
パスワード
   フィールド「あああ」を日付/時刻型にしたいなら、

CurrentDb.Execute "ALTER TABLE テーブルA ALTER COLUMN あああ DATE"

テキスト型でフィールドサイズ20にしたいなら、

CurrentDb.Execute "ALTER TABLE テーブルA ALTER COLUMN あああ TEXT(20)"


ところで、後学のためにお聞きしたいのですが、
フォームを開く度に、フィールド定義を変更するって、どういう用途のフォームなんでしょうか。
ウィザード的なものを自前で作成しているということですかぁ
・ツリー全体表示

【13071】テーブル作成クエリのデータ型変換
質問  ばかすけ  - 16/9/30(金) 12:01 -

引用なし
パスワード
   こんにちは、よろしくお願いします

テーブル作成クエリでテーブルを作成し、一部のフィールドのデータ型を変換したいと思っています

まず、テーブル作成クエリでテーブルAを作成し、
必死でHPなどで調べて下記コードをフォームの開く時イベントに書きました
ですがのっけから"ALTER TABLEステートメントの構文エラーです"とエラーが出てしまいます

Private Sub Form_Load()
CurrentDb.Execute "ALTER TABLE テーブルA ALTER COLUMN あああ DATE(20)"
CurrentDb.Execute "ALTER TABLE テーブルA ALTER COLUMN いいい TEXT(20)"
CurrentDb.Execute "ALTER TABLE テーブルA ALTER COLUMN フリガナ TEXT(30)"
CurrentDb.Execute "ALTER TABLE テーブルA ALTER COLUMN ううう Bit"
CurrentDb.Execute "ALTER TABLE テーブルA ALTER COLUMN えええ Bit"
CurrentDb.Execute "ALTER TABLE テーブルA ALTER COLUMN おおお Bit"
CurrentDb.Execute "ALTER TABLE テーブルA ALTER COLUMN かかか TEXT(10)"

End Sub

どこがおかしいかご教示お願いします
・ツリー全体表示

【13070】フォーム 複数データを表示
質問  まゆ  - 16/9/30(金) 10:20 -

引用なし
パスワード
   はじめまして

現在、顧客の管理をする為に作成しているのですが、
顧客管理表として
<Table1>
No Name
01 あ
02 い
03 う
というメインのテーブルがあり

その他はNoに紐付けるかたちで
No Mail
01 1.com
01 2.com
02 3.com
02 4.com
02 5.com
03 6.com
03 7.com
03 8.com
のようにテーブルを作成しているのですが、
たとえばメールアドレスなどの場合
顧客ごとに管理する個数も変わり、増えたり減ったりする場合もある為

フォームでどのようにデザインすれば
全てのテーブルデータを顧客ごと
レコード別に表示させれるのかがわかりません。

初心者ですが教えていただける方返信いただければありがたいです。
よろしくお願い致します。
・ツリー全体表示

【13069】日付+自動採番
お礼  NUTKEY  - 16/9/19(月) 14:03 -

引用なし
パスワード
   亀マスター さん

提出月が正しかったです。
入力間違いでした・・・

[]もはずしました。

クエリは必要ないのですね・・・
年月表示もFIRSTDAY、LASTDAYも全てクエリでしていました。

もう一度作り直してがんばってみます。

私の質問に回答して頂きありがとうございました。
・ツリー全体表示

【13068】Re:日付+自動採番
回答  亀マスター  - 16/9/17(土) 18:08 -

引用なし
パスワード
   >Me![提案日] = Format(提案日, "yymm") & Format([連番] + 1, "000")
これは打ち込んだものと同一でしょうか。

もしそうなら、Me![提案日] は Me![提出月] が正しいのではないでしょうか。

あと、Format([連番] + 1, "000") とありますが、[連番]は何を指しているのでしょうか。
この書き方だと、フォーム中のテキストボックスか何かに「連番」という名前のものがあり、そのデータを拾うことになりますよ。前に示した
連番 = DCount(...
で取得した連番を意味するのであれば、[ ]はつけてはいけません。
それと、勿論このコード中で、連番を先に取得しておく必要があります。流れとしては、 連番取得 → 提出月のテキストボックスに入力 となりますので。


>クエリで入力するとできてはいるのですが
今回私が提示した方法では、クエリは必要ありませんよ。(使ったらダメなわけではないですが)
提出月のテキストボックスに、手動で連番を数えて入力する代わりにVBAで入力しているという状態なので、クエリによる計算は不要です。

>これは、亀マスター さんが前回の回答にも書かれたように、
>『連番を計算・表示させる前に、更新前の日付を調べ、更新前が空白・同じ月・異なる月などの場合分けで対応する必要があるでしょう。』
>に関係があるのでしょうか?
入力日がバラバラで、一度入力したら変更することがないとのことですので、それなら問題はありません。

頑張ってくださいね。
・ツリー全体表示

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