Access VBA質問箱 IV

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

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


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

【6514】Re:入力規制
質問  koorin  - 05/10/17(月) 16:25 -

引用なし
パスワード
   小僧 さん
アドバイスありがとうございます。
見積金額を入力したいテーブルのフォームはすでに作ってあります。
見積金額のテキストボックスの更新前処理に式ビルダで条件を入れれば
よいということでしょうか?
VBAは詳しくないので、その辺も教えていただけませんか?
よろしくお願いします。
・ツリー全体表示

【6513】複数テーブルのデータ集計2
質問  チリ子  - 05/10/17(月) 16:01 -

引用なし
パスワード
   てっちゃんさん、もう一つだけ教えてください。
区分をカウントした結果で、区分が自動で昇順に並び替えられているようなのですが、並び替えられずに、最初の月の区分が2だったら2を先に表示させるようにはできませんか?カウントした月順に表示させていのですが、、、、できませんか?
・ツリー全体表示

【6512】Re:複数テーブルのデータ集計
お礼  チリ子  - 05/10/17(月) 15:18 -

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

>'fxMakeGroup'というのは、最初の回答の
>>> まず、標準モジュールに次のコードをコピペして下さい。
>>> '-----------------------------------------------------------
>>> Function fxMakeGroup(ByVal inNo As Long, inTB As String, 〜
>      ~~~~↑~~~~~(この'プロシージャ名'を指します)

クエリとモジュールのfxMakeGroupとを書き直したら、クエリが実行できました!!!
カウントされて結果が表示されました☆
すごくびっくりしました。まだまだ課題がありますが、出来るということが分かり、一歩前へ進むことができました。また、分からないことがあるかもしれませんが、ここからは少し自分でやってみます!!!またご教授いただけたらうれしいです。ありがとうございました。今後もよろしくお願いします。
・ツリー全体表示

【6511】Re:入力規制
発言  小僧  - 05/10/17(月) 14:47 -

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

Access の機能の話になってしまうのですが、
テーブルやクエリは直接値を操作するものではなく、
ユーザからのデータ投入に関してはフォームを介するのが一般的です。

連結フォームでデータの入力画面を作成されれば、
テーブルに連結されたテキストボックスの「更新前処理」にでも
VBA を使って色々と判断させる事ができますよ。
・ツリー全体表示

【6510】入力規制
質問  koorin  - 05/10/17(月) 13:16 -

引用なし
パスワード
   テーブルの入力規制について質問です。
すでに作成されているクエリの値を参照してテーブルデータの入力規制を
作成したいのですがどうしたらよいでしょうか?
具体的にいうと、部品の見積価格をテーブルに入力したいのですが、その入力規制としてクエリで抽出したコスト合計の130%以上という式を入れたいのです。
そして実際に見積価格のフィールドにコストの130%以上の値が入力されたとき
「利益30%以下!」というエラーメッセージを表示させたいのです。
ACCESSのヘルプを見たらテーブルのプロパティで設定する場合、他のテーブルやクエリのフィールド参照は出来ないと書いてあったので困っています。
見積価格を入力する場所をクエリにしてもよいのですが、この場合クエリでの
入力規制の設定方法も分かりません。
どなたかよい方法を教えてください。よろしくお願いします。
・ツリー全体表示

【6509】Re:複数テーブルのデータ集計
回答  てっちゃん  - 05/10/17(月) 11:59 -

引用なし
パスワード
   ▼チリ子 さん:
> クエリを実行させると、式に未定義関数'fxMakeGroup'があります。
> というエラーがでます。'fxMakeGroup'というのは、
> 標準モジュールの名前という判断でいいのでしょうか。

'fxMakeGroup'というのは、最初の回答の
>> まず、標準モジュールに次のコードをコピペして下さい。
>> '-----------------------------------------------------------
>> Function fxMakeGroup(ByVal inNo As Long, inTB As String, 〜
      ~~~~↑~~~~~(この'プロシージャ名'を指します)

このコードを保存した標準モジュールの名前は
「Module_自作関数」とでもしておいて下さい。

そのあと、fxMakeGroupのスペルをもう一度確認してみてください。
(モジュール、クエリー、両方とも)


>>>GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
>この部分を下の内容に変更すると、、
>>GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
>>ORDER BY fxMakeGroup([No],[TB],[区分]);
>構文エラーになってしまいます。
とりあえず変更せず、上記の事を確認してみてください。
それでうまくいったら、変更してみてください。
・ツリー全体表示

【6508】Re:複数テーブルのデータ集計
質問  チリ子  - 05/10/17(月) 10:52 -

引用なし
パスワード
   ▼てっちゃん さん:
お返事が大変遅くなり申し訳ありません。

クエリを実行させると、式に未定義関数'fxMakeGroup'があります。というエラーがでます。'fxMakeGroup'というのは、標準モジュールの名前という判断でいいのでしょうか。

>>GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
この部分を下の内容に変更すると、、
>GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
>ORDER BY fxMakeGroup([No],[TB],[区分]);
構文エラーになってしまいます。

何度もすみませんが、ご教授宜しくお願致します。
・ツリー全体表示

【6507】Re:ではサンプルをまた一つ
発言  小僧  - 05/10/16(日) 21:35 -

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

Ac2002 以降でないと、AddItem メソッドは使えない模様ですね。
お持ちの Access が2002未満でしたら下のようなコードで試されてみて下さい。

Private Sub Form_Load()
'要参照 DAO x.x Object Library
Dim RS As DAO.Recordset
Dim i As Long
Dim strItem As String

  Me.lstフィールド名.RowSourceType = "Value List"

  Set RS = CurrentDb.OpenRecordset("テーブルA", dbOpenSnapshot)
    For i = 0 To RS.Fields.Count - 1
      'Me.lstフィールド名.AddItem RS(i).Name
      strItem = strItem & ";" & RS(i).Name
    Next
      Me.lstフィールド名.RowSource = Mid(strItem, 2)
  RS.Close: Set RS = Nothing
End Sub
・ツリー全体表示

【6506】Re:ではサンプルをまた一つ
質問  Saiyama  - 05/10/16(日) 20:56 -

引用なし
パスワード
   小僧さん
 こんばんは。
 何度も質問をしてしまい、すみません。よろしくお願いします。

>適当なフォームを作成し、
>
>リストボックス: lstフィールド名
>コマンドボタン: クエリ作成
作成完了。
>を配置して下さい。
>lstフィールド名の方は複数選択を「標準」に設定して下さい。
設定完了。
>まず、フォームの読み込み時のイベントに
>
>Private Sub Form_Load()
>'要参照 DAO x.x Object Library
>Dim RS As DAO.Recordset
>Dim i As Long
>
>  Me.lstフィールド名.RowSourceType = "Value List"
>
>  Set RS = CurrentDb.OpenRecordset("テーブルA", dbOpenSnapshot) 
>    For i = 0 To RS.Fields.Count - 1
>      Me.lstフィールド名.AddItem RS(i).Name
>    Next
>  RS.Close: Set RS = Nothing
>
>End Sub
>
>のようにイベントを組み込みます。
>
>これでフォームを開くと、リストボックスにフィールドの一覧が表示されると思います。
実行しましたら、「コンパイルエラー:メソッドまたはデータメンバが見つかりません」
メッセージが出ています。
変更したのは、以下の二点です。
※OpenRecordsetの「テーブル名」→テーブルAへ書き換えました
※DAO x.x Object Library→DAO 3.6 Object Libraryに設定した
・ツリー全体表示

【6505】Re:クロス集計で累計を出すには
お礼  うっち  - 05/10/16(日) 20:00 -

引用なし
パスワード
   ▼小僧 さん:
ありがとうございます。無事に動作しました!
発生年月日をテキスト型にしていたのがいけなかったようで、数値型に変更してうまく動作できました。
親切にご指導頂いてありがとうございました!!

>▼うっち さん:
>こんにちは。
>
>>始めに発生年月日が昇順になっていなかったからか、うまくいかず、
>
>ソートしていなくても大丈夫ですよ^^。
>
>
>>"クエリ式'管理番号=102356発生年月日<=200102'
>>構文エラー:演算子がありません"と出てしまいます。
>
>'管理番号=102356 発生年月日<=200102'
>         ^
>ここに半角スペースがないのが気になりますね。後、本来
>
>'管理番号=102356 AND 発生年月日<=200102'
>
>となるようにクエリを作成したつもりなのですが、
>どこか「 AND 」を抜かしてしまった場所はありませんでしょうか?
・ツリー全体表示

【6504】Re:クロス集計で累計を出すには
発言  小僧  - 05/10/16(日) 18:53 -

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

>始めに発生年月日が昇順になっていなかったからか、うまくいかず、

ソートしていなくても大丈夫ですよ^^。


>"クエリ式'管理番号=102356発生年月日<=200102'
>構文エラー:演算子がありません"と出てしまいます。

'管理番号=102356 発生年月日<=200102'
         ^
ここに半角スペースがないのが気になりますね。後、本来

'管理番号=102356 AND 発生年月日<=200102'

となるようにクエリを作成したつもりなのですが、
どこか「 AND 」を抜かしてしまった場所はありませんでしょうか?
・ツリー全体表示

【6503】Re:クロス集計で累計を出すには
質問  うっち  - 05/10/16(日) 17:35 -

引用なし
パスワード
   ▼小僧 さん:
何度もありがとうございます。早速試してみましたが、始めに発生年月日が昇順になっていなかったからか、うまくいかず、昇順にしてからやってみたのですが、
"クエリ式'管理番号=102356発生年月日<=200102'構文エラー:演算子がありません"と出てしまいます。何処が悪いのでしょうか?
何度も質問して申し訳ありません。
>▼うっち さん:
>こんばんは。
>
>>テーブル1が
>>管理番号   発生年月日   数量
>>123456     200110     5
>>123456     200111     6
>>123456     200112     7
>
>という事ですので、
>まずはこのテーブルを元に累計数量を算出するクエリを作成してみましょう。
>
>SELECT
>テーブル1.管理番号,
>テーブル1.発生年月日,
>DSum("数量","テーブル1","管理番号 = " & [管理番号] & " AND
>発生年月日 <= " & [発生年月日]) AS 累計数量
>FROM テーブル1;
>
>上記 SQL をクエリの SQL ビューに貼り付けると、
>
>管理番号   発生年月日   累計数量
>123456     200110     5
>123456     200111     11
>123456     200112     18
>
>のようになりませんでしょうか。
>
>後はこのクエリをクロス集計クエリへと変換してみましょう。
>
>クロス集計クエリとなると、
>フィールドの名前が半角数値のみとなってしまいます。
>後々誤作動の元となりますので、ちょっと名前を変えておきましょう。
>
>
>TRANSFORM Sum(DSum("数量","テーブル1","管理番号 = " & [管理番号] & " AND
>発生年月日 <= " & [発生年月日])) AS 累計数量
>SELECT テーブル1.管理番号
>FROM テーブル1
>GROUP BY テーブル1.管理番号
>PIVOT Left([発生年月日],4) & "年" & Right([発生年月日],2) & "月";
・ツリー全体表示

【6502】Re:ExcelマクロでACCESSのフォームのイベ...
お礼  はぐれ雲  - 05/10/16(日) 11:42 -

引用なし
パスワード
   ▼小僧 さん:
提案いただいた工夫が必要で、そのままではうまく処理できないことがよく分かりました。標準モジュールでも動くようにしてトライして見ます。本当に助かりました、ありがとうございました。
・ツリー全体表示

【6501】Re:IEオブジェクトでWebページ取得で不満
お礼  bossa777  - 05/10/16(日) 3:43 -

引用なし
パスワード
   かみちゃん さん、小僧 さん:
ご教示有難うございました。
まさに求めていたのはこれらの情報でした!

XMLHTTPの方法でやってみましたが、処理速度は1.5倍くらい、
それよりうれしいことに他のウインドウで作業していても
フォーカスをとられることがありません!

この度は有難うございました。感謝いたします。
・ツリー全体表示

【6500】Re:ExcelマクロでACCESSのフォームのイベ...
回答  小僧  - 05/10/16(日) 3:28 -

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

>フォームのボタンをクリックした時に走るイベントプロシジャーを起動するExcelのマクロ
>Excelのマクロは中級レベルですが

という事ですので、ちょっと板違いですが Excel の例で説明させて頂きます。

Sheet1 に配置したコマンドボタンをクリックすると動作するイベントプロシジャを
Sheet2 から呼び出すことはできますでしょうか。

>Private Sub CommandButton1_Click()
^^^^^^^

これをどうしても Sheet2 から呼び出したい時には工夫がいると思います。例えば

>Call クリック("Sheet1")

として、標準モジュールに

>Public Sub クリック(SheetName As String)

のようにシート名を渡して、シートモジュールで行っていた事を
標準モジュールでも行えるようにコーディングし直したりする事で
Sheet2 からでも同じ動作ができるようにする事が可能です。

また、余りお勧めできませんが

>Public Sub CommandButton1_Click()

として、

>Call Sheets("Sheet1").CommandButton1_Click

でも可能でしょうか。


Access の場合も同じような事が言えると思います。
フォームのボタンをクリックする事によって起きる動作を
他からも引き出せるような工夫を実現できれば
Excel から Access のプロシジャを実行させる事は可能ですよ。

参考記事:
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=181;id=access
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=5609;id=excel
・ツリー全体表示

【6499】Re:クロス集計で累計を出すには
回答  小僧  - 05/10/16(日) 2:41 -

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

>テーブル1が
>管理番号   発生年月日   数量
>123456     200110     5
>123456     200111     6
>123456     200112     7

という事ですので、
まずはこのテーブルを元に累計数量を算出するクエリを作成してみましょう。

SELECT
テーブル1.管理番号,
テーブル1.発生年月日,
DSum("数量","テーブル1","管理番号 = " & [管理番号] & " AND
発生年月日 <= " & [発生年月日]) AS 累計数量
FROM テーブル1;

上記 SQL をクエリの SQL ビューに貼り付けると、

管理番号   発生年月日   累計数量
123456     200110     5
123456     200111     11
123456     200112     18

のようになりませんでしょうか。

後はこのクエリをクロス集計クエリへと変換してみましょう。

クロス集計クエリとなると、
フィールドの名前が半角数値のみとなってしまいます。
後々誤作動の元となりますので、ちょっと名前を変えておきましょう。


TRANSFORM Sum(DSum("数量","テーブル1","管理番号 = " & [管理番号] & " AND
発生年月日 <= " & [発生年月日])) AS 累計数量
SELECT テーブル1.管理番号
FROM テーブル1
GROUP BY テーブル1.管理番号
PIVOT Left([発生年月日],4) & "年" & Right([発生年月日],2) & "月";
・ツリー全体表示

【6498】ExcelマクロでACCESSのフォームのイベン...
質問  はぐれ雲  - 05/10/15(土) 22:14 -

引用なし
パスワード
   ACCESSのデータベースを開き、そのフォームのボタンをクリックした時に走るイベントプロシジャーを起動するExcelのマクロを作りたいのですが可能でしょうか。

Excelのマクロは中級レベルですが、ACCESSのVBAは素人です。どなたか分かる方があればイベントプロシジャーを起動する部分の処理をどうすればよいのかを教えて下さい、よろしくお願いします。
・ツリー全体表示

【6497】Re:クロス集計で累計を出すには
質問  うっち  - 05/10/15(土) 22:08 -

引用なし
パスワード
   ▼小僧 さん:
ご指導ありがとうございます。
テーブル1が
管理番号   発生年月日   数量
123456     200110     5
123456     200111     6
123456     200112     7
 ・       ・      ・
 ・       ・      ・
 ・       ・      ・
このようになっていてクロス集計で
管理番号  200110  200111   200212
123456     5     11    18
 ・       ・      ・
 ・       ・      ・
 ・       ・      ・
といった感じにしたいのです。
説明が悪くて申し訳ありません。 

>▼うっち さん:
>おはようございます。
>
>>管理番号をグループ化して行見出しにし、
>>列見出しを発生年月日(5年分)にして、
>>各数量の合計を集計するクロス集計クエリは作れるのですが、
>>数量を累計にしたい場合どのようにすれば良いでしょうか?
>
>クロス集計クエリの縦計を出したい、という事でしょうか?
>
>もしそのようでしたら…。
>
>まず、クエリに縦計を持たす必要があるかどうかです。
>そのクロス集計クエリを基にフォームやレポートを作成するのであれば、
>フォームやレポートの方で計算させた方がスマートに処理できると思います。
>
>もしどうしてもクエリで縦計まで合わせたものが必要なのでしたら、
>年、月ごとの合計だけを表示するクエリを作成して、
>基のクエリとユニオンクエリを使って結合する手もありかと思います。
>
>まったく見当外れの話でしたら申し訳ないです。
・ツリー全体表示

【6496】Re:桁数指定の抽出
回答  CC4A  - 05/10/14(金) 19:56 -

引用なし
パスワード
   >ただし、4桁の数値かどうかは判別できませんけど ^^;
Like "*万####"
で、いいでしょ。
*をどうするかは、お任せするとして・・・
・ツリー全体表示

【6495】Re:複数テーブルのデータ集計
回答  てっちゃん  - 05/10/14(金) 18:02 -

引用なし
パスワード
   ▼チリ子 さん:
ちょっと試していたら、並び順がすこしずれるかもしれませんね。
なので、
クエリに
〜略〜
> GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分]);
GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
ORDER BY fxMakeGroup([No],[TB],[区分]);
と、並べ替えを追加して下さい。(';'も最後へ)
・ツリー全体表示

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