谢谢老师,在老师的指点下,基本成功实现了,剩下一个小问题
原来在PrepareEdit的代码(此代码执行时需要当前列是允许修改的):
If Vars("执行事件") = 0 Then '从外部表mdb读取数据的时候,Vars("执行事件") = 1,此时不执行所有代码的内容
Return '返回
End If
Dim frm As WinForm.Form '定义一个窗体'
frm = Forms.ActiveForm '活动窗口的名字表示方法就是:frm.Name
If frm IsNot Nothing Then
If frm.Name <> "在职教职工窗体" Then '设置只有在这个窗体中才起作用
Return '返回
End If
Else
Return '返回
End If
If e.IsFocusCell Then '如果是焦点所在单元格
If e.Col.Name <> "姓名" And e.Col.Name <> "身份证号" And e.Col.Name <> "台帐年月" Then '如果正在编辑的是[..]列
Dim dr As Row = e.Row
With DataTables("教职工历月信息")
.DataRows.Clear()
End With
'()---调数据库中的当月数据
Dim mg As New Merger
mg.SourcePath = ProjectPath &"\Data\信息数据库.mdb" '指定数据文件
mg.Password = "zhang"
mg.SourceTableName = "教职工信息表"
mg.DataTableName = "教职工历月信息"
mg.Filter = "单位代码 = " & myDWDM & " And 是否在职 = '在职' and 身份证号 = '"& dr("身份证号") &"' "
mg.FieldMaps.Add("台帐年月","台帐年月")
mg.FieldMaps.Add("身份证号","身份证号")
mg.FieldMaps.Add("姓名","姓名")
mg.FieldMaps.Add( e.Col.Name ,"信息列")
mg.Merge()
'-- 定位上月为当前行
Tables("教职工历月信息").sort = "台帐年月,姓名"
With Tables("教职工历月信息")
.Position = .Rows.Count - 1
End With
End If
End If
现改为:
在AfterSelChange中加了代码,写法有了一点变化,使用效果很好,不要考虑表中的列是否允许修改
If Vars("执行事件") = 0 Then '从外部表mdb读取数据的时候,Vars("执行事件") = 1,此时不执行所有代码的内容
Return '返回
End If
Dim frm As WinForm.Form '定义一个窗体'
frm = Forms.ActiveForm '活动窗口的名字表示方法就是:frm.Name
If frm IsNot Nothing Then
If frm.Name <> "在职教职工窗体" Then '设置只有在这个窗体中才起作用
Return '返回
End If
Else
Return '返回
End If
Dim c As Col = e.Table.Cols(e.NewRange.ColSel) 'C 为当前行
Dim dr As Row = e.Table.Rows(e.NewRange.rowSel) 'dr 为当前列
If C.Name <> "姓名" And C.Name <> "身份证号" And C.Name <> "台帐年月" Then '如果正在编辑的是[..]列
With DataTables("教职工历月信息")
.DataRows.Clear()
End With
'()---调数据库中的当月数据
Dim mg As New Merger
mg.SourcePath = ProjectPath &"\Data\信息数据库.mdb" '指定数据文件
mg.Password = "zhang"
mg.SourceTableName = "教职工信息表"
mg.DataTableName = "教职工历月信息"
mg.Filter = "单位代码 = " & myDWDM & " And 是否在职 = '在职' and 身份证号 = '"& dr("身份证号") &"' "
mg.FieldMaps.Add("台帐年月","台帐年月")
mg.FieldMaps.Add("身份证号","身份证号")
mg.FieldMaps.Add("姓名","姓名")
mg.FieldMaps.Add( C.Name ,"信息列")
mg.Merge()
With DataTables("教职工历月信息")
.DataCols("信息列").Caption = C.Name
End With
'-- 定位上月为当前行
Tables("教职工历月信息").sort = "台帐年月,姓名"
With Tables("教职工历月信息")
.Position = .Rows.Count - 1
End With
End If
敬请老师指教!其中绿色代码想请教老师,此代码在第一次点击列“A”时成功把“信息列”改成了“A”,再点击列“B”时,应该是由A改为B,但此代码无法执行了。
[此贴子已经被作者于2017/2/3 20:05:10编辑过]