⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmxb.frm

📁 个人财务计算的好工具
💻 FRM
📖 第 1 页 / 共 4 页
字号:
   n = MsgBox("未到12月31日,如提前作年终处理,则使统计数据不准和这以后的数据当年度查不到!(除非在元旦前不输数据)" + Chr(13) + "你的确要作此处理吗?", 36, "年终处理")
   If n = 7 Then Exit Sub
End If

Comzt_Click '整年处理
Dim i As Integer, j As Integer, SZ As Single
Dim zb As Database
Dim reyear As Recordset
Dim reyzj As Recordset
Set zb = OpenDatabase(App.Path + "\zb.mdb")
Set reyear = zb.OpenRecordset("year", dbOpenDynaset) 'dbOpenDynaset类型才能用find
reyear.FindFirst ("年度='" + myyear + "'") '在YEAR表中找当前年度的处理情况
If reyear.NoMatch = True Then '若没有当前年度的记录则加入
reyear.AddNew
reyear.Fields(0) = myyear
reyear.Update
reyear.FindFirst ("年度='" + myyear + "'")
End If
Data2.Recordset.MoveLast
Data2.Recordset.MoveFirst 'YZJ表移到头
reyear.Edit
If reyear.AbsolutePosition = 0 Then '如果是年度中的第一个记录
   reyear.Fields(1) = Data2.Recordset.Fields(1) '则用月表中的第一条记录的上月结余
Else                                            '若是其它年度记录则用上年度的结余
   reyear.MovePrevious
   SZ = reyear.Fields(4)
   reyear.MoveNext
   reyear.Edit
   reyear.Fields(1) = SZ
End If
For i = 5 To reyear.Fields.Count - 1
    SZ = 0
    For j = 1 To Data2.Recordset.RecordCount
      SZ = Data2.Recordset.Fields(i) + SZ '循环计算YZJ表中各项收支数值和并存入YEAR表中
      Data2.Recordset.MoveNext
    Next j
    reyear.Fields(i) = SZ
    Data2.Recordset.MoveFirst
Next i
Data2.Recordset.MoveLast
reyear.Fields(2) = 0
reyear.Fields(3) = 0
For i = 1 To 5
reyear.Fields(2) = reyear.Fields(i + 4) + reyear.Fields(2) '当年的收入
reyear.Fields(3) = reyear.Fields(i + 9) + reyear.Fields(3) '当年的支出
Next i
reyear.Fields(4) = reyear.Fields(1) + reyear.Fields(2) - reyear.Fields(3) '得到当年结余
SZ = reyear.Fields(4)
reyear.Update
reyear.FindFirst ("年度 ='" + Trim(Str(Val(myyear) + 1)) + "'") '当年处理完后,找下一年度的记录
If reyear.NoMatch = True Then
reyear.AddNew '没有则加入
Else
reyear.Edit
End If
reyear.Fields(0) = Trim(Str(Val(myyear) + 1)) '并且对year表中下一年度初始化
reyear.Fields(1) = SZ
reyear.Update
Set reyzj = zb.OpenRecordset("yzj", dbOpenDynaset) '打开含有每年收支数据的YZJ表(dbOpenDynaset类型才能用find)
reyzj.FindFirst ("year(年月)='" + Trim(Str(Val(myyear) + 1)) + "'") '查找下一年度的第一条记录
If reyzj.NoMatch = True Then
reyzj.AddNew '没找到则加入
reyzj.Fields(0) = CDate(Trim(Str(Val(myyear) + 1)) + "-1-1") '时间定为一月
Else
reyzj.Edit '有则修改
End If
reyzj.Fields(1) = SZ 'YZJ表中的上月结余修改
reyzj.Update

Set reyzj = zb.OpenRecordset("xb", dbOpenDynaset) '打开含有每天收支数据的XB表(dbOpenDynaset类型才能用find)
reyzj.FindFirst ("year(收支日期)='" + Trim(Str(Val(myyear) + 1)) + "'") '查找下一年度的第一条记录
If reyzj.NoMatch = True Then
reyzj.AddNew '没找到则加入
reyzj.Fields(0) = CDate(Trim(Str(Val(myyear) + 1)) + "-1-1") '时间定为一月
reyzj.Fields(1) = 0
reyzj.Fields(2) = "其它收入"
reyzj.Fields(3) = "这条记录是程序自己加的,若本年中没有其它收支记录,请不要删除它,但可以修改."
reyzj.Fields(4) = False
reyzj.Update '加入一个0收入的记录使程序下次启动时不会测到最新年度记录数为0
End If
reyzj.Close
reyear.FindFirst ("年度 ='" + myyear + "'") '回到刚处理的年度
MsgBox myyear + "年度情况:" + Chr(13) + "去年结余:" + Str(reyear.Fields(1)) + Chr(13) _
+ "当年收入:" + Str(reyear.Fields(2)) + Chr(13) + "当年支出:" + Str(reyear.Fields(3)) + Chr(13) _
+ "当年结余:" + Str(reyear.Fields(4)) + Chr(13), 48, myyear + "年度处理完毕"

End Sub

Private Sub Comauto_Click()
Frmadd.Show 1
Data2.Refresh
End Sub

Private Sub Combo1_LostFocus()
Select Case Combo1.Text
 Case "工资收入"
 Case "奖金收入"
 Case "福利收入"
 Case "打工收入"
 Case "其它收入"
 Case "生活支出"
 Case "娱乐支出"
 Case "学习支出"
 Case "投资支出"
 Case "其它支出"
 Case Else
 MsgBox "您输入的收支类别不合程序要求,这可能会造成计算及查询的不正确!" + Chr(13) + "请点击右边的下拉箭头,并从中选择一个类别!", 48, "类别错误"
 Combo1.SelStart = 0
 Combo1.SelLength = Len(Combo1.Text)
 Combo1.SetFocus
 End Select
 
End Sub

Private Sub Comcancl_Click()
On Error Resume Next

Data1.Recordset.CancelUpdate


Dim t As Boolean
t = True
visok (t)
Call mok
End Sub

Private Sub comedit_Click()

Dim t As Boolean
t = False
visok (t)
Data1.Recordset.Edit
End Sub

Private Sub comlr_Click()
Frmlr.Show 1
End Sub




Private Sub comtable_Click()
Frmpic.Show 1
End Sub

Private Sub Comok_Click()
On Error Resume Next
Data1.Recordset.Update
Dim t As Boolean
t = True
visok (t)
Call mok
End Sub

Private Sub Comzt_Click()
Dim sl(4) As Single, zc(4) As Single 'sl(收入数组)zc(支出数组)
Dim zsl As Single, zzc As Single '总收入\支出
Data1.Refresh '记录刷新(重新排序)
Data1.Recordset.MoveLast
Data1.Recordset.MoveFirst
Dim i As Integer, j As Integer
Dim qmdate As Date, qmju As Single '前面日期和结余
For j = 1 To 12
    For i = 0 To 4
    sl(i) = 0
    zc(i) = 0
    Next i
    zsl = 0
    zzc = 0
    Data1.Recordset.FindFirst "month(收支日期)=" + Str(j) '查找i月份
        If Month(Data1.Recordset.Fields(0)) <> j Then '如没有
        GoTo last
    End If
Do While Data1.Recordset.AbsolutePosition <> -1 '是否到尾(不是最后一个记录)
        If Month(Data1.Recordset.Fields(0)) = j Then
          Select Case Data1.Recordset.Fields(2) '分类计算
                 Case "工资收入"
                sl(0) = Data1.Recordset.Fields(1) + sl(0)
                 Case "奖金收入"
                sl(1) = Data1.Recordset.Fields(1) + sl(1)
                 Case "福利收入"
                sl(2) = Data1.Recordset.Fields(1) + sl(2)
                 Case "打工收入"
                sl(3) = Data1.Recordset.Fields(1) + sl(3)
                 Case "其它收入"
                sl(4) = Data1.Recordset.Fields(1) + sl(4)
                 Case "生活支出"
                zc(0) = Data1.Recordset.Fields(1) + zc(0)
                 Case "娱乐支出"
                zc(1) = Data1.Recordset.Fields(1) + zc(1)
                 Case "学习支出"
                zc(2) = Data1.Recordset.Fields(1) + zc(2)
                 Case "投资支出"
                zc(3) = Data1.Recordset.Fields(1) + zc(3)
                 Case "其它支出"
                zc(4) = Data1.Recordset.Fields(1) + zc(4)
          End Select
           Data1.Recordset.MoveNext '测试下一个记录是否合适条件
        Else
           Exit Do
        End If
 Loop
 Data1.Refresh

For i = 0 To 4
zsl = zsl + sl(i) '总收入
zzc = zzc + zc(i) '总支出
Next i
    Data2.Recordset.FindFirst "month(年月)=" + Str(j) '查找统计表中的j月记录
    
If Month(Data2.Recordset.Fields(0)) <> j Then '没有
          Data2.Recordset.FindFirst "month(年月)=" + Str(j - 1) '查找统计表中的上一月记录
          qmdate = Data2.Recordset.Fields(0)
          qmju = Data2.Recordset.Fields(4)
          Data2.Recordset.AddNew
          Data2.Recordset.Fields(0) = qmdate + 32
   '       Data2.Recordset.Fields(0) = CDate(Str(year(CDate(qmdate))) + "-" + Trim(Str(HScroll1.Value)) + "-1")
          Data2.Recordset.Fields(1) = qmju
          Data2.Recordset.Update
End If
   Data2.Recordset.FindFirst "month(年月)=" + Str(j - 1) '查找统计表中的上一月记录
   If Data2.Recordset.NoMatch Then '本月就是第一条,找不到上月的
     qmju = Data2.Recordset.Fields(1)
   Else
     qmju = Data2.Recordset.Fields(4)
   End If
   Data2.Recordset.FindFirst "month(年月)=" + Str(j) '查找统计表中的当月记录
   Data2.Recordset.Edit
   Data2.Recordset.Fields(1) = qmju
   Data2.Recordset.Fields(2) = zsl
   Data2.Recordset.Fields(3) = zzc
   Data2.Recordset.Fields(4) = Data2.Recordset.Fields(1) + zsl - zzc
For i = 0 To 4
Data2.Recordset.Fields(i + 5) = sl(i)
Data2.Recordset.Fields(i + 10) = zc(i)
Next i
Data2.Recordset.Update
last:
Next j
visok (True)
mok

End Sub

Private Sub CX_Click()
comlr_Click
End Sub

Private Sub Data1_Error(DataErr As Integer, Response As Integer)
  '这就是放置错误处理代码的地方
  '如果想忽略错误,注释掉下面的行
  '如果想捕捉错误,在这里添加错误处理代码
  MsgBox "数据错误事件捕捉到错误:" & Error$(DataErr)
  Response = 0  '忽略错误
End Sub



Private Sub Command1_Click()

Data1.Recordset.AddNew
Data1.Recordset(2) = "工资收入"
Data1.Recordset.Update
Data1.Recordset.MoveLast
Dim t As Boolean
t = False
visok (t)
Data1.Recordset.Edit
Slirecon.max = Data1.Recordset.RecordCount - 1
Slirecon.LargeChange = Int(Slirecon.max / 10) + 1
Label9.Caption = Data1.Recordset.RecordCount
End Sub

Private Sub Command2_Click()
On Error Resume Next
If Data1.Recordset.RecordCount = 1 Then
Dim zb As Database
Dim reyear As Recordset
Dim i As Integer, n As Integer
'Data1.Recordset.Delete
MsgBox "你删除本年最后一条收支情况,程序将关闭!", 48, "下次再来吧!"
Set zb = OpenDatabase(App.Path + "\zb.mdb")
Set reyear = zb.OpenRecordset("year", dbOpenDynaset)
n = reyear.RecordCount
For i = 1 To n + 1
    reyear.Delete
    reyear.MoveFirst
Next i
Set reyear = zb.OpenRecordset("yzj", dbOpenDynaset)
n = reyear.RecordCount
For i = 1 To n + 1
    reyear.Delete
    reyear.MoveFirst
Next i
Set reyear = zb.OpenRecordset("autoadd", dbOpenDynaset)
n = reyear.RecordCount
For i = 1 To n + 1
    reyear.Delete
    reyear.MoveFirst
Next i
Set reyear = zb.OpenRecordset("xb", dbOpenDynaset)
n = reyear.RecordCount
For i = 1 To n + 1
    reyear.Delete
    reyear.MoveFirst
Next i

Form_Unload (0)
Exit Sub
End If
        Dim ko As Integer, strsj As String, book As Variant
        strsj = Data1.Recordset.Fields(0) & " " & Str(Data1.Recordset.Fields(1)) & "元" & Data1.Recordset.Fields(3) & "的情况吗?"
        ko = MsgBox("的确要删除" + strsj, 36, "删除记录")
        If ko = vbYes Then
      
          ko = Data1.Recordset.AbsolutePosition
                   
             Data1.Recordset.Delete '每作一次删除,AbsolutePosition =-1,当前无记录
                Data1.Refresh '记录刷新(重新排序)
                Data1.Recordset.MoveFirst
                Data1.Recordset.MoveLast
                Data1.Recordset.MoveFirst
                    If ko < Data1.Recordset.RecordCount - 1 Then
                Data1.Recordset.Move ko
                    Else
                Data1.Recordset.Move ko - 1
                    End If
              
        End If
 Call mok

Slirecon.max = Data1.Recordset.RecordCount - 1
Slirecon.LargeChange = Int(Slirecon.max / 10) + 1
Label9.Caption = Data1.Recordset.RecordCount
End Sub

Private Sub Command3_Click()
'Command4.Enabled = True '上移按钮有效
Toolbar1.Buttons.Item(3).Enabled = True
sy.Enabled = True
Data1.Recordset.MoveNext '下移
If Data1.Recordset.AbsolutePosition = Data1.Recordset.RecordCount - 1 Or Data1.Recordset.AbsolutePosition = -1 Then '是否到最后一个记录(不是检测记录末)
'Command3.Enabled = False '如是则下移按钮失效
Toolbar1.Buttons.Item(4).Enabled = False
XY.Enabled = False
End If
textfind.Text = Format(Data1.Recordset.Fields(0), "yyyy-mm-dd")
Slirecon.Value = Data1.Recordset.AbsolutePosition
Label10.Caption = Str(Data1.Recordset.AbsolutePosition + 1)
End Sub

Private Sub Command4_Click()
'Command3.Enabled = True
Toolbar1.Buttons.Item(4).Enabled = True
XY.Enabled = True
Data1.Recordset.MovePrevious
If Data1.Recordset.AbsolutePosition = 0 Or Data1.Recordset.AbsolutePosition = -1 Then '是否到第一个记录(不是检测记录头)
'Command4.Enabled = False
Toolbar1.Buttons.Item(3).Enabled = False
sy.Enabled = False
End If
textfind.Text = Format(Data1.Recordset.Fields(0), "yyyy-mm-dd")
Slirecon.Value = Data1.Recordset.AbsolutePosition
Label10.Caption = Str(Data1.Recordset.AbsolutePosition + 1)
End Sub




Private Sub Command5_Click()
Data1.Refresh '记录刷新(重新排序)
Data1.Recordset.MoveFirst
Data1.Recordset.MoveLast
Data1.Recordset.MoveFirst
mok
Slirecon.max = Data1.Recordset.RecordCount - 1
Slirecon.LargeChange = Int(Slirecon.max / 10) + 1
End Sub





'Private Sub Data2_Reposition()
''HScroll1.Value = Month(Data2.Recordset.Fields(0))
'Command6.Caption = "计算" & Trim(Str(HScroll1.Value)) & "月份"
'End Sub

Private Sub EX_Click()
comtable_Click
End Sub

Private Sub EXIT_Click()
Unload frmxb
End Sub

Private Sub Form_Activate()
Me.Caption = "小小收支薄-每日收支详情登记" + "(" + myyear + "年度)"
Data1.RecordSource = "select * from xb where year(收支日期)='" + myyear + "' order by 收支日期"
Data1.Refresh
Data2.RecordSource = "select * from yzj where year(年月)='" + myyear + "' order by 年月"
Data2.Refresh
Data1.Recordset.MoveFirst
'Data2.Recordset.MoveFirst
visok (True)
mok

End Sub

Private Sub Form_Load()
Dim i As Integer
Combo1.AddItem "工资收入"
Combo1.AddItem "奖金收入"
Combo1.AddItem "福利收入"
Combo1.AddItem "打工收入"
Combo1.AddItem "其它收入"
Combo1.AddItem "生活支出"
Combo1.AddItem "学习支出"
Combo1.AddItem "娱乐支出"
Combo1.AddItem "投资支出"
Combo1.AddItem "其它支出"

Dim zbauto As Database
'Dim zb As Database
Dim rexb As Recordset
Dim reauto As Recordset
Dim autodate As Date
Dim auto As Integer, autm As Integer

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -