Access VBA質問箱 IV

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

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


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

【6535】Re:ではサンプルをまた一つ
発言  小僧  - 05/10/18(火) 11:49 -

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

ここ…かもしれないですね。

>>>※OpenRecordsetの「テーブル名」→テーブルAへ書き換えました

>  strSQL = "SELECT " & MID(strSQL, 2) _
>      & "FROM テーブル名"

この SQL のテーブル名 も 変更してもう一度試されてみて下さい。
・ツリー全体表示

【6534】Re:[AC2002]ファイルダイアログキャンセル...
回答  小僧  - 05/10/18(火) 11:43 -

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

>先頭から起動するとデータベースウィンドウが表示されなくなったことで、
>残念ながら画面切り替えもおこなわれなくなってしまいました。

では次の小細工を…

  SendKeys "%{ESC}", True
  SendKeys "%+{ESC}", True

Alt + Esc で画面移動して元に戻してみました。

これでうまくいくと良いのですが…。
・ツリー全体表示

【6533】Re:ではサンプルをまた一つ
質問  Saiyama  - 05/10/18(火) 11:40 -

引用なし
パスワード
   小僧さん
>まず、「クエリ作成」 の クリック時 は [イベント プロシージャ] になっていますでしょうか。
[イベント プロシージャ]になっています。


>フォーム上には変化がありませんが、
>クエリ「Q_Temp」というのが出来ていませんでしょうか。
クエリの画面では「Q_Temp」が出来ていません。
・ツリー全体表示

【6532】Re:[AC2002]ファイルダイアログキャンセル...
質問  nyoro  - 05/10/18(火) 11:32 -

引用なし
パスワード
   ▼小僧 さん:
>
>小細工ですが、こんなのはいかがでしょうか。
>キャンセルが実行された後あたりに
>
>  SendKeys "^{F6}", True
>  SendKeys "^{F6}", True
>
デザイン状態からのテストではうまくいったのですが、
先頭から起動するとデータベースウィンドウが表示されなくなったことで、
残念ながら画面切り替えもおこなわれなくなってしまいました。

他に何か解決策ご存知の方いませんか?
・ツリー全体表示

【6531】Re:[AC2002]ファイルダイアログキャンセル...
お礼  nyoro  - 05/10/18(火) 11:08 -

引用なし
パスワード
   ▼小僧 さん:
>
>
>小細工ですが、こんなのはいかがでしょうか。
>キャンセルが実行された後あたりに
>
>  SendKeys "^{F6}", True
>  SendKeys "^{F6}", True
>
レスありがとうございます。
なるほど、CTRL+F6で画面切り替えですか。

クローズ&オープンに比べればかなりよい方法だと思います。
早速使用してみたいと思います。

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

【6530】Re:ではサンプルをまた一つ
回答  小僧  - 05/10/18(火) 10:54 -

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

まず、「クエリ作成」 の クリック時 は [イベント プロシージャ] になっていますでしょうか。
ここが空白ですと、書かれたコードとクリック時の関連が設定されていない事になります。
もう一度「...」をクリックして コードビルダ を選択して下さい。
(1回 コード画面が表示されれば大丈夫です。)


次に、

>動いてない様子です。

フォーム上には変化がありませんが、
クエリ「Q_Temp」というのが出来ていませんでしょうか。
・ツリー全体表示

【6529】Re:ではサンプルをまた一つ
質問  Saiyama  - 05/10/18(火) 10:44 -

引用なし
パスワード
   小僧さん

 選択されたフィールドを元にして、クエリ作成の段階でなんかクエリ作成の
コマンドボタンが動いてくれないようです。

一、作業の手順:「クエリ作成」のイベントのクリックに以下のコードを
貼り付け、次にコマンドボタンのクリック時のイベントに
Private Sub クエリ作成_Click()
Dim varS As Variant
Dim strSQL As String
Dim QD As DAO.QueryDef
  If DCount("*", "MSysObjects", "Name = 'Q_Temp'") > 0 Then _
    DoCmd.DeleteObject acQuery, "Q_Temp"
  For Each varS In Me.lstフィールド名.ItemsSelected
    strSQL = strSQL & "," & Me.lstフィールド名.ItemData(varS) & " "
  Next
  strSQL = "SELECT " & MID(strSQL, 2) _
      & "FROM テーブル名"
  Set QD = CurrentDb.CreateQueryDef("Q_Temp", strSQL)
  QD.Close: Set QD = Nothing
End Sub
二、フォームを開き
フィールド一覧が表示され、複数のフールドを選択し(色反転)、
「クエリ作成」コマンドボタンを押しても、動いてない様子です。
・ツリー全体表示

【6528】Re:ではサンプルをまた一つ
質問  Saiyama  - 05/10/18(火) 10:21 -

引用なし
パスワード
   小僧 さん
 大変失礼いたしました。
 原因はやはり{lstフィールド名}というコントロールがなかったです。
設定しまいたら、フィールドリストが表示されました。
お蔭様で、一歩前進!
・ツリー全体表示

【6527】Re:ではサンプルをまた一つ
回答  小僧  - 05/10/18(火) 10:07 -

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

>どの行で色が反転していますでしょうか?
>Me.lstフィールド名.RowSourceType = "Value List"
>
>{.lstフィールド名}→青く反転している

>>そのものずばり、リストボックスを作って、
>>名前を「lstフィールド名」として下さい。

原因はここのようですね。

「このフォームには lstフィールド名 っていうコントロールがないよ」と
怒られている模様です。もう一度リストボックスの名前を確認されてみて下さい。
・ツリー全体表示

【6526】Re:ではサンプルをまた一つ
質問  Saiyama  - 05/10/18(火) 9:53 -

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

どの行で色が反転していますでしょうか?
Me.lstフィールド名.RowSourceType = "Value List"

{.lstフィールド名}→青く反転している
・ツリー全体表示

【6525】Re:入力規制
回答  小僧  - 05/10/18(火) 9:30 -

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

>実行時エラー'3075':
>クエリ式'注番=FK508012-'の構文エラー:演算子がありません。

>>VBA や クエリ を使用する場合は、
>>フィールドのデータ型によって条件式が変わる場合が多々あります。

>だからエラーが出たのでしょうか?

他に問題があるかもしれませんが、原因の一端はここにありますね。

テキスト型であれば、

 DLookup("コスト合計","注番別コスト","注番 = '" & Me.注番.Value & "'")

となります。まずはここから直していきましょう。


>自分で気になっている点は「注番別コスト」クエリの「注番」、「コスト合計」
>は「注番別コスト詳細」クエリの「注番」をグループ化、「コスト」を合計した
>ものです。グループ化したフィールドを使っても問題ないですか?

もし、上記のDLookup関数がうまく行くようでしたら、こちらも試してください。

 DSum("コスト","注番別コスト詳細","注番 = '" & Me.注番.Value & "'")

クエリからクエリを作ると動作が遅くなる場合があるので、
DSum関数を使ってうまく行くようでしたらそちらの方が良いかと思います。


>あと情報として何が必要でしょうか?

今まで仮定で決めていたのですが、
フォーム上にあるテキストボックス名は「注番」で大丈夫でしょうか?


>VBAがよく分からない

実は上に提示させて頂いた事も、ヘルプに載っています。
(Access のヘルプでなく、VBA のコードが表示される画面でのヘルプです。)

ヘルプを読むのは慣れるまではきつい事だとは思われますが、
コードを組む際には必須ですので、乗り越えていきましょう。
ヘルプが理解できない、ヘルプで探せない場合はご遠慮せずに質問してくださいね。
・ツリー全体表示

【6524】Re:ではサンプルをまた一つ
発言  小僧  - 05/10/18(火) 9:04 -

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

>以下のコードで、試しましたが、やはり改善されずに、前回と同様なエラーがでています。

当方、Ac2002とAc2000でうまくいくのですが…。


>コンパイルエラー:メソッドまたはデータメンバが見つかりません

どの行で色が反転していますでしょうか?
・ツリー全体表示

【6523】Re:入力規制
質問  koorin  - 05/10/18(火) 0:14 -

引用なし
パスワード
   ▼小僧 さん:
大変お返事が遅くなってすみません。
せっかく教えていただいたのですが、何度やってもエラーメッセージが
出てしまいます・・・
メッセージをそのまま書くと、

実行時エラー'3075':
クエリ式'注番=FK508012-'の構文エラー:演算子がありません。

小僧さんのお返事に

>さて、フォーム上には「注番」というテキストボックスに数値型の番号があると仮定しますと、

とありましたが、注番はエラーメッセージをご覧の通りテキスト型です。
注番のフィールドには定型入力 >LL000000\-99;0;_ を設定しています。

>VBA や クエリ を使用する場合は、
>フィールドのデータ型によって条件式が変わる場合が多々あります。
>

だからエラーが出たのでしょうか?

>また今回のご質問の場合は、フォーム上にどういったコントロールが
>配置されているかもご提示されておりません。
>
>全て回答者の想像任せになってしまうために、勘を外すと効率が悪くなってしまいますよね?
>どのへんまでを情報として提示した方が良いのかは
>難しいと思うのですが、もうちょっと情報量を増やして下さいね。

すみません、どこまで書けばよいのか分からなくて・・・

自分で気になっている点は「注番別コスト」クエリの「注番」、「コスト合計」
は「注番別コスト詳細」クエリの「注番」をグループ化、「コスト」を合計した
ものです。グループ化したフィールドを使っても問題ないですか?
あと情報として何が必要でしょうか?

なんとかあとは自分で解決出来ないかと色々試しましたが、VBAがよく分からない
のでやはり無理でした。
申し訳ありません、よろしくお願いします。
・ツリー全体表示

【6522】Re:ではサンプルをまた一つ
質問  Saiyama  - 05/10/17(月) 22:34 -

引用なし
パスワード
   小僧さん
 こんばんは、返事をいただき、ありがとうございます。
テストの結果を報告します。
>Ac2002 以降でないと、AddItem メソッドは使えない模様ですね。
>お持ちの Access が2002未満でしたら下のようなコードで試されてみて下さい。
こちらの環境:PCのOSはMEですが、Access2002を使っています。
>
以下のコードで、試しましたが、やはり改善されずに、前回と同様なエラーがでて
います。

>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
・ツリー全体表示

【6521】Re:[AC2002]ファイルダイアログキャンセル...
発言  小僧  - 05/10/17(月) 18:03 -

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

こちらでも同様の事象が再現致しました。(WinXP,Ac2002)

色々試してみたのですが、
画面の切替がおきないと制御がうまくいかないようですね。

小細工ですが、こんなのはいかがでしょうか。
キャンセルが実行された後あたりに

  SendKeys "^{F6}", True
  SendKeys "^{F6}", True

※ 当方は API に詳しくないので解りませんが、
  識者の方からもっとスマートな回答を頂けるかも知れません。
・ツリー全体表示

【6520】Re:入力規制
発言  小僧  - 05/10/17(月) 18:00 -

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

なんとなく状況は理解できるのですが…。

VBA や クエリ を使用する場合は、
フィールドのデータ型によって条件式が変わる場合が多々あります。

また今回のご質問の場合は、フォーム上にどういったコントロールが
配置されているかもご提示されておりません。

全て回答者の想像任せになってしまうために、勘を外すと効率が悪くなってしまいますよね?
どのへんまでを情報として提示した方が良いのかは
難しいと思うのですが、もうちょっと情報量を増やして下さいね。


さて、フォーム上には「注番」というテキストボックスに数値型の番号があると仮定しますと、

Private Sub 見積金額_BeforeUpdate(Cancel As Integer)
Dim curCost As Currency
  curCost = CCur( _
  DLookup("コスト合計","注番別コスト","注番 = " & Me.注番.Value)*1.3)

  If Me.見積金額.Value < curCost Then
    MsgBox "利益30%以下!"
    Cancel = True
  End If
End Sub

こんな感じになると思います。
・ツリー全体表示

【6519】Re:入力規制
質問  koorin  - 05/10/17(月) 17:42 -

引用なし
パスワード
   ▼小僧 さん:
大変丁寧に回答を頂きありがとうございます。

>>クエリで抽出したコスト合計の130%以上

ですが、具体的に説明すると”注番別コスト”という名前のクエリの
”コスト合計”というフィールドの値に1.3をかけたものです。
見積金額を入力するテーブルと注番別コストは注番でリレーションシップが
組まれています。

教えていただいたコードのxxxにはどう入力したらよいのでしょうか?

たびたびすみません。よろしくお願いします。
・ツリー全体表示

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

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

#後々のため
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=6485;id=access
の続き

回答番号 6495 の
> クエリに
> 〜略〜
>> GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分]);
> GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
> ORDER BY fxMakeGroup([No],[TB],[区分]);
> と、並べ替えを追加して下さい。(';'も最後へ)
このことかな?

> 式に未定義関数'fxMakeGroup'があります。というエラー
は出なくなったので、並べ替えもできませんか?

一度、出来上がったクエリーをデザインビューで開いてみると、
分かりやすいかもしれません。
('fxMakeGroup'を非表示にしてますが、表示すると良いかも)
・ツリー全体表示

【6516】Re:入力規制
発言  小僧  - 05/10/17(月) 16:37 -

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

>クエリで抽出したコスト合計の130%以上

ここの作りが不明ですので、完全な回答にはなりませんが、
テキストボックスの「更新前処理」で
「コードビルダ」を選択して、「...」をクリック。

出現した画面に

Private Sub 見積金額_BeforeUpdate(Cancel As Integer)
  If Me.見積金額.Value < xxx Then
    MsgBox "利益30%以下!"
    Cancel = True
  End If
End Sub

のようにコードを書くと、
If の条件を満たすとメッセージボックスが出現して、
データの更新ができなくなります。

あとは xxx の場所に、クエリから持ってくる(?)値を入れることになります。
・ツリー全体表示

【6515】[AC2002]ファイルダイアログキャンセル時...
質問  nyoro  - 05/10/17(月) 16:28 -

引用なし
パスワード
   この掲示板にははじめての投稿になります。よろしくお願いします。

現在AC97をAC2002にバージョンアップ作業をしています。
ファイルオープンダイアログ表示はAC97まではActiveXを使用していましたが、
AC2002から新機能のmsoFileDialogPickerを使用することにしました。
ダイアログは正しく表示されるのですが、ファイルを選択しないで
キャンセルした場合やエラーとなって前画面に戻った場合に、
キーボードの挙動(たとえばTABキーによるフォーカス移動)が行われなくなります。
Windows画面自体の選択がキャンセルされているような状態で、
一度画面上をマウスクリックすれば復活するのですが。。。
試行錯誤したところ、一旦画面をクロース処理してから再度オープンさせれば
よいことだけはわかりましたが、オープン時にも他のイベントやらが
入っているのでなるべく避けたい状況です。

なにかもっとスマートな方法をご存知の方はいませんか?
・ツリー全体表示

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