teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

修正

2019/10/02 12:59

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -11,7 +11,7 @@
11
11
   
12
12
  1. 書式プロパティは初期状態では存在していませんか、一度設定した後は存在しています。存在していない状態で設定するとエラーになりますので、その場合は、生成して追加する、という処理にします。
13
13
   
14
- 1. 小数点以下表示桁数プロパティは初期状態で存在しているので、そのまま設定できます。
14
+ 1.~~ 演算フィールドの小数点以下表示桁数プロパティは初期状態で存在しているので、そのまま設定できます。~~演算フィールドの小数点以下表示桁数プロパティは初期状態では存在していないので、同様にエラーチェックしてエラーの場合は生成して追加。
15
15
 
16
16
  上記の点に留意してコーディングすると下記のようになります。
17
17
 

3

修正

2019/10/02 12:59

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  プロパティ設定はQueryDef(クエリ定義)に対して実行します。テーフルならTableDef。
6
6
   
7
7
  1. プロパティには、初期状態で存在しているものと、設定したときに生成されるものがあります。
8
- 書式プロパティは初期状態では存在しません。小数点以下表示桁数は存在しています。
8
+ 書式プロパティは初期状態では存在しません。小数点以下表示桁数は存在しています(ただし演算フィールドの場合は初期状態では存在しない)
9
9
   
10
10
  1. 存在しているプロパティはそのまま設定できますが、存在していないプロパティは生成(CreateProperty)してから追加します。一度、追加するとその後は必要ありません。存在しているのに追加するとエラーになります。
11
11
   

2

コード修正

2019/10/02 12:55

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -24,8 +24,6 @@
24
24
  End sub
25
25
 
26
26
  Public Sub クエリプロパティ変更(qd As DAO.QueryDef)
27
- Dim qd As DAO.QueryDef
28
- Set qd = CurrentDb.QueryDefs(クエリ名)
29
27
 
30
28
  Dim Fld As DAO.Field
31
29
  For Each Fld In qd.Fields
@@ -34,24 +32,33 @@
34
32
  If .Type = dbDouble Then
35
33
  On Error Resume Next
36
34
  '書式プロパティを標準に設定
35
+ Dim prp As DAO.Property
37
36
  Fld.Properties("Format").Value = "Standard"
38
37
  '書式プロパティが存在しないとエラーになる
39
38
  If Err <> 0 Then
40
39
  '書式プロパティ生成してフィールドに追加する
41
- Dim prp As DAO.Property
42
40
  '書式プロパティのプロパティ値はテキスト型(dbText)
43
41
  Set prp = Fld.CreateProperty("Format", dbText, "Standard")
44
42
  Fld.Properties.Append prp
45
43
  Set prp = Nothing
46
44
  Err.Clear
47
45
  End If
48
- On Error GoTo 0
49
46
  '小数点以下表示桁数を3に設定
50
47
  Fld.Properties("DecimalPlaces").Value = 3
48
+ If Err <> 0 Then
49
+ '書式プロパティ生成してフィールドに追加する
50
+ '書式プロパティのプロパティ値はテキスト型(dbText)
51
+ Set prp = Fld.CreateProperty("DecimalPlaces", dbByte, 3)
52
+ Fld.Properties.Append prp
53
+ Set prp = Nothing
54
+ Err.Clear
55
+ End If
56
+ On Error GoTo 0
51
57
  End If
52
58
  End With
53
59
  Next
54
60
  End Sub
61
+
55
62
  ```
56
63
 
57
64
  処理するクエリが多数あるとのことなので、プロパティ設定は関数にしました。

1

補足追記

2019/09/30 02:08

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  1. プロパティには、初期状態で存在しているものと、設定したときに生成されるものがあります。
8
8
  書式プロパティは初期状態では存在しません。小数点以下表示桁数は存在しています。
9
9
   
10
- 1. 存在しているプロパティはそのまま設定できます、存在していないプロパティは生成(CreateProperty)してから追加します。一度、追加するとその後は必要ありません。存在しているのに追加するとエラーになります。
10
+ 1. 存在しているプロパティはそのまま設定できます、存在していないプロパティは生成(CreateProperty)してから追加します。一度、追加するとその後は必要ありません。存在しているのに追加するとエラーになります。
11
11
   
12
12
  1. 書式プロパティは初期状態では存在していませんか、一度設定した後は存在しています。存在していない状態で設定するとエラーになりますので、その場合は、生成して追加する、という処理にします。
13
13
   
@@ -56,4 +56,10 @@
56
56
 
57
57
  処理するクエリが多数あるとのことなので、プロパティ設定は関数にしました。
58
58
  引数を変更するだけで処理するクエリを指定できます。
59
- 一つのクエリの処理に成功したら、あとは、`For Each qd In CurrentDb.QueryDefs` でループ処理すればすべてのクエリのプロパティを一気に変更できます。
59
+ 一つのクエリの処理に成功したら、あとは、`For Each qd In CurrentDb.QueryDefs` でループ処理すればすべてのクエリのプロパティを一気に変更できます。
60
+
61
+
62
+ 補足
63
+ ---
64
+ クエリでプロパティを変更しても、それをレコードソースとする作成済みのレポートには反映されない場合があります。プロパティ変更後に作成したレポートなら、反映されますが。
65
+ 今後、プロパティ変更が発生する可能性があるなら、レポートに対してプロパティ変更する処理を作成して、それを実行したほうが確実です。