前提・実現したいこと
ACCESS、VBA初心者、teratail新参者です。何か不手際あったら指摘してください。
使用しているACCESSは2019の64ビットです。
現在レポートを作成しており、250個ほどのクエリの既成フィールドに対して
プロパティを一括変換したいです。
各フィールドの参照元のテーブルでの設定は、全て(IDのオートナンバー型を除くと)
データ型:数値型
フィールドサイズ:倍精度少数点型
書式:標準 です。
以下が見よう見まねで書いたコードです。
VBA
1 2Dim db As DAO.Database 3Dim rs As DAO.Recordset 4Dim fld As DAO.Field 5Dim prp As DAO.Properties 6 7Set db = CurrentDb 8Set rs = db.OpenRecordset("クエリ1") 9 10'各フィールドプロパティ書き換え 11For Each fld In rs.Fields 12 With fld 13 ’データ型が数値であれば 14 If .Type = dbInteger Then 15 '書式を「標準」、小数点を第3位に設定 16 Set prp = .CreateProperty("Format", dbDecimal, "Standard") 17 Set prp = .CreateProperty("DcimalPlaces", dbDecimal, 3) 18 .Properties.Append prp 19 End If 20 End With 21Next 22
発生している問題・エラーメッセージ
エラーメッセージ
「データ型が変換できない」と怒られます。
そもそもこのコードはあっていますでしょうか。
これを解消するにはどうすればよいでしょうか。
該当のソースコード
下記2行目です。
VBA
1If .Type = dbDouble Then 2 Set prp = .CreateProperty("Format", dbDecimal, "Standard") 3 Set prp = .CreateProperty("DcimalPlaces", dbDecimal, 3) 4EndIf
試したこと
CreatePropertyの2番目の引数(データ型)を間違えていると思い、以下のものはすべて試しましたが、うまくいきませんでした。
dbBigInt
dbBinary
dbBoolean
dbByte
dbChar
dbCurrency
dbDate
dbDecimal
dbDouble
dbFloat
dbGUID
dbInteger
dbLong
dbLongBinary
dbMemo
dbNumeric
dbSingle
dbText
dbTime
dbTimeStamp
dbVarBinary
補足情報(FW/ツールのバージョンなど)
if文にある 「If .Type = dbInteger Then」 ですが、
dbLong,dbDoubleでも入りました。
エラーは起きませんでしたが、書いた本人がなぜなのか全く理解できていません。。。(蛇足かもしれませんが関係あるかもしれません。)
知恵をお貸しください。よろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー