excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA 收费单查询模块/代码

本文于2023年6月17日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!

☆本期内容概要☆

代码

Usf_VoucherList的UserForm_Activate代码,因为是从别的程序中复制过来的,可能存在一些冗余甚至错误代码,暂时先不管它了,窗体能正常启动就好。

Private Sub UserForm_Activate()

'On Error Resume Next

Dim DicMonth As Object

Dim LvItem As ListItem

Dim sData()

Dim arrTemp()

Dim sql1 As String, sql2 As String

myDataFile = ThisWorkbook.Path & "\收费管理系统数据库.accdb"

Company = GetInformation("Company")

'Stop

Me.CmdUp.Height = Me.CmbMonth.Height / 2

Me.CmdUp.Top = Me.CmbMonth.Top

Me.CmdUp.Left = Me.CmbMonth.Left + Me.CmbMonth.Width

Me.CmdDown.Height = Me.CmdUp.Height

Me.CmdDown.Top = Me.CmdUp.Top + Me.CmdUp.Height

Me.CmdDown.Left = Me.CmdUp.Left

Set DicMonth = CreateObject("Scripting.Dictionary")

Me.BackColor = RGB(218, 165, 32)

Me.CmdSelectAll.Visible = True

Me.CmdSelectAll.BackColor = RGB(143, 188, 143)

Me.CmdPrint.Visible = True

Me.Caption = tempValue

Me.LbTitle.Caption = tempValue

sql1 = "select * from tb收费明细 where ID in " _

& "(select min(ID) from tb收费明细 group by 单号) order by 单号"

sql2 = "select 日期,单号,sum(金额) as 金额 from tb收费明细 group by 日期,单号"

SQL = "select a.日期,a.单号,a.客户,a.渠道,a.科室,a.医生,b.金额,a.月份 from (" _

& sql1 & ") as a left join (" & sql2 & ") as b " _

& "on a.日期 = b.日期 and a.单号 = b.单号" _

& " order by a.月份,a.单号"

If tempValue = "收费单查询" Then

Me.CmdPrint.Visible = False

End If

arrTemp = GetData(myDataFile, sql1)

Debug.Print SQL

aData = GetData(myDataFile, SQL)

sTbtitle = GetFields(myDataFile, SQL)

PosMonth = Pxy(sTbtitle, "月份") - 1

PosNumber = Pxy(sTbtitle, "凭证号") - 1

For i = 0 To UBound(sTbtitle, 1)

With Me.LvVoucherList

If i = 0 Then

.ColumnHeaders.Add , , sTbtitle(i), 90

ElseIf i = 1 Then

.ColumnHeaders.Add , , sTbtitle(i), 100, lvwColumnCenter

ElseIf i = 2 Then

.ColumnHeaders.Add , , sTbtitle(i), 80, lvwColumnCenter

Else

.ColumnHeaders.Add , , sTbtitle(i), 70, lvwColumnCenter

End If

End With

Next

With Me.LvDetail

.View = lvwReport 'listview控件的显示外观

.Gridlines = True '是否有表格线,True有表格线

'.Sorted = True

'.CheckBoxes = True

.LabelEdit = lvwManual

.FullRowSelect = True

.ForeColor = vbBlue

End With

With Me.LvVoucherList

.View = lvwReport 'listview控件的显示外观

.Gridlines = True '是否有表格线,True有表格线

.Sorted = True

.CheckBoxes = True

.LabelEdit = lvwManual

.FullRowSelect = True

End With

'Stop

iRow = UBound(aData, 2)

iCol = UBound(aData, 1)

p = Pxy(sTbtitle, "月份")

For i = 0 To iRow

DicMonth(aData(p - 1, i)) = 1

Next

With Me.CmbMonth

.List = DicMonth.keys

.Style = fmStyleDropDownList

.Text = .List(.ListCount - 1)

End With

Me.LvVoucherList.ListItems.Clear

For i = 0 To iRow

If aData(Pxy(sTbtitle, "月份") - 1, i) = Me.CmbMonth Then

Set LvItem = Me.LvVoucherList.ListItems.Add

LvItem.Text = Format(aData(0, i), "YYYY/MM/DD")

For j = 1 To iCol

'If j = 2 Then

'LvItem.SubItems(j) = Format(aData(j, i), "Standard")

'Else

LvItem.SubItems(j) = aData(j, i)

'End If

Next

End If

Next

SQL = "select top 1 * from tb收费明细"

tbTitle = GetFields(myDataFile, SQL)

For i = 0 To UBound(tbTitle, 1)

With Me.LvDetail

If i = 0 Then

.ColumnHeaders.Add , , tbTitle(i), 30

ElseIf i = 2 Then

.ColumnHeaders.Add , , tbTitle(i), 80, lvwColumnCenter

ElseIf i = Pxy(tbTitle, "收费项目") - 1 Then

.ColumnHeaders.Add , , tbTitle(i), 120

Else

.ColumnHeaders.Add , , tbTitle(i), 70, lvwColumnCenter

End If

End With

Next

End Sub

LvVoucherList的ItemClick代码,用来查询当前点击项目的明细记录。

Private Sub LvVoucherList_ItemClick(ByVal Item As MSComctlLib.ListItem)

Dim iRw As Integer, iCo As Integer

On Error Resume Next

Item.Checked = Not Item.Checked

If Me.LvVoucherList.ListItems.Count = 0 Then

Exit Sub

End If

Me.LvDetail.ListItems.Clear

n = Me.LvVoucherList.SelectedItem.SubItems(1)

SQL = "select * from tb收费明细 where 单号= '" & n & "' order by ID"

dData = GetData(myDataFile, SQL)

iRw = UBound(dData, 2)

iCo = UBound(dData, 1)

Me.LvDetail.ListItems.Clear

For i = 0 To iRw

Set LvItem = Me.LvDetail.ListItems.Add

LvItem.Text = dData(0, i)

LvItem.ForeColor = Me.LvVoucherList.SelectedItem.ForeColor

For j = 1 To iCo

If j = Pxy(tbTitle, "金额") - 1 Then

LvItem.SubItems(j) = Format(dData(j, i), "Standard")

Else

LvItem.SubItems(j) = dData(j, i)

End If

LvItem.ListSubItems(j).ForeColor = Me.LvVoucherList.SelectedItem.ListSubItems(1).ForeColor

Next

Next

'Stop

End Sub

导出按钮

Private Sub CmdOutPut_Click()

Dim k As Integer

For i = 1 To Me.LvVoucherList.ListItems.Count

If Me.LvVoucherList.ListItems(i).Checked = True Then

k = k + 1

End If

Next

If k = 0 Then

MsgBox "请至少勾选一条记录!"

Exit Sub

End If

If Not wContinue("即将导出数据!") Then Exit Sub

On Error Resume Next

Dim arrT()

Dim iPath As String

Dim iSheet As Worksheet

iPath = ThisWorkbook.Path & "\"

fName = Company & "(" & Me.CmbMonth & ")" & Me.LbTitle & Format(VBA.Now, "YYYYMMDDhhmmss") & ".xlsx"

Application.DisplayAlerts = False

iRow = Me.LvVoucherList.ListItems.Count + 1

iCol = Me.LvVoucherList.ColumnHeaders.Count

ReDim arrT(1 To k + 1, 1 To iCol)

For i = 1 To iCol

arrT(1, i) = Me.LvVoucherList.ColumnHeaders(i)

Next

H = 2

For i = 2 To iRow

If Me.LvVoucherList.ListItems(i - 1).Checked = True Then

arrT(H, 1) = Me.LvVoucherList.ListItems(i - 1).Text

For j = 2 To iCol

arrT(H, j) = Me.LvVoucherList.ListItems(i - 1).SubItems(j - 1)

Next

H = H + 1

End If

Next

Workbooks.Add

ActiveWorkbook.Sheets(1).Range("A1").Resize(k + 1, iCol) = arrT

ActiveWorkbook.SaveAs Filename:=iPath & fName

ActiveWorkbook.Close

MsgBox ("成功导出文件" & iPath & fName)

Unload Me

Application.DisplayAlerts = True

End Sub

这里对导出方式作了修改,在前面分享过的文件中,导出可能是全部导出,这里我们把它修改为按选中的记录导出。

好,今天就这样吧。欢迎点赞、留言、分享,谢谢大家,我们下期再会。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接