Access VBA質問箱 IV

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

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


1 / 500 ページ 前へ→

【13233】Re:画面リサイズを不可にするとタイトル...
お礼  バンブー  - 18/2/13(火) 11:47 -

引用なし
パスワード
   ▼hatena さん:
ご確認頂きありがとうございました。
先方に確認して頂き一旦はOKになりましたので、
ここまでの対応で完了にしておきます。

また、何かありましたらご教授宜しくお願い申し上げます。
・ツリー全体表示

【13232】Re:画面リサイズを不可にするとタイトル...
回答  hatena  - 18/2/12(月) 12:32 -

引用なし
パスワード
   >>あと、OSのバージョンも提示してください。
>Windows7
>Access2010,Access2016Runtime
>です。

動作検証してみました。
ただし、Windows7の環境はないのて、Windows10 で。
また、Runtimeもインストールしてないので、
Access2010 で作成して、Access2016のランタイムモードで検証しました。
症状は再現しませんでした。

>Access2010で作成し、Access2010で実行すると問題ないですが、
>Access2016Runtimeで実行すると症状が出ます。
>※Access2016で作成したものは多分ならないと思います。

特定の環境における現象だとすると原因究明や対策は難しいですね。

>ただ、タイトル部分にマウスを移動してタイトルをクリックするとまだ最小化/最大化/閉じるボタンがクラッシックスタイル表示に変わります。
>ダブルクリックしたり、クリックしたままドラッグ移動すると消えるのですが、何故そうなるのか不明です。

そうですか。残念ですね。

どうしても気になるようなら、最小化/最大化/閉じるボタンを表示にして、フォーム上に代替のボタンを配置するぐらいしかなさそうです。
・ツリー全体表示

【13231】Re:画面リサイズを不可にするとタイトル...
回答  バンブー  - 18/2/10(土) 20:29 -

引用なし
パスワード
   ▼hatena さん:
>動作検証できるように宣言部も含めて、実際に動作するコードを提示してもらえませんか。

Public Declare Function SetWindowPos Lib "USER32" _
  (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
   ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
   ByVal fuFlags As Long) As Long
Public Declare Function GetSystemMenu Lib "USER32" _
  (ByVal hWnd As Long, ByVal fRever As Long) As Long
Public Declare Function RemoveMenu Lib "USER32" _
  (ByVal hMenu As Long, ByVal uItem As Long, ByVal fuFlags As Long) As Long
  

Public Const SWP_NOMOVE = &H2
Public Const HWND_TOP = &H0
Public Const SC_SIZE = &HF000
Public Const MF_BYCOMMAND = &H0&

Dim hWnd As Long

hWnd = Application.hWndAccessApp
SetWindowPos hWnd, HWND_TOP, 0, 0, 960, 720, SWP_NOMOVE
hWnd = GetSystemMenu(hWnd, 0)
RemoveMenu hWnd, SC_SIZE, MF_BYCOMMAND


>あと、OSのバージョンも提示してください。
Windows7
Access2010,Access2016Runtime
です。
Access2010で作成し、Access2010で実行すると問題ないですが、
Access2016Runtimeで実行すると症状が出ます。
※Access2016で作成したものは多分ならないと思います。

>Accessウィンドウを表示しない方法 Access2007以降版 - hatena chips
>hatenachips.blog.fc2.com/blog-entry-389.html
>
>
>なお、RemoveMenu や DeleteMenu でリサイズを無効にした場合、マウスをフォームの境界に持っていくと、リサイズ可能カーソルに変化するのに、リサイズできないという矛盾した状態になりますので、SetWindowLon で、WS_THICKFRAME属性を除去する方法の方が私は好みです。

ご教授ありがとうございます。
上記のURLを参考に、SetWindowLon で、WS_THICKFRAME属性を除去したらマウスをフォームの境界に持っていっても、最小化/最大化/閉じるボタンがクラッシックスタイル表示に変わらなくなりました。

変更した点は以下です。

Public Declare Function GetWindowLong Lib "user32" _
  Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
  
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Const SWP_DRAWFRAME = &H20
Public Const GWL_STYLE = (-16)
Public Const WS_THICKFRAME = &H40000

Wstyle = GetWindowLong(hWnd, GWL_STYLE)
Wstyle = Wstyle And Not WS_THICKFRAME
SetWindowLong hWnd, GWL_STYLE, Wstyle

を追加し、SetWindowPosを

SetWindowPos hWnd, HWND_TOP, 0, 0, 960, 720, SWP_NOMOVE Or SWP_DRAWFRAME

に変更。

ただ、タイトル部分にマウスを移動してタイトルをクリックするとまだ最小化/最大化/閉じるボタンがクラッシックスタイル表示に変わります。
ダブルクリックしたり、クリックしたままドラッグ移動すると消えるのですが、何故そうなるのか不明です。

何か原因が判りましたらご教授お願いいたします。
・ツリー全体表示

【13230】Re:画面リサイズを不可にするとタイトル...
回答  hatena  - 18/2/10(土) 17:54 -

引用なし
パスワード
   動作検証できるように宣言部も含めて、実際に動作するコードを提示してもらえませんか。
あと、OSのバージョンも提示してください。

下記の2つの方法で実験してみましたが、どちらも症状は再現できませんでした。
(Windows10, Access2016)

Excel VBA を学ぶなら moug モーグ | 即効テクニック | Access本体のボタンやシステムメニューを無効化する
www.moug.net/tech/acvba/0010003.html

Accessウィンドウを表示しない方法 Access2007以降版 - hatena chips
hatenachips.blog.fc2.com/blog-entry-389.html


なお、RemoveMenu や DeleteMenu でリサイズを無効にした場合、マウスをフォームの境界に持っていくと、リサイズ可能カーソルに変化するのに、リサイズできないという矛盾した状態になりますので、SetWindowLon で、WS_THICKFRAME属性を除去する方法の方が私は好みです。
・ツリー全体表示

【13229】画面リサイズを不可にするとタイトル上の...
質問  バンブー  - 18/2/9(金) 18:18 -

引用なし
パスワード
   顧客の要望でAccess2010,2013,2016のいずれかが入っている
パソコンで動作できるようにするために、
Access2010でアプリケーションを作成しているのですが、
以下のコードで画面のリサイズを不可にすると、
Access2013、Access2016で実行した時に画面のタイトル上に
ある最小化/最大化/閉じるボタンが、マウスカーソルを
画面の縁に移動した時にクラッシックスタイルのボタン表示に
変わってしまいます。

--------------------------------
Dim hWnd As Long

hWnd = Application.hWndAccessApp
SetWindowPos hWnd, HWND_TOP, 0, 0, 960, 720, SWP_NOMOVE
hWnd = GetSystemMenu(hWnd, 0)
RemoveMenu hWnd, SC_SIZE, MF_BYCOMMAND
--------------------------------

原因と対処方法判りますでしょうか?
ご教授をお願いいたします。
・ツリー全体表示

【13228】Re:サブフォームで選択した社員をメイン...
お礼  白くま  - 18/1/23(火) 19:33 -

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

分割フォームというのがあるのですが、これがピッタリです。

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

【13227】Re:サブフォームで選択した社員をメイン...
回答  hatena  - 18/1/21(日) 16:12 -

引用なし
パスワード
   >Docmd.OpenForm "メインフォーム名",,,,,,[Forms]![メインフォーム名]![サブフォーム名].[Form]!社員コード

下記のコードでどうだろう。

Parent.Filter "社員コード='" & Me.社員コード & "'"
Parent.FilterOn = True

イベントは、社員名のクリック時よりレコード移動時の方がいいように思います。


サブフォームは一対多の関係のデータを表示するためのものなので、
今回のような場合は、不具合があるかも(未検証)。

単票と一覧を同時に表示したいのなら、分割フォームでは駄目でしょうか。
・ツリー全体表示

【13226】サブフォームで選択した社員をメイン画面...
質問  白くま  - 18/1/20(土) 11:17 -

引用なし
パスワード
   社員名一覧をサブフォームで表示し、その中の一人を選ぶとメインの画面にその社員の詳細が表示されるようにしたいです。
未だ初心者なのでよくわからないのですが、サブフォームの社員名をクリックで以下の様に記述しましたが上手くいきません。

Docmd.OpenForm "メインフォーム名",,,,,,[Forms]![メインフォーム名]![サブフォーム名].[Form]!社員コード

どの様にしたらよろしいでしょうか。
ご教授をお願いいたします。
・ツリー全体表示

【13225】Re:SubFprmのRecordSourceについて
回答  hatena  - 17/12/28(木) 12:18 -

引用なし
パスワード
   >フォームのレコードソースはテーブル、クエリ、SQL文となっていますが

そのとおりです。テーブル名、クエリ名、SQL文 を文字列として設定できます。
ヘルプにもそのように記述されてますね。

>例えば一般的な売上伝票の様な表題部とその明細SubFormを設定した場合に
>SubFormに表示するデータを
>  SQL = "SELECT 明細.* from 明細 where 明細.NO = '" & CHK & "'"
>  WRK.Open SQL, CON, adOpenStatic, adLockPessimistic
>  
>  Me.TestSub.Form.RecordSource = SQL  で明細表示する
>  Me.TestSub.Form.ReccodSource = "WRK" で明細表示しない
>となります、原因は?  

レコードソースに、"WRK"を設定しても、そのような名前のテーブルまたはクエリがなければ何も表示されません。
レコードセット変数を文字列として設定できるとはどこにも書いてありません。

レコードセットをフォームのソースとする場合は、Recordsetプロパティを使ってください。

Form.Recordset プロパティ (Access)
ht tps://msdn.microsoft.com/ja-jp/vba/access-vba/articles/form-recordset-property-access?f=255&MSPPError=-2147217396

ただ、フォームのフィルター、並べ替えが使えないなど制限がありますので、特殊な事情がない限りメリットはありません。
・ツリー全体表示

【13224】SubFprmのRecordSourceについて
質問    - 17/12/28(木) 11:58 -

引用なし
パスワード
   フォームのレコードソースはテーブル、クエリ、SQL文となっていますが
例えば一般的な売上伝票の様な表題部とその明細SubFormを設定した場合に
SubFormに表示するデータを
  SQL = "SELECT 明細.* from 明細 where 明細.NO = '" & CHK & "'"
  WRK.Open SQL, CON, adOpenStatic, adLockPessimistic
  
  Me.TestSub.Form.RecordSource = SQL  で明細表示する
  Me.TestSub.Form.ReccodSource = "WRK" で明細表示しない
となります、原因は?  
ちなみにWRKには該当データがセットされているのは確認しています。
また、明細は明細データ用のテーブル、CHKは表題部の親番としています。
・ツリー全体表示

【13223】Re:Format関数について
お礼  たけお E-MAIL  - 17/12/1(金) 23:26 -

引用なし
パスワード
   お恥ずかしい限りです。いただいたご教示で目からウロコです。
選択クエリのフイールドに「桁数揃え:Format([コード],"000000")」と設定して満足な結果が得られた過程までは良かったのですが、その後が間違っていました。
単に更新クエリに変換して実行したからです。
正しくはフイールド名を「コード」に変更し、「レコードの更新」欄に「Format([コード]"000000")」と記入べきを怠っていました。
本当に恥ずかしい限りで、自分の疎かさに愕然としています。
貴重なご教示に深くお礼申し上げます。ありがとうございました。
・ツリー全体表示

【13222】Re:Format関数について
発言  亀マスター  - 17/12/1(金) 22:09 -

引用なし
パスワード
   具体的な更新クエリはどのようなものでしょうか。そこに問題があるような気がします。
なお、Format関数は戻り値がString型(文字列)です。そのあたりが影響しているのではないでしょうか。
・ツリー全体表示

【13221】Format関数について
質問  たけお E-MAIL  - 17/11/30(木) 14:50 -

引用なし
パスワード
   Excelデータをインポートしたところ、「顧客コード」フイールドは「321, 3245, 11113」のようにテキスト型の数値が入力されていて、しかもそれらの桁数はバラバラです。
前に0を付けて、すべて6桁表示にするよう、選択クエリのフイールド上に「桁数揃え:Format([顧客コード],"000000")」と設定して実行すると「000321,003245,011113」と6桁表示され、満足な結果が得られます。

この結果をテーブルに反映させるべしで、更新クエリに変更して実行すると「引数が無効です」のエラメッセージがでます。
ならば追加クエリではどうかとトライしても同じエラメッセージがでます。

何故こんなことになるのか理解できません。
Format関数は選択クエリにしか使用できないのでしょうか。ご教示ください。
・ツリー全体表示

【13220】差分追加と更新(フィールドごと)
質問  Faber_Sid  - 17/11/18(土) 10:30 -

引用なし
パスワード
   IDとフィールドAは一意
フィールドAの同じものは後のデータを優先するが
空白だったフィールドは上書きしないこんなこと
どうやったらできますか?
(下のテーブルは英単語をランダムに
 選んで打ちました。特に意味はありません。
 実際の表はもっと実用的。)
------------------------------------------テーブル1(入力)
ID フィールドA フィールドB フィールドC
1   sample   example   Whoops
2  validate    won't   seconds
3   example    like   dislike
------------------------------------------テーブル2(入力)
ID フィールドA フィールドB フィールドC
1   sample   example   Whoops
2  validate    want   Minute
3    takes    like   didn't
4   example          this
------------------------------------------テーブル3(出力)
ID フィールドA フィールドB フィールドC
1   sample   example   Whoops
2  validate    want   Minute
3    takes    like   didn't
4   example    like    this
・ツリー全体表示

【13219】Re:クエリのOR条件設定で件数が多い場合...
お礼  たけお E-MAIL  - 17/11/13(月) 8:54 -

引用なし
パスワード
   >早速のご回答をいただきありがとうございます。
>上手くいきました。
>もうこれでコピペをする時のうんざりがなくなり助かります。
>ありがとうございました。
・ツリー全体表示

【13218】Re:クエリのOR条件設定で件数が多い場合...
回答  たけお E-MAIL  - 17/11/13(月) 8:52 -

引用なし
パスワード
   ▼hatena さん:
>>1つ目のクエリは「商品コード」「お客様」の2つのフイールドをもったクエリで「商品コード」の抽出条件欄に「特定の商品コード」を入力して実行し「お客様」を抽出しています。
>
>このクエリの名前を「クエリ1」とします。
>
>>2つ目のクエリは「商品コード」「お客様」「品名」「数量」の4つのフイールドをもったクエリで「お客様」の抽出条件欄に、クエリ1で抽出したお客様名をOR条件でコピー貼り付けしています。
>>件数が少なければ問題ないのですが何分件数が50件、60件と多いので困っています。
>
>このクエリに上記の「クエリ1」を追加します。
>クエリに元からあるテーブルの「お客様」フィールドをドラッグして、クエリ1の「お客様」フィールドにドロップします。
>2つのフィールドが結合線で結ばれます。
>
>抽出条件欄には何も入力しません。
>
>これで、ご希望の結果になります。


早速のご回答をいただきありがとうございます。
上手くいきました。
もうこれでコピペをする時のうんざりがなくなり助かります。
ありがとうございました。
・ツリー全体表示

【13217】Re:クエリのOR条件設定で件数が多い場合...
回答  hatena  - 17/11/12(日) 22:49 -

引用なし
パスワード
   >1つ目のクエリは「商品コード」「お客様」の2つのフイールドをもったクエリで「商品コード」の抽出条件欄に「特定の商品コード」を入力して実行し「お客様」を抽出しています。

このクエリの名前を「クエリ1」とします。

>2つ目のクエリは「商品コード」「お客様」「品名」「数量」の4つのフイールドをもったクエリで「お客様」の抽出条件欄に、クエリ1で抽出したお客様名をOR条件でコピー貼り付けしています。
>件数が少なければ問題ないのですが何分件数が50件、60件と多いので困っています。

このクエリに上記の「クエリ1」を追加します。
クエリに元からあるテーブルの「お客様」フィールドをドラッグして、クエリ1の「お客様」フィールドにドロップします。
2つのフィールドが結合線で結ばれます。

抽出条件欄には何も入力しません。

これで、ご希望の結果になります。
・ツリー全体表示

【13216】クエリのOR条件設定で件数が多い場合の問...
質問  たけお E-MAIL  - 17/11/12(日) 17:26 -

引用なし
パスワード
   ある特定の商品コードの品を購入してくれたお客様を検索し、
そのお客様は他にどのような商品を購入してくれているのかのデータを抽出するために
クエリを2つ作成して対応しています。
1つ目のクエリは「商品コード」「お客様」の2つのフイールドをもったクエリで「商品コード」の抽出条件欄に「特定の商品コード」を入力して実行し「お客様」を抽出しています。
2つ目のクエリは「商品コード」「お客様」「品名」「数量」の4つのフイールドをもったクエリで「お客様」の抽出条件欄に、クエリ1で抽出したお客様名をOR条件でコピー貼り付けしています。
件数が少なければ問題ないのですが何分件数が50件、60件と多いので困っています。
何かうまい方法はないでしょうかと思い投稿させていただきました。
・ツリー全体表示

【13215】Re:処理中の表示ができないか?
お礼  みちのく一人旅 E-MAIL  - 17/11/1(水) 1:30 -

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

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

【13214】Re:処理中の表示ができないか?
回答  亀マスター  - 17/10/31(火) 18:28 -

引用なし
パスワード
   「処理中」と書いたフォームを用意して、それを呼び出すことで実現できます。

まず、「処理中」というテキストラベルだけ配置し、ポップアップ設定を
「はい」にしたフォーム(フォームやテキストのサイズは適当にして下さい)
を用意します。

そして、以下のような流れで呼び出せばいいでしょう。

Sub test()

DoCmd.OpenForm "処理中フォーム名"
Forms("処理中フォーム名").Repaint

'ここに実際の処理を入れる

DoCmd.Close acForm, "処理中フォーム名"

End Sub

Forms("処理中フォーム名").Repaintは、これを入れておかないと
「処理中」というテキストラベルが表示されないためです。
・ツリー全体表示

1 / 500 ページ 前へ→
ページ:  ┃  記事番号:
996371
(SS)C-BOARD v3.8 is Free