Access VBA質問箱 IV

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

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


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

【6576】Re:データがなくても罫線を引く・・・を引...
質問  koorin  - 05/10/24(月) 23:54 -

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

なんとか出来ました!
見積書でエラーが出る前、サブフォームを使わず一つのクエリからレポート印刷
したときは、きちんと出来たので見積書でもサブフォームを使わないレポートに
するため、クエリを作り直してやってみたら出来ました。

ただ、また一つ別の問題が出てきましたので教えて下さい。
見積書詳細の最後の行の次の行に「以下余白」と表示させたいのです。

 ____________________________________________________
 | 品番 | 品名  | 数量 |単位| 見積単価 |  金額 | 
 |____________|_________|______|____|__________|_________|
 |aaaa  |パソコン | 1  | 台 | 200,000 | 200,000 |
 |__________|_________|______|____|__________|_________|
 |    |以下余白 |   |  |     |     |
 |_________|_________|______|____|__________|_________|
 |    |     |   |  |     |     |
 |________|_________|______|____|__________|_________|
 |    |     |   |  |     |     |
 |________|_________|______|____|__________|_________|

こんな感じです。
あっ、表示できるようになった罫線は下線ではなく、枠なので詳細のテキストボックスを四角で囲って作ってあります。
枠を表示出来るようにする前はサブフォームのレポートヘッダに「以下余白」の
文字を入力してあり、見積詳細のすぐ下に表示できたのですが、今回の設定で
それが出来なくなってしまいました。
今、詳細の品名のテキストボックスを四角で囲ってありますが、四角を削除し新たにテキストボックスで囲み、そのテキストボックスに
「見積詳細行+1行目に”以下余白”と表示、それ以外の行は空欄」というコントロールソースが付けられれないかなぁと思っているのですが・・・
それとも、このコントロールも罫線(枠)をつけるためのVBAに追加することが出来るのでしょうか?
よろしくお願いします。(新たな質問で投稿した方がよかったでしょうか?)
・ツリー全体表示

【6574】Re:ログインID、パスワードを自動入力
回答  YU-TANG WEB  - 05/10/24(月) 16:33 -

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

貴殿のケースで使い物になるかどうか分かりませんが、
ご参考まで。

http://www.f3.dion.ne.jp/~element/msaccess/AcTipsGnrlHowToAttachExternalMdb.html#OCD
・ツリー全体表示

【6573】Re:ログインID、パスワードを自動入力
お礼  アクセス初心者  - 05/10/24(月) 16:11 -

引用なし
パスワード
   たんつぼ さんご回答ありがとうございました。

早速Sendkeyで試してみたのですが、ログインID、パスワードを
入力する間、VBAに応答が返ってこない状態になっています。
Sendkey命令を発行したとしてもパスワードを入力されログインされた後
若しくはキャンセルボタンにてキャンセルされた後にしか発行できず
今回の現象を回避することはできませんでした。

他に何かよい方法があれば教えて頂けますでしょうか?
・ツリー全体表示

【6572】Re:テーブルをcsv形式で出力したいので...
発言  小僧  - 05/10/24(月) 13:05 -

引用なし
パスワード
   ▼nemotnemot さん:
こんにちは。
>通常、テーブルAを開いたまま、ファイルから名前をつけて保存/エクスポートを選んで
>外部ファイルまたはデータベースを選択し、データ形式を区切り記号付きを選択し、
>フィールド区切り記号をカンマを選択、テキスト区切り記号をなしを選択

の状態で左下にある「設定」ボタンを押し、「保存」ボタンを押して
適当な名前で保存します。

あとは TransferText メソッドの第2引数に、名前を付けた定義を指定すると
思い通りの形でエクスポートできると思います。

DoCmd.TransferText acExportDelim, "定義名","テーブル名", "出力先フルパス"
・ツリー全体表示

【6571】テーブルをcsv形式で出力したいのですが
質問  nemotnemot  - 05/10/24(月) 10:05 -

引用なし
パスワード
   テーブルをcsv形式で保存したいのですが、TransferText メソッドのヘルプを参考にしてもよくわかりませんでした。

通常、テーブルAを開いたまま、ファイルから名前をつけて保存/エクスポートを選んで外部ファイルまたはデータベースを選択し、データ形式を区切り記号付きを選択し、フィールド区切り記号をカンマを選択、テキスト区切り記号をなしを選択たいのですが、VBAでの記述が全然わかりません。よろしく御願いします。
・ツリー全体表示

【6570】Re:データがなくても罫線を引く・・・を引...
発言  小僧  - 05/10/24(月) 9:39 -

引用なし
パスワード
   ▼koorin さん:
おはようございます。

元ネタのリンクです。

http://www.mahoutsukaino.com/ac/ac2002/vba/vba12/v12.htm

レポートの作成が苦手なので的確なアドバイスができませんが…。


ご提示された内容を見ると、現在 koorin さんは最終形まで
一気に持っていこうとしているために混乱されている部分が
あるのではないか、と思います。

何故うまくいかないのかの原因を一つ一つ詰めて行ってみてはいかがでしょうか。


>注番選択"の抽出条件に[親注番は?]と入力してあります。

まずはこれを固定値に。

>詳細のサブレポートの内訳は

サブレポートを使わずに、1つのレポートであれば
思った通りの事が実現できるのか。

などなど、まずは簡素化して思い通りの動作になるようにレポートを作成して、
そこからサブレポート化してみたりパラメータクエリにしてみたりすると、
現在うまくいっていない原因が特定できると思われますがいかがでしょうか
・ツリー全体表示

【6569】Re:db更新が不調
お礼  goodya  - 05/10/22(土) 12:46 -

引用なし
パスワード
   おっしゃるとおりです。
すいませんでした。
もう一度確認します。
ありがとうございました。
・ツリー全体表示

【6568】Re:db更新が不調
発言  てっちゃん  - 05/10/22(土) 9:14 -

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

>使用方法が悪いのでしょうか。
使用方法というより、「仕様」方法でしょう。

>ここまではokですが、
閉じる前に、「変なデータ」が追加されていないことは
確認したのですよね。

フォームで新規レコードに移動するような処理は行ってませんか?
そして、新規レコードで規定値を入れるような処理・仕様では?

確認したのであれば、
>フォームを閉じると、o_仕訳データrecに1件変なデータが
>追加されます。
と分かっているように、閉じる時に何か追加する処理が
行われているのでしょう。
後は、閉じる時の処理を確認するだけです。

頑張って下さい。


苦言になりますが、
>本当にアクセスは、信用できないソフトと思いますが、
信用できないなら使わない方が良いです。
他の『信用できる』データベースソフトを探してください。
恐らく世間一般での常識でしょう。

こういう事は、感じたとしても書かない方が良いです。
嫌われますよ。
・ツリー全体表示

【6567】db更新が不調
お礼  goodya  - 05/10/21(金) 23:29 -

引用なし
パスワード
   単に仕訳データを格納したのですが、
フォームを閉じると1件変なデータが追加されています。
本当にアクセスは、信用できないソフトと思いますが、
使用方法が悪いのでしょうか。
  o_仕訳データrec.AddNew
  編集
  o_仕訳データrec.Update
  o_仕訳データrec.Close
ここまではokですが、
  DoCmd.Close acForm, "form_a1仕訳出金データ入力"
フォームを閉じると、o_仕訳データrecに1件変なデータが
追加されます。
是正する方法、原因が分かる方、是非よろしくお願いいたします。
・ツリー全体表示

【6566】データがなくても罫線を引く・・・を引用...
質問  koorin  - 05/10/21(金) 16:22 -

引用なし
パスワード
   たびたびすみません、また教えてください。
レポートで見積書を作成しており、印刷時にデータがなくても用紙のしたまで
罫線を引きたかったので、参考に出来るサイトがないかと探したところ
ニキータさんの「魔法使いの開発工房」にぴったりのVBAが載っていたので
早速自分で書いてみましたが、上手くいきませんでした。

ニキータさんの作った見積書レポートとデザインが違うせいだと思いますので
私の作ったレポートの構成を説明すると、
「Q_親注番」クエリ(フィールド名が"親注番"(グループ化)、"会社名"(グループ化)、"客担当者"(グループ化)、"見積担当者"(グループ化)、"注番選択"で見積書作成時に親注番(見積No.にする)を選択出来るように"注番選択"の抽出条件に[親注番は?]と入力してあります。)をレポートヘッダに配置し、
「Q_注番別コスト計」(フィールド名が"親注番"(グループ化)、"品番"(グループ化)、"品名"(グループ化)、"注文数量"(グループ化)、"単位"(グループ化)、"見積単価""(グループ化)、"見積金額""(グループ化))をサブレポートとして、詳細に入っています。
また詳細のサブレポートの内訳はレポートヘッダに"品番"〜"見積金額"のラベルと"見積金額合計"のテキストボックスがあり、詳細に"品番"〜"見積金額"のテキストボックスがあります。
また、2ページ目以降のヘッダにするため、ページヘッダに"品番"〜"見積金額"のラベルがあります。(ここだけニキータさんの例と一緒です)
あと、改ページは初めサブレポートの詳細に入れたらVBA実行時に改ページが見当たらないとエラーが出たので、レポートの詳細内に(サブレポート全体のボックスのすぐ下)に配置しました。
説明が長くなりましたが、以上の設定で書いたコードは次の通りです。

Option Compare Database
Dim AAA As Integer  '今何行目なのかをカウントするための変数
Dim BBB As Integer  '今回印刷する予定のレコード件数をいれておく変数

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
AAA = 0
BBB = DCount("品番", "Q_注番別コスト計")
Me!改ページ30.Visible = False
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
AAA = AAA + 1
If AAA Mod 30 = 0 Then
  If AAA < BBB Then
    Me!改ページ30.Visible = True
    Me!Section(3).Visible = True
  ElseIf AAA = BBB Then
    Me!親注番.Visible = True
    Me!品番.Visible = True
    Me!品名.Visible = True
    Me!注文数量.Visible = True
    Me!単位.Visible = True
    Me!見積単価.Visible = True
    Me!見積金額.Visible = True
  Else
    Me!親注番.Visible = False
    Me!品番.Visible = False
    Me!品名.Visible = True
    Me!注文数量.Visible = False
    Me!単位.Visible = Falsee
    Me!見積単価.Visible = False
    Me!見積金額.Visible = False
  End If
  
Else
  Me!改ページ30.Visible = False
  Me!Section(3).Visible = False  ’1度目のエラー箇所
  If AAA < BBB Then
    Me.NextRecord = True
    Me!親注番.Visible = True
    Me!品番.Visible = True    ’2度目のエラー箇所
    Me!品名.Visible = True
    Me!注文数量.Visible = True
    Me!単位.Visible = True
    Me!見積単価.Visible = True
    Me!見積金額.Visible = True
  ElseIf AAA = BBB Then
    Me.NextRecord = False
    Me!親注番.Visible = True
    Me!品番.Visible = True
    Me!品名.Visible = True
    Me!注文数量.Visible = True
    Me!単位.Visible = True
    Me!見積単価.Visible = True
    Me!見積金額.Visible = True
  Else
    Me.NextRecord = False
    Me!親注番.Visible = False
    Me!品番.Visible = False
    Me!品名.Visible = True
    Me!注文数量.Visible = False
    Me!単位.Visible = Falsee
    Me!見積単価.Visible = False
    Me!見積金額.Visible = False
  End If
End If
End Sub

これで実際に実行すると、

実行時エラー'2465':
指定した式で参照されている'Section'フィールドが見つかりません。

となりました。
改ページしてページヘッダを表示する箇所はエラーが出てないのですが・・・

それでページヘッダの箇所を2箇所とも削除して実行してみたら、
今度は'品番'フィールドが見つからないとエラーが出てしまいました。

次にデザイン事態をニキータさんのように作り変えよう(サブレポートでなく
初めから2つのクエリをしてしてレポートを作る)とやってみたら、
2つのクエリは同じテーブルを基に作っているので出来ませんでした。

どうしたら解決出来るのか教えて下さい。よろしくお願いします。
・ツリー全体表示

【6565】Re:複数テーブルのデータ集計2
回答  チリ子  - 05/10/21(金) 11:28 -

引用なし
パスワード
   ▼てっちゃん さん:
回答ありがとうございます。
>一晩寝たら方法を一つ思いつきました。
すごく悩んでいただき、ありがとうございます。
感謝、感謝です。感激しました。

>はじめに、条件が結構面倒なので、クエリの数も増えて
>ゴチャゴチャしてしまうことは、御了承下さい。
本当に、すごいクエリですね。。。私が理解するには、かなりの時間が必要かもしれません。少し時間がかかるかもしれませんが、挑戦してみます。
また、投稿させていただくと思いますが、その時は宜しくお願致します。
・ツリー全体表示

【6564】Re:連続帳票の印刷方法
回答  たんつぼ  - 05/10/21(金) 11:20 -

引用なし
パスワード
   http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=
UTF-8&rls=GGLD,GGLD:2005-08,GGLD:ja&q=%E3%83%97%E3%83%AA%E3
%83%B3%E3%82%BF%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF
%E3%83%88+ACCESS+VBA
・ツリー全体表示

【6563】Re:ログインID、パスワードを自動入力
回答  たんつぼ  - 05/10/21(金) 11:08 -

引用なし
パスワード
   Sendkey
・ツリー全体表示

【6562】Re:データから一部を取り出して並べ替え
お礼  koorin  - 05/10/21(金) 10:24 -

引用なし
パスワード
   ▼小僧 さん:
おはようございます。

出来ました。
クエリビルダでSQL構文を書くことはフォームとかからも出来るのですね。
クエリ上でしか出来ないと思ってました・・・

ありがとうございましたm(__)m
・ツリー全体表示

【6561】Re:複数テーブルのデータ集計2
回答  てっちゃん  - 05/10/21(金) 9:52 -

引用なし
パスワード
   ▼チリ子 さん:

一晩寝たら方法を一つ思いつきました。

はじめに、条件が結構面倒なので、クエリの数も増えて
ゴチャゴチャしてしまうことは、御了承下さい。

1.まず、各テーブルをくっつけたユニオンクエリを作ります。
  これは、以前の回答(6494)
  http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=6494;id=access
  の中にあったもので、
  これを以後のデータ抽出の基本とします。
SELECT [No], "0504" AS TB, 区分 FROM [0504]
UNION
SELECT [No], "0505" AS TB, 区分 FROM [0505]
UNION
SELECT [No], "0506" AS TB, 区分 FROM [0506];
  名前を「Query_union」とします。


2.次にTBの値を連続にしたクエリを作ります。
  0504・0505・0506・0507・・・・
  と抽出されますが、[No]が"0506"から始まる場合、その[No]は
  "0506"以降が抽出されます。
SELECT Qno.[No], Qtb.TB
FROM
(SELECT [No], Min(TB) AS minTB FROM Query_union GROUP BY [No] ) AS Qno,
(SELECT TB FROM Query_union GROUP BY TB ) AS Qtb
WHERE Qtb.TB>=[Qno]![minTB]
ORDER BY Qno.[No], Qtb.TB;
  クエリ名を「Query_月TB」として下さい。
  あまり、クエリを増やすのもどうかと思ったので、少し端折りました。
  「Query_union」を[No]でグループ化し[TB]の最小値を抜出した「Qno」と
  「Query_union」を[TB]でグループ化したものをくっつけました。
  保存したら、デザインモードや実行結果を確認してください。


3.次は、[No]が欠ける最初の[TB]値を抽出します。
SELECT Query_月TB.[No], Min(Query_月TB.TB) AS TBの最小
FROM Query_月TB LEFT JOIN Query_union ON
(Query_月TB.TB = Query_union.TB) AND
(Query_月TB.[No] = Query_union.[No])
WHERE (Query_union.[No] Is Null)
GROUP BY Query_月TB.[No];
  クエリ名は「Query_欠ける最小値」です。


4.次に「Query_union」から集計対象を抽出します。
SELECT Query_union.*
FROM Query_union LEFT JOIN Query_欠ける最小値 ON
Query_union.[No] = Query_欠ける最小値.[No]
WHERE
(
(Query_union.[No] Is Not Null) AND
(Query_union.TB<[Query_欠ける最小値]![TBの最小])
) OR
(Query_欠ける最小値.[No] Is Null)
ORDER BY Query_union.[No], Query_union.TB;
  クエリ名を「Query_抽出対象」として下さい。


5.最後に4の「Query_抽出対象」に自作関数「fxMakeGroup」でグループ化
  集計すれば完成です。
SELECT [No], 区分, Count(区分) AS カウント
FROM Query_抽出対象
GROUP BY [No], 区分, fxMakeGroup([No],[TB],[区分])
ORDER BY fxMakeGroup([No],[TB],[区分]);


以上です。
簡単なテストしかしてませんので、検証は十分行ってください。

また、ある程度理解できたら、テーブル構造は、「Query_union」と同じになる
ようにする事をお勧めします。
抽出や集計の際の基本となる形であり、以後テーブルの追加があった場合、
そのデータを追加するのみで済み、クエリ等を変更する必要も無くなるので。
あと、フィールド名の[No]もYes/NoのNoと混同され易く、後のトラブルの
原因にもなりかねないので変更されることをお勧めします。
・ツリー全体表示

【6560】Re:データから一部を取り出して並べ替え
回答  小僧  - 05/10/21(金) 9:23 -

引用なし
パスワード
   ▼koorin さん:
おはようございます。

>フォーム上で「注番」の並べ替えをしたいのですが、

レコードソースで並び替えをする例で説明させて頂きますね。


>mid関数とorderbyを組み合わせるのかと思っていますが、

もう一つ、Left関数も使ってみましょう。

フォームのレコードソースの右側の「...」をクリックし、クエリビルダを開きます。

基がクエリだった場合は、 SQL が表示されていると思いますので
SQL 文の最後の「;」を消して

ORDER BY Mid([注番],3,6), Left([注番],2)

と追加してみて下さい。


基がテーブルだった場合には、SQL ビューに切り替えて

SELECT * FROM テーブル名 ORDER BY Mid([注番],3,6), Left([注番],2);

のように SQL を組んでみてください。
・ツリー全体表示

【6559】Re:複数テーブルのデータ集計2
発言  てっちゃん  - 05/10/20(木) 18:24 -

引用なし
パスワード
   ▼チリ子 さん:
>新しいテーブルのデータの"No"があるものだけカウントするようなことはできませんか?
>0505(一番新しい)に1000というNoが存在したら、0506・0507とカウントしていき、
>もし0508にNoが存在しなかったら、0509にNoが存在しても0508以降はカウントしない
>というものです。すごく複雑ですが、できるでしょうか?

う〜〜〜〜〜〜ん。。。。難しいですね。。。

ごめんなさい。できる、できないで言ったら「できる」と思いますが、
その方法を説明できるかどうか。。。。。

とりあえず、確認をいくつか。
[TB]の値の増加規則は何でしょう?
値からみて、「年月」のようにも思えますが、予想ではアレなんで。
(アレリーマン!?)

増加途中で欠ける事があるのでしょうか?
例えば、[No]1000のみでいったら、ご質問のように途中で欠ける
事があると思いますが、全体ではどうでしょう?
テーブル[0506]、[0507]、[0509]、、、
となるような事([0508]はテーブル自体無い)は?
その場合、[TB]の値が飛んだとみなす?、みなさない?


これらを考慮して、また自作関数で、各Noごとの抽出TB値を取得すれば
出来そうな気がします。
・ツリー全体表示

【6558】データから一部を取り出して並べ替え
質問  koorin  - 05/10/20(木) 17:38 -

引用なし
パスワード
   過去ログやヘルプで調べたのですが、どうしてもわからないので教えてください。
フォーム上で「注番」の並べ替えをしたいのですが、
注番は定形入力>LL000000\-99 と指定してあり             
8桁の親注番(最初2桁のアルファベットが客番、3桁目から8桁目までが数字)で
場合によっては枝番(親番のあとに数字2桁)がつきます。
たとえば
AD511011-01 ・・・・・枝番のつく注番
BD510015-01 ・・・・・   〃
FK510015-  ・・・・・親番だけで枝番のない注番
FK511002-  ・・・・・     〃
こんな感じです。
今は単に注番の並べ替え(昇順)になっているので上記のようにならんでしまいます。
それを注番のうち、まず3桁目から8桁目の親番の数字だけを取り出して昇順に
並べ替え、次に客番のアルファベット順で並べ替えたいのですがどのようにしたら
出来るでしょうか?(並べ替え結果を下記のようにしたいのです)
BD510015-01 
FK510015-  
FK511002-
AD511011-01

mid関数とorderbyを組み合わせるのかと思っていますが、記述方法が
分かりません。
よろしくお願いします。
・ツリー全体表示

【6557】解決しそうです。ありがとうございました。
お礼  サナ E-MAIL  - 05/10/20(木) 14:39 -

引用なし
パスワード
   自分でどうやってやったらいいか、糸口が見えていませんでした。
でも、
かみちゃんさんに、本当に丁寧に教えていただきました。
少し、絡まっていたものがほどけそうです。

SQLやユニオンクエリ、というものがどういうものなのかも
よくわかっていませんでした。

照合項目が一致するデータの結合結果は
乗算になるという決まりごとがある、ということすら、
わかってませんでした。

本当に、みなさん、ありがとうございました。
もう少しがんばってみます。
・ツリー全体表示

【6556】Re:複数テーブルのデータ集計2
質問  チリ子  - 05/10/20(木) 10:49 -

引用なし
パスワード
   ▼てっちゃん さん

てっちゃんさんありがとうございます。
出来ました。書かれている内容を理解もせず使用しようとしていました。すいません。だんだん理解できて来ました。ありがとうございます。

どんどん質問してしまいますが、、、
新しいテーブルのデータの"No"があるものだけカウントするようなことはできませんか?0505(一番新しい)に1000というNoが存在したら、0506・0507とカウントしていき、もし0508にNoが存在しなかったら、0509にNoが存在しても0508以降はカウントしないというものです。すごく複雑ですが、できるでしょうか?
質問ばかりですいませんが、宜しくお願致します。
・ツリー全体表示

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