这个本来就是您的工作,当然是自己想,您开发软件,不是自己想让别人帮你想吗,这又是什么道理?要搞清楚,foxtable是一个开发平台,功能业务都是要用户自己去理清自己去开发的。我们提供的是技术支持,只是教用户怎么用好帮助文档,和学会使用foxtable的各种功能。我们既不参与用户的开发,也不提供写代码、调试和改问题服务,只能是引导用户学会判断和改正自己的问题。
我陆陆续续不断引导您学会怎么去调试代码,注意我一般在什么地方加msgbox调试代码,调试的时候提示框里会弹出什么内容帮助调试,然后根据调试结果的反馈如何去判断问题在哪里。
以87楼的调试代码为例,这个位置加提示框,绝对是可以弹出来的,运行点调试会先弹出三栏式账,然后弹出true。true对应的是msgbox(tr is nothing)里的tr is nothing,说明tr这个变量是空值。也就是没有行对应这个变量,那么后面代码再给这个变量赋值肯定就会出错的。
那么我们可以往前在看看,哪里给tr变量赋值的,为什么会没有值。具体代码应该是这段:
Dim tr As Row 定义一个变量,这时还没有值
If e.Form.DropTable IsNot Nothing Then '如果下拉窗口是从表中打开
tr = e.Form.DropTable.Current '获取此表的当前行 很明显是窗口控件调用的,所以这里不会执行到
Else '如果下拉窗口是通过DropdownBox打开
Dim nm As String = e.Form.DropDownBox.BindingField '获取绑定的字段
If nm > "" Then
nm = nm.Split(".")(0) '获取绑定的表名
tr = Tables(nm).Current '获取此表的当前行 很明显窗口控件并没有绑定表格,所以这里也不会执行到
Else
e.Form.DropDownBox.Value = e.Node.DataRow("会计科目")
e.Form.DropDownBox.CloseDropdown()
Return
End If
End If
End If
因此上面这些代码最终都无法给tr变量赋值,tr就是一个空对象
再思考一下,窗口的控件既然没有绑定表格,下拉窗口里直接给控件赋值就行了吧,代码里还需要给表格赋值吗,也就是下面蓝色代码完全就是多余的
Select Case e.Form.DropDownBox.Form.Name
Case "三栏式账","三栏式数量金额账","多栏式明细账"
Select Case e.Node.Level
Case 0
tr("会计科目") = Vals(0)
e.Form.DropDownBox.Value = tr("会计科目")
e.Form.DropDownBox.CloseDropdown()
Case 1
tr("会计科目") = Vals(0) & "-" & Vals(1).SubString(9,Vals(1).Length - 9)
e.Form.DropDownBox.Value = tr("会计科目")
e.Form.DropDownBox.CloseDropdown()
Case 2