Foxtable(狐表)用户栏目专家坐堂 → 如何在点击禁止修改的列时执行PrepareEdit


  共有6473人关注过本帖树形打印复制链接

主题:如何在点击禁止修改的列时执行PrepareEdit

帅哥,在线噢!
有点蓝
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105470 积分:536335 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/2/3 22:51:00 [只看该作者]

提示什么错误?


 回到顶部
帅哥哟,离线,有人找我吗?
zhangchi96
  12楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:542 积分:4919 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2017/2/4 13:44:00 [只看该作者]

经过调试,发现,运行Tables("教职工信息表").Filter = "",就提示是事件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

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/4 14:09:00 [只看该作者]

前面加上判断

 

If e.NewRange.rowSel < 0 Then return


 回到顶部
帅哥哟,离线,有人找我吗?
zhangchi96
  14楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:542 积分:4919 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2017/2/4 14:24:00 [只看该作者]

个人估计,在筛选的时候,表一瞬间被认为是不存在的,所以我加了个条件语句如下:

If Tables("教职工信息表").Rows.count > 0 Then '求行数
Else
    Return '返回
End If
Dim dr As Row = e.Table.Rows(e.NewRange.rowSel)   'dr 为当前列   ‘此行是引起出错的行

敬请老师指导一下真实的原因。

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/4 14:29:00 [只看该作者]

 加入msgbox弹出那个值看一下便知道。会触发几次事件,所以要判断其值规避一下。

 回到顶部
帅哥哟,离线,有人找我吗?
zhangchi96
  16楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:542 积分:4919 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2017/2/4 14:58:00 [只看该作者]

加了下面一句话后,原来该运行的也不运行了
If e.NewRange.rowSel < 0 Then
     return
end if

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/4 15:05:00 [只看该作者]

代码没问题,请认真测试。


 回到顶部
帅哥哟,离线,有人找我吗?
zhangchi96
  18楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:542 积分:4919 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2017/2/4 17:34:00 [只看该作者]

谢谢老师!

 回到顶部
总数 18 上一页 1 2