目前在Access VBA中,我在Access中有一个表“VolatilityOutput”的过滤器,如下所示:
Dim CurveID As Long
CurveID = 15
Dim strSQL As String
strSQL = "SELECT * FROM VolatilityOutput WHERE CurveID=" & CurveID & " AND MaxOfMarkAsofDate=#" & MaxOfMarkAsofDate & "# ORDER BY MaxOfMarkasOfDate, MaturityDate"
CurveID是表VolatilityOutput中的一个字段。现在CurveID = 15是硬编码的。每个曲线ID对应于表格中另一个字段CurveShortName中的标题。
因此CurveID = 15对应于CurveShortName = CAD Sovereign,CurveID = 124对应于CurveShortName = CAD Swap New,而曲线ID = 134对应于CurveShortName = CAD3M USD3M BASIS。
我想改变它,而不是让CurveID = 15硬编码,这样用户就可以从下拉菜单中选择一个CurveShortName,它将相关的CurveID作为过滤器应用。这在Access中是否可行?
编辑更新:完整代码发布在下方:
Public Sub CalculateVol()
Dim vol As Double
Dim rs As Recordset
Dim rs2 As Recordset
Dim iRow As Long, iField As Long
Dim strSQL As String
Dim CurveID As Long
Dim MarkRunID As Long
Dim MaxOfMarkAsofDate As Date
Dim userdate As String
DoCmd.RunSQL "DELETE * FROM HolderTable"
'Clears out the old array from the holder table.
CurveID = 15
Dim I As Integer
Dim x As Date
userdate = InputBox("Please Enter the Date (mm/dd/yyyy)")
x = userdate
Dim BucketTermAmt As Long
BucketTermAmt = InputBox("Please Enter the Term Amount")
For I = 0 To 150
MaxOfMarkAsofDate = x - I
strSQL = "SELECT * FROM VolatilityOutput WHERE CurveID=" & CurveID & " AND MaxOfMarkAsofDate=#" & MaxOfMarkAsofDate & "# ORDER BY MaxOfMarkasOfDate, MaturityDate"
Set rs = CurrentDb.OpenRecordset(strSQL, Type:=dbOpenDynaset, Options:=dbSeeChanges)
Set rs2 = CurrentDb.OpenRecordset("HolderTable")
If rs.RecordCount <> 0 Then
rs.MoveFirst
rs.MoveLast
Dim BucketTermUnit As String
Dim BucketDate As Date
Dim MarkAsOfDate As Date
Dim InterpRate As Double
Dim b As String
b = BucketTermAmt
BucketTermUnit = "m"
BucketDate = DateAdd(BucketTermUnit, b, MaxOfMarkAsofDate)
InterpRate = CurveInterpolateRecordset(rs, BucketDate)
rs2.AddNew
rs2("BucketDate") = BucketDate
rs2("InterpRate") = InterpRate
rs2.Update
End If
Next I
vol = EWMA(0.94)
Debug.Print vol
End Sub
答案 0 :(得分:1)
你需要做一些事情。
1)在表单中添加一个新的ComboBox。称之为cboCurve。设置列数= 2,列宽为&#34; 0; 2&#34; (不带引号)和你的绑定列= 1。
2)添加一个名为tblCurve的新表。在此表中,您将有2个字段; CurveID和CurveShortName。
3)在Form_Load上,添加如下内容:
strSQL = "SELECT * FROM tblCurve"
me.cboCurve.RecordSource = strSQL
(或者,您可以将tblCurve设置为控件本身的RecordSource权限)
4)将您的值添加到表格中。
5)将CalculateVol子中的strSQL更改为:
strSQL = "SELECT * FROM VolatilityOutput WHERE CurveID=" & Me.cboCurve.Value & " AND MaxOfMarkAsofDate=#" & MaxOfMarkAsofDate & "# ORDER BY MaxOfMarkasOfDate, MaturityDate"
现在,当您加载页面时,您的下拉菜单应填充tblCurve表中的所有记录。您将看到的只是名称而不是ID,因为ID字段是第一个字段,但您已将第一个字段的宽度设置为0(使其不可见)。但是,由于您已将组合绑定到第1列,因此它将设置为值。然后使用Me.cboCurve.Value引用组合中的值。