目前,根据专家的一些建议,我尝试以一种形式提供可编辑的交叉表查询,例如用于在平面表的几列中显示值的表格(数据是各个时期的财务数据=每个财务报表项目的FFI_Period = FinStmtItem)。我首先通过从表格中将所需的值检索到表单上的未绑定字段上来对表格进行非规范化(通过recordset.findfirst方法,然后将表格字段中的值分配给未绑定的文本字段),然后将字段保存回去(通过recordset.edit /)。 add方法)以规范化的形式添加到表格中。
一段代码在我的过程中不断重复几次。这是通过对平面表进行非规范化来检索数据的示例(* PrevPerItem * X-是表单上未绑定文本字段的名称):
Set myR = CurrentDb.OpenRecordset("tbl_FFIFinancials")
myR.FindFirst ("[FFI_PERIOD] =" & intFFIPeriod1 & "And [FinStmtItem] = 1")
PrevPerItem1 = myR.Fields("Amount").Value
myR.FindFirst ("[FFI_PERIOD] =" & intFFIPeriod1 & "And [FinStmtItem] = 2")
PrevPerItem2 = myR.Fields("Amount").Value
myR.FindFirst ("[FFI_PERIOD] =" & intFFIPeriod1 & "And [FinStmtItem] = 3")
PrevPerItem3 = myR.Fields("Amount").Value
'.... [similar codes repeats here as well from No 4 throu 16]............
myR.FindFirst ("[FFI_PERIOD] =" & intFFIPeriod1 & "And [FinStmtItem] = 17")
PrevPerItem17 = myR.Fields("Amount").Value
myR.Close
Set myR = Nothing
类似的代码用于编辑和添加方法(放回归一化的数据)
Set myR = CurrentDb.OpenRecordset("tbl_FFIFinancials")
'updating values for the previous period
MsgBox "Updating values into Database for the period - " & intPrevYear & "-Q" & byteSelectQuarter
myR.FindFirst ("[FFI_PERIOD] =" & intFFIPeriod1 & "And [FinStmtItem] = 1")
myR.Edit
myR.Fields("Amount").Value = PrevPerItem1
myR.Update
myR.FindFirst ("[FFI_PERIOD] =" & intFFIPeriod1 & "And [FinStmtItem] = 2")
myR.Edit
myR.Fields("Amount").Value = PrevPerItem2
myR.Update
myR.FindFirst ("[FFI_PERIOD] =" & intFFIPeriod1 & "And [FinStmtItem] = 3")
myR.Edit
myR.Fields("Amount").Value = PrevPerItem3
myR.Update
'....[repeating code for values No 4 though 16]
myR.FindFirst ("[FFI_PERIOD] =" & intFFIPeriod1 & "And [FinStmtItem] = 17")
myR.Edit
myR.Fields("Amount").Value = PrevPerItem17
myR.Update
myR.Close
Set myR = Nothing
我相信有一些方法可以通过使用诸如do while循环或next方法之类的快捷方法来优化代码。因为我只是vba编程的新手,所以我很难理解它的实际操作方式,并且不得不重复执行几次代码行。
更新:我尝试过尝试这一步骤来实现代码的优化,但是它重新调整了我的新自定义函数上的不匹配错误:
Dim myR As DAO.Recordset
Set myR = CurrentDb.OpenRecordset("tbl_FFIFinancials", dbOpenDynaset)
For byteItemNumber = 1 To 17 Step 1
myR.FindFirst "[FFI_PERIOD] =" & intFFIPeriod1 & "And [FinStmtItem] =" & byteItemNumber
Me.MyFieldName(Name).Value = myR.Fields("Amount").Value
Next byteItemNumber
....我的新自定义函数引用当前表单上的文本字段名称。
Function MyFieldName(Name As Field)
Dim strName As String
srtName = "PrevPerItem" & byteItemNumber
Name.Name = strName
End Function
在其他地方找到了解决方案。通常,它指出以下内容:表单上的字段可以称为1。Me.YourTextboxName.Value = myR.Fields(“ Amount”)。Va lue
2. Me(文本框).Value = myR.Fields(“金额”).Value
如果您有一系列文本框,并且要动态分配值(例如,您有17个名为TxtBox1,TxtBox2和TxtBox3 ... TextBox17的文本框),则第二个很有用
for i = 1 to 17 Me("TxtBox" & i).value=myR.Fields("Amount").Value
next i
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句