2016-05-17 4 views
0

ユーザフォームのユーザからの入力に応じて、定義された基準に基づいて計算カラムを自動的に作成するコードを構築しています。しかし、フィールド式で構文エラーが発生しました。コードは以下のとおりです。vbaと変数を使用して計算カラムを追加する

Option Compare Database 

Private Sub Calculate_Click() 
    Dim db As Database 
    Dim rs As Recordset 
    Dim x As Integer 
    Dim Months As Integer 
    Dim WPmonthly As String ' field name for monthly written premium 
    Dim runningDate As Date 
    Dim useDateLower As Date 
    Dim useDateUpper As Date 
    Dim tdf As dao.TableDef 
    Dim fld As dao.Field2 


    Months = Me.YearsBack * 12 + Month(Me.ValDate) 

    If Me.Period = "monthly" Then 

    Set db = CurrentDb 
    Set tdf = db.TableDefs("tblEPdata") 

    For x = 1 To Months 

     runningDate = Format(DateAdd("m", -x + 1, Me.ValDate), "mm yyyy") 
     useDateLower = runningDate 
     useDateUpper = Format(DateAdd("m", -x + 2, Me.ValDate), "mm yyyy") 
     WPmonthly = "WP M" & Month(runningDate) & " " & Year(runningDate) 
     Set fld = tdf.CreateField(UPRmonthly) 
     fld.Expression = "iif([issuedate]<#" & useDateUpper & "#,iif([issuedate]>=#" & useDateLower & "#,[grossPremium]))" ' output gross premium if issue date is between usedateupper and usedatelower, otherwise 0 
     tdf.Fields.Append fld 
    Next 

    MsgBox "added" 

    End If 

End Sub 

答えて

0

あなたはiifのための十分な引数を持っていない - それは三つの引数(hereを参照)かかり:

IIf (expr , truepart , falsepart) 

は、コード内のコメントから判断すると、あなたが欲しいのいずれか:

"iif([issuedate]<#" & useDateUpper & "#,iif([issuedate]>=#" & useDateLower & "#,[grossPremium],0),0)" 

またはこれを簡略化することができます。 〜へ:

"iif([issuedate]<#" & useDateUpper & "# and [issuedate]>=#" & useDateLower & "#,[grossPremium],0)" 
+0

いいえ、まだ動作しません。同じエラーが発生しました:実行時エラー3125 "は無効な文字または句読点が含まれていないこと、および長すぎないことを確認してください。tdf.fields.append fldにエラーがあります。 – zkhan

0

それがわかりました。変数wpmonthlyは、uprmonthlyが使用されていた場所で使用されるはずです。 uprmonthly定義されていませんでした。

乾杯

関連する問題