Access VBA質問箱 IV

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

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


1 / 500 ページ 前へ→

【13244】Re:2000→2016へ
お礼  ゆまゆま  - 18/3/28(水) 8:33 -

引用なし
パスワード
   ▼hatena さん:
>▼ゆまゆま さん:
>>1.アクセス2000 mdbをとりあえずアクセス2016 mdbで使用する。(問題なければ)
>>2.↑で使用中のアクセス2016 mdbを徐々にアクセス2016 accdbに変換していく。
>>
>>の方法でいこうと思います。(2007や2013は使用しない)
>>でいいのでしょうか。
>
>いいんじゃないかな。
>問題がでたら、その時点で対応を検討でいいかと。

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

【13243】Re:2000→2016へ
回答  hatena  - 18/3/27(火) 16:21 -

引用なし
パスワード
   ▼ゆまゆま さん:
>1.アクセス2000 mdbをとりあえずアクセス2016 mdbで使用する。(問題なければ)
>2.↑で使用中のアクセス2016 mdbを徐々にアクセス2016 accdbに変換していく。
>
>の方法でいこうと思います。(2007や2013は使用しない)
>でいいのでしょうか。

いいんじゃないかな。
問題がでたら、その時点で対応を検討でいいかと。
・ツリー全体表示

【13242】Re:2000→2016へ
質問  ゆまゆま  - 18/3/27(火) 9:11 -

引用なし
パスワード
   ▼hatena さん:
>あくまで自分の経験上だけですが、
>MDBをAccess2016で問題なく使用できれば、
>Accdbに変換しても問題になることはないと思います。
>
>Accdbの方が新機能も追加されているので、そちらて運用すればいいのでは。

ありがとうございます。
お忙しい所、可能ならば、もう一点だけ質問なのですが、
1.アクセス2000 mdbをとりあえずアクセス2016 mdbで使用する。(問題なければ)
2.↑で使用中のアクセス2016 mdbを徐々にアクセス2016 accdbに変換していく。

の方法でいこうと思います。(2007や2013は使用しない)
でいいのでしょうか。
・ツリー全体表示

【13241】Re:2000→2016へ
回答  hatena  - 18/3/26(月) 10:14 -

引用なし
パスワード
   あくまで自分の経験上だけですが、
MDBをAccess2016で問題なく使用できれば、
Accdbに変換しても問題になることはないと思います。

Accdbの方が新機能も追加されているので、そちらて運用すればいいのでは。
・ツリー全体表示

【13240】2000→2016へ
質問  ゆまゆま  - 18/3/23(金) 15:00 -

引用なし
パスワード
   お世話になります。初心者です。
元々アクセス2000?か2002?で作成した Microsoft Office Access アプリケーション (.mdb)を現在アクセス2003で使用しています。(2011年頃?このPCを使用始めた時、ワード、エクセルは2007だが、アクセスは使いにくかったので2003を入れてました)
 
Office 2007のサポート終了に伴い(もう過ぎてますが(苦笑))Office 2016に入れ替えることになりました。
アクセスに不安があったので、システム会社にお願いし、アクセス2007とアクセス2013のソフトをテストで使用させてもらい、UP出来れば、2016にもスムーズに移行出来ると思い「accdb」に変換して準備していました。
 
先日アクセス2016が入り、試しにそのままダイレクトに、アクセス2000?か2002?で作成した Microsoft Office Access アプリケーション (mdb)を操作しましたら、開くことが出来、使用可能でした。ネットで調べましたら、アクセス2016は(.mdb)を使用することが出来るようですが、そのまま使用してよいのか、又、「accdb」にUP後のを使用するほうが良いのか、よくわかりません。
現在日常的にデータ更新しているのは2000、2002なので問題無ければ一気に2016へ行きたい所なのですが、どうでしょうか?
・ツリー全体表示

【13239】Re:フォームに新規抽出レコードを作成し...
回答  hatena  - 18/3/23(金) 13:49 -

引用なし
パスワード
   ▼花月 さん:

>帳票フォームやデータシートを使用し、各ボックス(商品名、規格、発注数)を非連結の状態で1行目は抽出することができるのですが、その下に新規のレコードを表示させることが出来ません。
>テーブルに影響を与えず、抽出だけを何行も行えるようにするにはどうしたらいいでしょうか。

非連結では無理なので、各テキストボックスは連結にします。
フォームは帳票フォームかデータシートビューで。
フォームの
「更新の許可」と「削除の許可」を「いいえ」、「追加の許可」を「はい」に設定すれば、抽出されたレコードは更新や削除はできず、新規レコードのみ入力できるようになります。
・ツリー全体表示

【13238】フォームに新規抽出レコードを作成したい...
質問  花月  - 18/3/21(水) 14:27 -

引用なし
パスワード
   Access初心者です。
Access2010を使用し、テーブルに「フィールド1」➡商品名、「フィールド2」➡規格、「フィールド3」➡発注数を作成しています。
帳票フォームやデータシートを使用し、各ボックス(商品名、規格、発注数)を非連結の状態で1行目は抽出することができるのですが、その下に新規のレコードを表示させることが出来ません。
テーブルに影響を与えず、抽出だけを何行も行えるようにするにはどうしたらいいでしょうか。
説明下手で申し訳ありませんが、分かる方がいましたらよろしくお願いします。
・ツリー全体表示

【13237】Re:高速化のアドバイスをお願いします。
発言  りった  - 18/3/19(月) 10:43 -

引用なし
パスワード
   回答ありがとうございます。
(まだ全然理解しておりませんが、一旦返信まで。)
・ツリー全体表示

【13236】Re:高速化のアドバイスをお願いします。
発言  亀マスター  - 18/3/15(木) 22:05 -

引用なし
パスワード
   根本原因がどこにあるのかわからないので明確な回答はできないのですが、
参考になるかもというところでしたら。

接続が遅い場合
ht tp://q.hatena.ne.jp/1377926475

SQLの記述が問題の場合
(ここの「クエリパフォーマンスの定石を試すシリーズを参照)
ht tp://tsware.jp/labo/

エクセルへの転記に時間がかかる場合
ht tp://officetanaka.net/excel/vba/speed/s11.htm

ただし、ボトルネックとなるのがサーバーとの接続速度であれば、
これらを改善してもあまり効果は感じられないかもしれません。
・ツリー全体表示

【13235】Re:高速化のアドバイスをお願いします。
発言  りった  - 18/3/15(木) 17:53 -

引用なし
パスワード
   補足です。
EXCEL VBAから操作しています。
別拠点と共有のサーバーは、他の操作(ファイルコピー)も遅いです。
DBの定義等を変更することは可能です。
(DBとEXCELセットで動作が悪くならなければ、なんでも修正可能)

サーバーが重いこと自体は僕の守備範囲外なので、可能な範囲で速くしたいです。
・ツリー全体表示

【13234】高速化のアドバイスをお願いします。
質問  りった  - 18/3/15(木) 17:14 -

引用なし
パスワード
   ACCESSファイル(accdb)を別拠点と共有のサーバーに置いたらめちゃくちゃ遅くなりました。
ADODB.RecordsetのOpenに、2.464844秒かかります。
体感倍以上です。
キーを指定しして全属性(160個)を読みだすSQL文です。

高速化のためのアドバイスをお願いします。

・ACCESS以外のDBMSを使うのはハードルが高いです。
・ツリー全体表示

【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

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

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