これについて、もう少し調べてみました。すべての「Per_」フィールドが存在することを確認し、追加する必要がある新しいフィールドを決定するには、レコードセットを開く必要があるようです。次に、レコードセットを閉じて ALTER TABLE ステートメントを実行し、必要な新しいフィールドを作成する必要があります。次に、レコードセットを再度開き、数式の値でフィールドを更新する必要があります。
新しいフィールドを手動で追加するだけであれば、おそらく最初の 2 つの手順を省くことができますが、そうする必要があります。最初の 2 つのステップを省略したい場合は、次のようになります。
Dim db As Database
Dim rec As DAO.Recordset
Dim fld As DAO.Field
Set db = CurrentDb
Set rec = db.OpenRecordset("tblPlayers")
EditTable = "tblPlayers"
For Each fld In rec.Fields
If fld.Name <> "PName" And fld.Name <> "Salary" Then
strFieldName = "Per_" & fld.Name & ""
X = "IIf([" & fld.Name & "] <> 0, Format(([Salary] / [" & fld.Name & "]), '$#,###.##'), 0)"
If FieldExists(EditTable, strFieldName) Then
rec.Edit
rec.Fields(strFieldName).Value = X
rec.Update
Else
End If
End If
Next fld
次に、フィールドが存在するかどうかを確認するには、次の関数が必要です。
Public Function FieldExists(ByVal tableName As String, ByVal fieldName As String) As Boolean
Dim nLen As Long
On Error GoTo Failed
With DBEngine(0)(0).TableDefs(tableName)
.Fields.Refresh
nLen = Len(.Fields(fieldName).Name)
If nFldLen > 0 Then FieldExists = True
End With
Exit Function
Failed:
If Err.Number = 3265 Then Err.Clear ' Error 3265 : Item not found in this collection.
FieldExists = False
End Function