以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教老师流水负数转换错误原因  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=196023)

--  作者:wakai
--  发布时间:2025/3/23 23:27:00
--  请教老师流水负数转换错误原因

因流水收入和支出在一个列中,正数收入放在借方金额,要把负数金额转换到贷方一列去,列类型为单精度小数,从下载的流水xls上导入
DataColChanged写如下代码

For Each r As Row In Tables("日记帐_日记帐明细").rows
    If r("日记账明细借方金额") < "0" Then
        r("日记账明细贷方金额")= math.abs(r("日记账明细借方金额"))
        r("日记账明细借方金额") = Nothing
    End If
Next

导入后提示

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20250323232113.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20250323232107.png
图片点击可在新窗口打开查看

但关闭窗体后,重新打开,格式转换功能又全部实现了,怎么写才能让它不提错误

--  作者:洮沙
--  发布时间:2025/3/24 13:38:00
--  
For Each r As Row In Tables("日记帐_日记帐明细").rows
    If r("日记账明细借方金额") < 0 Then
        r("日记账明细贷方金额")= math.abs(r("日记账明细借方金额"))
        r("日记账明细借方金额") = Nothing
    End If
Next
看一下是否可行?
另外财务数据建议用高精度数据类型好一些。
[此贴子已经被作者于2025/3/24 13:42:23编辑过]

--  作者:有点蓝
--  发布时间:2025/3/24 13:49:00
--  
1、出错的事件代码是下面这个,不是datacolchanged

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

2、这种代码放到datacolchanged也不合理

--  作者:wakai
--  发布时间:2025/3/24 14:44:00
--  
取消掉冒号也不行,谢谢了
--  作者:wakai
--  发布时间:2025/3/24 14:45:00
--  
蓝老师,按钮代码是这样的,那代码放到哪里好

Dim c As WinForm.ComboBox = e.Form.Controls("会计期间")
Dim d As WinForm.DropDownBox = e.Form.Controls("银行账号名称")
If c.Value=Nothing Then
    MessageBox.Show("请输入会计期间!")
    Return
Else If d.Value=Nothing Then
    MessageBox.Show("请选择银行帐号名称!")
    Return
Else
    Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
    dlg.Filter = "Excel文件|*.xlsx;*.xls;*.csv" \'设置筛选器
    If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
        
        Dim Cols1() As Integer = {0,6,6,7,7,3,2,11} \'execl列索引从0开始
        Dim Cols2() As String = {"单据头业务日期", "日记账明细借方金额", "单据头借方金额","日记账明细贷方金额","单据头贷方金额", "日记账明细对方银行账号","日记账明细对方账户名称","日记账明细摘要"}
        Dim Book As New XLS.Book(dlg.FileName)
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("日记帐_日记帐明细").StopRedraw()
        \'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        For n As Integer = 1 To Sheet.Rows.Count - 1
            Dim bh As String = sheet(n, 0).Text
           
            Dim r As Row = Tables("日记帐_日记帐明细").AddNew()
            For m As Integer = 0 To Cols1.Length - 1
                r(Cols2(m)) = Sheet(n, Cols1(m)).Value
            Next
           
        Next
        Tables("日记帐_日记帐明细").ResumeRedraw()
    End If    
    
End If

--  作者:有点蓝
--  发布时间:2025/3/24 15:01:00
--  
应该是表格有空值,判断一下

           For m As Integer = 0 To Cols1.Length - 1
if Sheet(n, Cols1(m)).text > ""
                r(Cols2(m)) = Sheet(n, Cols1(m)).Value
end if
            Next

--  作者:wakai
--  发布时间:2025/3/24 15:09:00
--  
可以了,谢谢蓝老师图片点击可在新窗口打开查看